/* Generated by Cython 0.29.14 */

#define PY_SSIZE_T_CLEAN
#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
    #error Cython requires Python 2.6+ or Python 3.3+.
#else
#define CYTHON_ABI "0_29_14"
#define CYTHON_HEX_VERSION 0x001D0EF0
#define CYTHON_FUTURE_DIVISION 0
#include <stddef.h>
#ifndef offsetof
  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(WIN32) && !defined(MS_WINDOWS)
  #ifndef __stdcall
    #define __stdcall
  #endif
  #ifndef __cdecl
    #define __cdecl
  #endif
  #ifndef __fastcall
    #define __fastcall
  #endif
#endif
#ifndef DL_IMPORT
  #define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
  #define DL_EXPORT(t) t
#endif
#define __PYX_COMMA ,
#ifndef HAVE_LONG_LONG
  #if PY_VERSION_HEX >= 0x02070000
    #define HAVE_LONG_LONG
  #endif
#endif
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
  #define Py_HUGE_VAL HUGE_VAL
#endif
#ifdef PYPY_VERSION
  #define CYTHON_COMPILING_IN_PYPY 1
  #define CYTHON_COMPILING_IN_PYSTON 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #if PY_VERSION_HEX < 0x03050000
    #undef CYTHON_USE_ASYNC_SLOTS
    #define CYTHON_USE_ASYNC_SLOTS 0
  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
    #define CYTHON_USE_ASYNC_SLOTS 1
  #endif
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #undef CYTHON_USE_UNICODE_WRITER
  #define CYTHON_USE_UNICODE_WRITER 0
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #undef CYTHON_AVOID_BORROWED_REFS
  #define CYTHON_AVOID_BORROWED_REFS 1
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #undef CYTHON_USE_TP_FINALIZE
  #define CYTHON_USE_TP_FINALIZE 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
#elif defined(PYSTON_VERSION)
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_PYSTON 1
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #ifndef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #undef CYTHON_USE_ASYNC_SLOTS
  #define CYTHON_USE_ASYNC_SLOTS 0
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #ifndef CYTHON_USE_UNICODE_INTERNALS
    #define CYTHON_USE_UNICODE_INTERNALS 1
  #endif
  #undef CYTHON_USE_UNICODE_WRITER
  #define CYTHON_USE_UNICODE_WRITER 0
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_ASSUME_SAFE_MACROS
    #define CYTHON_ASSUME_SAFE_MACROS 1
  #endif
  #ifndef CYTHON_UNPACK_METHODS
    #define CYTHON_UNPACK_METHODS 1
  #endif
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #undef CYTHON_USE_TP_FINALIZE
  #define CYTHON_USE_TP_FINALIZE 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
#else
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_PYSTON 0
  #define CYTHON_COMPILING_IN_CPYTHON 1
  #ifndef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #if PY_VERSION_HEX < 0x02070000
    #undef CYTHON_USE_PYTYPE_LOOKUP
    #define CYTHON_USE_PYTYPE_LOOKUP 0
  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
    #define CYTHON_USE_PYTYPE_LOOKUP 1
  #endif
  #if PY_MAJOR_VERSION < 3
    #undef CYTHON_USE_ASYNC_SLOTS
    #define CYTHON_USE_ASYNC_SLOTS 0
  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
    #define CYTHON_USE_ASYNC_SLOTS 1
  #endif
  #if PY_VERSION_HEX < 0x02070000
    #undef CYTHON_USE_PYLONG_INTERNALS
    #define CYTHON_USE_PYLONG_INTERNALS 0
  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
    #define CYTHON_USE_PYLONG_INTERNALS 1
  #endif
  #ifndef CYTHON_USE_PYLIST_INTERNALS
    #define CYTHON_USE_PYLIST_INTERNALS 1
  #endif
  #ifndef CYTHON_USE_UNICODE_INTERNALS
    #define CYTHON_USE_UNICODE_INTERNALS 1
  #endif
  #if PY_VERSION_HEX < 0x030300F0
    #undef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #elif !defined(CYTHON_USE_UNICODE_WRITER)
    #define CYTHON_USE_UNICODE_WRITER 1
  #endif
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_ASSUME_SAFE_MACROS
    #define CYTHON_ASSUME_SAFE_MACROS 1
  #endif
  #ifndef CYTHON_UNPACK_METHODS
    #define CYTHON_UNPACK_METHODS 1
  #endif
  #ifndef CYTHON_FAST_THREAD_STATE
    #define CYTHON_FAST_THREAD_STATE 1
  #endif
  #ifndef CYTHON_FAST_PYCALL
    #define CYTHON_FAST_PYCALL 1
  #endif
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
  #endif
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
  #endif
  #ifndef CYTHON_USE_DICT_VERSIONS
    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
  #endif
  #ifndef CYTHON_USE_EXC_INFO_STACK
    #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
  #endif
#endif
#if !defined(CYTHON_FAST_PYCCALL)
#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
  #undef SHIFT
  #undef BASE
  #undef MASK
  #ifdef SIZEOF_VOID_P
    enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
  #endif
#endif
#ifndef __has_attribute
  #define __has_attribute(x) 0
#endif
#ifndef __has_cpp_attribute
  #define __has_cpp_attribute(x) 0
#endif
#ifndef CYTHON_RESTRICT
  #if defined(__GNUC__)
    #define CYTHON_RESTRICT __restrict__
  #elif defined(_MSC_VER) && _MSC_VER >= 1400
    #define CYTHON_RESTRICT __restrict
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_RESTRICT restrict
  #else
    #define CYTHON_RESTRICT
  #endif
#endif
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
#     define CYTHON_UNUSED __attribute__ ((__unused__))
#   else
#     define CYTHON_UNUSED
#   endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
#   define CYTHON_UNUSED __attribute__ ((__unused__))
# else
#   define CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
#  if defined(__cplusplus)
     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
#  else
#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
#  endif
#endif
#ifndef CYTHON_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON
#  define CYTHON_NCP_UNUSED
# else
#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#endif
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
#ifdef _MSC_VER
    #ifndef _MSC_STDINT_H_
        #if _MSC_VER < 1300
           typedef unsigned char     uint8_t;
           typedef unsigned int      uint32_t;
        #else
           typedef unsigned __int8   uint8_t;
           typedef unsigned __int32  uint32_t;
        #endif
    #endif
#else
   #include <stdint.h>
#endif
#ifndef CYTHON_FALLTHROUGH
  #if defined(__cplusplus) && __cplusplus >= 201103L
    #if __has_cpp_attribute(fallthrough)
      #define CYTHON_FALLTHROUGH [[fallthrough]]
    #elif __has_cpp_attribute(clang::fallthrough)
      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
    #elif __has_cpp_attribute(gnu::fallthrough)
      #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
    #endif
  #endif
  #ifndef CYTHON_FALLTHROUGH
    #if __has_attribute(fallthrough)
      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
    #else
      #define CYTHON_FALLTHROUGH
    #endif
  #endif
  #if defined(__clang__ ) && defined(__apple_build_version__)
    #if __apple_build_version__ < 7000000
      #undef  CYTHON_FALLTHROUGH
      #define CYTHON_FALLTHROUGH
    #endif
  #endif
#endif

#ifndef CYTHON_INLINE
  #if defined(__clang__)
    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
  #elif defined(__GNUC__)
    #define CYTHON_INLINE __inline__
  #elif defined(_MSC_VER)
    #define CYTHON_INLINE __inline
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_INLINE inline
  #else
    #define CYTHON_INLINE
  #endif
#endif

#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
  #define Py_OptimizeFlag 0
#endif
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#if PY_MAJOR_VERSION < 3
  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
  #define __Pyx_DefaultClassType PyClass_Type
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
  #define __Pyx_DefaultClassType PyType_Type
#endif
#ifndef Py_TPFLAGS_CHECKTYPES
  #define Py_TPFLAGS_CHECKTYPES 0
#endif
#ifndef Py_TPFLAGS_HAVE_INDEX
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#ifndef Py_TPFLAGS_HAVE_FINALIZE
  #define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#ifndef METH_STACKLESS
  #define METH_STACKLESS 0
#endif
#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
  #ifndef METH_FASTCALL
     #define METH_FASTCALL 0x80
  #endif
  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
                                                          Py_ssize_t nargs, PyObject *kwnames);
#else
  #define __Pyx_PyCFunctionFast _PyCFunctionFast
  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
#endif
#if CYTHON_FAST_PYCCALL
#define __Pyx_PyFastCFunction_Check(func)\
    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
#else
#define __Pyx_PyFastCFunction_Check(func) 0
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
  #define PyObject_Malloc(s)   PyMem_Malloc(s)
  #define PyObject_Free(p)     PyMem_Free(p)
  #define PyObject_Realloc(p)  PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
  #define PyMem_RawMalloc(n)           PyMem_Malloc(n)
  #define PyMem_RawRealloc(p, n)       PyMem_Realloc(p, n)
  #define PyMem_RawFree(p)             PyMem_Free(p)
#endif
#if CYTHON_COMPILING_IN_PYSTON
  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
#else
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
#endif
#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x03060000
  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#elif PY_VERSION_HEX >= 0x03000000
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#else
  #define __Pyx_PyThreadState_Current _PyThreadState_Current
#endif
#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
#include "pythread.h"
#define Py_tss_NEEDS_INIT 0
typedef int Py_tss_t;
static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
  *key = PyThread_create_key();
  return 0;
}
static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
  Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
  *key = Py_tss_NEEDS_INIT;
  return key;
}
static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
  PyObject_Free(key);
}
static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
  return *key != Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
  PyThread_delete_key(*key);
  *key = Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
  return PyThread_set_key_value(*key, value);
}
static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
  return PyThread_get_key_value(*key);
}
#endif
#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
#else
#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
#endif
#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#else
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStr(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
#else
#define __Pyx_PyDict_GetItemStr(dict, name)  PyDict_GetItem(dict, name)
#endif
#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
  #define CYTHON_PEP393_ENABLED 1
  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                              0 : _PyUnicode_Ready((PyObject *)(op)))
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
#else
  #define CYTHON_PEP393_ENABLED 0
  #define PyUnicode_1BYTE_KIND  1
  #define PyUnicode_2BYTE_KIND  2
  #define PyUnicode_4BYTE_KIND  4
  #define __Pyx_PyUnicode_READY(op)       (0)
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
#endif
#if CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
#else
  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
#endif
#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
#else
  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
#endif
#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
  #define PyObject_ASCII(o)            PyObject_Repr(o)
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBaseString_Type            PyUnicode_Type
  #define PyStringObject               PyUnicodeObject
  #define PyString_Type                PyUnicode_Type
  #define PyString_Check               PyUnicode_Check
  #define PyString_CheckExact          PyUnicode_CheckExact
  #define PyObject_Unicode             PyObject_Str
#endif
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
#else
  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
#endif
#if CYTHON_ASSUME_SAFE_MACROS
  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
#else
  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyIntObject                  PyLongObject
  #define PyInt_Type                   PyLong_Type
  #define PyInt_Check(op)              PyLong_Check(op)
  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
  #define PyInt_FromString             PyLong_FromString
  #define PyInt_FromUnicode            PyLong_FromUnicode
  #define PyInt_FromLong               PyLong_FromLong
  #define PyInt_FromSize_t             PyLong_FromSize_t
  #define PyInt_FromSsize_t            PyLong_FromSsize_t
  #define PyInt_AsLong                 PyLong_AsLong
  #define PyInt_AS_LONG                PyLong_AS_LONG
  #define PyInt_AsSsize_t              PyLong_AsSsize_t
  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
  #define PyNumber_Int                 PyNumber_Long
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBoolObject                 PyLongObject
#endif
#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
  #ifndef PyUnicode_InternFromString
    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
  #endif
#endif
#if PY_VERSION_HEX < 0x030200A4
  typedef long Py_hash_t;
  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
#else
  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func))
#else
  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
#endif
#if CYTHON_USE_ASYNC_SLOTS
  #if PY_VERSION_HEX >= 0x030500B1
    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
  #else
    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
  #endif
#else
  #define __Pyx_PyType_AsAsync(obj) NULL
#endif
#ifndef __Pyx_PyAsyncMethodsStruct
    typedef struct {
        unaryfunc am_await;
        unaryfunc am_aiter;
        unaryfunc am_anext;
    } __Pyx_PyAsyncMethodsStruct;
#endif

#if defined(WIN32) || defined(MS_WINDOWS)
  #define _USE_MATH_DEFINES
#endif
#include <math.h>
#ifdef NAN
#define __PYX_NAN() ((float) NAN)
#else
static CYTHON_INLINE float __PYX_NAN() {
  float value;
  memset(&value, 0xFF, sizeof(value));
  return value;
}
#endif
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif


#define __PYX_ERR(f_index, lineno, Ln_error) \
{ \
  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
}

#ifndef __PYX_EXTERN_C
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#define __PYX_HAVE__mpi4py__MPI
#define __PYX_HAVE_API__mpi4py__MPI
/* Early includes */
#include "mpi.h"
#include "atimport.h"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#endif

typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;

#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
#define __PYX_DEFAULT_STRING_ENCODING ""
#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#define __Pyx_uchar_cast(c) ((unsigned char)c)
#define __Pyx_long_cast(x) ((long)x)
#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
    (sizeof(type) < sizeof(Py_ssize_t))  ||\
    (sizeof(type) > sizeof(Py_ssize_t) &&\
          likely(v < (type)PY_SSIZE_T_MAX ||\
                 v == (type)PY_SSIZE_T_MAX)  &&\
          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
                                v == (type)PY_SSIZE_T_MIN)))  ||\
    (sizeof(type) == sizeof(Py_ssize_t) &&\
          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
                               v == (type)PY_SSIZE_T_MAX)))  )
static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
    return (size_t) i < (size_t) limit;
}
#if defined (__cplusplus) && __cplusplus >= 201103L
    #include <cstdlib>
    #define __Pyx_sst_abs(value) std::abs(value)
#elif SIZEOF_INT >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) abs(value)
#elif SIZEOF_LONG >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) labs(value)
#elif defined (_MSC_VER)
    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define __Pyx_sst_abs(value) llabs(value)
#elif defined (__GNUC__)
    #define __Pyx_sst_abs(value) __builtin_llabs(value)
#else
    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString        PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if PY_MAJOR_VERSION < 3
    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#else
    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
#endif
#define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
    const Py_UNICODE *u_end = u;
    while (*u_end++) ;
    return (size_t)(u_end - u - 1);
}
#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
#define __Pyx_PySequence_Tuple(obj)\
    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#else
#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
#endif
#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
static int __Pyx_sys_getdefaultencoding_not_ascii;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
    PyObject* sys;
    PyObject* default_encoding = NULL;
    PyObject* ascii_chars_u = NULL;
    PyObject* ascii_chars_b = NULL;
    const char* default_encoding_c;
    sys = PyImport_ImportModule("sys");
    if (!sys) goto bad;
    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
    Py_DECREF(sys);
    if (!default_encoding) goto bad;
    default_encoding_c = PyBytes_AsString(default_encoding);
    if (!default_encoding_c) goto bad;
    if (strcmp(default_encoding_c, "ascii") == 0) {
        __Pyx_sys_getdefaultencoding_not_ascii = 0;
    } else {
        char ascii_chars[128];
        int c;
        for (c = 0; c < 128; c++) {
            ascii_chars[c] = c;
        }
        __Pyx_sys_getdefaultencoding_not_ascii = 1;
        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
        if (!ascii_chars_u) goto bad;
        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
            PyErr_Format(
                PyExc_ValueError,
                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
                default_encoding_c);
            goto bad;
        }
        Py_DECREF(ascii_chars_u);
        Py_DECREF(ascii_chars_b);
    }
    Py_DECREF(default_encoding);
    return 0;
bad:
    Py_XDECREF(default_encoding);
    Py_XDECREF(ascii_chars_u);
    Py_XDECREF(ascii_chars_b);
    return -1;
}
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#else
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
static char* __PYX_DEFAULT_STRING_ENCODING;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
    PyObject* sys;
    PyObject* default_encoding = NULL;
    char* default_encoding_c;
    sys = PyImport_ImportModule("sys");
    if (!sys) goto bad;
    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
    Py_DECREF(sys);
    if (!default_encoding) goto bad;
    default_encoding_c = PyBytes_AsString(default_encoding);
    if (!default_encoding_c) goto bad;
    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
    Py_DECREF(default_encoding);
    return 0;
bad:
    Py_XDECREF(default_encoding);
    return -1;
}
#endif
#endif


/* Test for GCC > 2.95 */
#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
  #define likely(x)   __builtin_expect(!!(x), 1)
  #define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
  #define likely(x)   (x)
  #define unlikely(x) (x)
#endif /* __GNUC__ */
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }

static PyObject *__pyx_m = NULL;
static PyObject *__pyx_d;
static PyObject *__pyx_b;
static PyObject *__pyx_cython_runtime = NULL;
static PyObject *__pyx_empty_tuple;
static PyObject *__pyx_empty_bytes;
static PyObject *__pyx_empty_unicode;
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm= __FILE__;
static const char *__pyx_filename;


static const char *__pyx_f[] = {
  "mpi4py/MPI/asbuffer.pxi",
  "mpi4py/MPI/ExceptionP.pyx",
  "mpi4py/MPI/asmemory.pxi",
  "mpi4py/MPI/commimpl.pxi",
  "mpi4py/MPI/attrimpl.pxi",
  "mpi4py/MPI/msgbuffer.pxi",
  "mpi4py/MPI/msgpickle.pxi",
  "mpi4py/MPI/Comm.pyx",
  "mpi4py/MPI/MPI.pyx",
  "mpi4py/MPI/atimport.pxi",
  "mpi4py/MPI/asstring.pxi",
  "mpi4py/MPI/asarray.pxi",
  "mpi4py/MPI/helpers.pxi",
  "mpi4py/MPI/reqimpl.pxi",
  "mpi4py/MPI/opimpl.pxi",
  "mpi4py/MPI/winimpl.pxi",
  "mpi4py/MPI/drepimpl.pxi",
  "mpi4py/MPI/mpierrhdl.pxi",
  "mpi4py/MPI/CAPI.pxi",
  "mpi4py/MPI/Exception.pyx",
  "mpi4py/MPI/Errhandler.pyx",
  "mpi4py/MPI/Datatype.pyx",
  "mpi4py/MPI/typemap.pxi",
  "mpi4py/MPI/typestr.pxi",
  "mpi4py/MPI/Status.pyx",
  "mpi4py/MPI/Request.pyx",
  "mpi4py/MPI/Message.pyx",
  "mpi4py/MPI/Info.pyx",
  "mpi4py/MPI/Op.pyx",
  "mpi4py/MPI/Group.pyx",
  "mpi4py/MPI/Win.pyx",
  "mpi4py/MPI/File.pyx",
  "mpi4py.MPI.pyx",
};
/* ForceInitThreads.proto */
#ifndef __PYX_FORCE_INIT_THREADS
  #define __PYX_FORCE_INIT_THREADS 0
#endif

/* NoFastGil.proto */
#define __Pyx_PyGILState_Ensure PyGILState_Ensure
#define __Pyx_PyGILState_Release PyGILState_Release
#define __Pyx_FastGIL_Remember()
#define __Pyx_FastGIL_Forget()
#define __Pyx_FastGilFuncInit()


/*--- Type declarations ---*/
struct PyMPIStatusObject;
struct PyMPIDatatypeObject;
struct PyMPIRequestObject;
struct PyMPIPrequestObject;
struct PyMPIGrequestObject;
struct PyMPIMessageObject;
struct PyMPIOpObject;
struct PyMPIGroupObject;
struct PyMPIInfoObject;
struct PyMPIErrhandlerObject;
struct PyMPICommObject;
struct PyMPIIntracommObject;
struct PyMPITopocommObject;
struct PyMPICartcommObject;
struct PyMPIGraphcommObject;
struct PyMPIDistgraphcommObject;
struct PyMPIIntercommObject;
struct PyMPIWinObject;
struct PyMPIFileObject;
struct __pyx_obj_6mpi4py_3MPI_memory;
struct __pyx_obj_6mpi4py_3MPI__p_mem;
struct __pyx_obj_6mpi4py_3MPI__p_greq;
struct __pyx_obj_6mpi4py_3MPI__p_datarep;
struct __pyx_obj_6mpi4py_3MPI__p_keyval;
struct __pyx_obj_6mpi4py_3MPI__p_message;
struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p;
struct __pyx_obj_6mpi4py_3MPI__p_msg_cco;
struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow;
struct __pyx_obj_6mpi4py_3MPI__p_msg_rma;
struct __pyx_obj_6mpi4py_3MPI__p_msg_io;
struct __pyx_obj_6mpi4py_3MPI_Pickle;
struct __pyx_t_6mpi4py_3MPI_Options;
typedef struct __pyx_t_6mpi4py_3MPI_Options __pyx_t_6mpi4py_3MPI_Options;

/* "mpi4py/MPI/helpers.pxi":13
 * #------------------------------------------------------------------------------
 * 
 * cdef enum PyMPI_OBJECT_FLAGS:             # <<<<<<<<<<<<<<
 *     PyMPI_OWNED = 1<<1
 * 
 */
enum __pyx_t_6mpi4py_3MPI_PyMPI_OBJECT_FLAGS {

  /* "mpi4py/MPI/helpers.pxi":14
 * 
 * cdef enum PyMPI_OBJECT_FLAGS:
 *     PyMPI_OWNED = 1<<1             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_e_6mpi4py_3MPI_PyMPI_OWNED = (1 << 1)
};

/* "mpi4py/MPI/atimport.pxi":27
 *     enum: USE_MATCHED_RECV "PyMPI_USE_MATCHED_RECV"
 * 
 * ctypedef struct Options:             # <<<<<<<<<<<<<<
 *     int initialize
 *     int threads
 */
struct __pyx_t_6mpi4py_3MPI_Options {
  int initialize;
  int threads;
  int thread_level;
  int finalize;
  int fast_reduce;
  int recv_mprobe;
  int errors;
};

/* "mpi4py/MPI.pxd":28
 *     ctypedef MPI_Count  Count  "MPI_Count"
 * 
 * ctypedef public api class Status [             # <<<<<<<<<<<<<<
 *     type   PyMPIStatus_Type,
 *     object PyMPIStatusObject,
 */
struct PyMPIStatusObject {
  PyObject_HEAD
  MPI_Status ob_mpi;
  unsigned int flags;
};
typedef struct PyMPIStatusObject PyMPIStatusObject;

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIStatus_Type;

/* "mpi4py/MPI.pxd":35
 *     cdef unsigned   flags
 * 
 * ctypedef public api class Datatype [             # <<<<<<<<<<<<<<
 *     type   PyMPIDatatype_Type,
 *     object PyMPIDatatypeObject,
 */
struct PyMPIDatatypeObject {
  PyObject_HEAD
  MPI_Datatype ob_mpi;
  unsigned int flags;
};
typedef struct PyMPIDatatypeObject PyMPIDatatypeObject;

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDatatype_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIRequest_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIPrequest_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGrequest_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIMessage_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIOp_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGroup_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIInfo_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIComm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPITopocomm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPICartcomm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIWin_Type;

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

__PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyMPIFile_Type;

/* "mpi4py/MPI/asbuffer.pxi":143
 * 
 * @cython.final
 * cdef class memory:             # <<<<<<<<<<<<<<
 * 
 *     """
 */
struct __pyx_obj_6mpi4py_3MPI_memory {
  PyObject_HEAD
  Py_buffer view;
};


/* "mpi4py/MPI/asmemory.pxi":13
 * @cython.final
 * @cython.internal
 * cdef class _p_mem:             # <<<<<<<<<<<<<<
 *     cdef void *buf
 *     def __cinit__(self):
 */
struct __pyx_obj_6mpi4py_3MPI__p_mem {
  PyObject_HEAD
  void *buf;
};


/* "mpi4py/MPI/reqimpl.pxi":56
 * @cython.final
 * @cython.internal
 * cdef class _p_greq:             # <<<<<<<<<<<<<<
 * 
 *     cdef object query_fn
 */
struct __pyx_obj_6mpi4py_3MPI__p_greq {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_greq *__pyx_vtab;
  PyObject *query_fn;
  PyObject *free_fn;
  PyObject *cancel_fn;
  PyObject *args;
  PyObject *kargs;
};


/* "mpi4py/MPI/drepimpl.pxi":7
 * @cython.final
 * @cython.internal
 * cdef class _p_datarep:             # <<<<<<<<<<<<<<
 * 
 *     cdef object read_fn
 */
struct __pyx_obj_6mpi4py_3MPI__p_datarep {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_datarep *__pyx_vtab;
  PyObject *read_fn;
  PyObject *write_fn;
  PyObject *extent_fn;
};


/* "mpi4py/MPI/attrimpl.pxi":5
 * @cython.final
 * @cython.internal
 * cdef class _p_keyval:             # <<<<<<<<<<<<<<
 *     cdef public object copy_fn
 *     cdef public object delete_fn
 */
struct __pyx_obj_6mpi4py_3MPI__p_keyval {
  PyObject_HEAD
  PyObject *copy_fn;
  PyObject *delete_fn;
  int nopython;
};


/* "mpi4py/MPI/msgbuffer.pxi":64
 * @cython.final
 * @cython.internal
 * cdef class _p_message:             # <<<<<<<<<<<<<<
 *     cdef memory buf
 *     cdef object count
 */
struct __pyx_obj_6mpi4py_3MPI__p_message {
  PyObject_HEAD
  struct __pyx_obj_6mpi4py_3MPI_memory *buf;
  PyObject *count;
  PyObject *displ;
  struct PyMPIDatatypeObject *type;
};


/* "mpi4py/MPI/msgbuffer.pxi":364
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_p2p:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side arguments
 */
struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_p2p *__pyx_vtab;
  void *buf;
  int count;
  MPI_Datatype dtype;
  PyObject *_msg;
};


/* "mpi4py/MPI/msgbuffer.pxi":408
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_cco:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side arguments
 */
struct __pyx_obj_6mpi4py_3MPI__p_msg_cco {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_cco *__pyx_vtab;
  void *sbuf;
  void *rbuf;
  int scount;
  int rcount;
  int *scounts;
  int *rcounts;
  int *sdispls;
  int *rdispls;
  MPI_Datatype stype;
  MPI_Datatype rtype;
  PyObject *_smsg;
  PyObject *_rmsg;
  PyObject *_rcnt;
};


/* "mpi4py/MPI/msgbuffer.pxi":832
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_ccow:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side arguments
 */
struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_ccow *__pyx_vtab;
  void *sbuf;
  void *rbuf;
  int *scounts;
  int *rcounts;
  int *sdispls;
  int *rdispls;
  MPI_Aint *sdisplsA;
  MPI_Aint *rdisplsA;
  MPI_Datatype *stypes;
  MPI_Datatype *rtypes;
  PyObject *_smsg;
  PyObject *_rmsg;
};


/* "mpi4py/MPI/msgbuffer.pxi":904
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_rma:             # <<<<<<<<<<<<<<
 * 
 *     # raw origin arguments
 */
struct __pyx_obj_6mpi4py_3MPI__p_msg_rma {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_rma *__pyx_vtab;
  void *oaddr;
  int ocount;
  MPI_Datatype otype;
  void *caddr;
  int ccount;
  MPI_Datatype ctype;
  void *raddr;
  int rcount;
  MPI_Datatype rtype;
  MPI_Aint tdisp;
  int tcount;
  MPI_Datatype ttype;
  PyObject *_origin;
  PyObject *_compare;
  PyObject *_result;
  PyObject *_target;
};


/* "mpi4py/MPI/msgbuffer.pxi":1058
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_io:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side data
 */
struct __pyx_obj_6mpi4py_3MPI__p_msg_io {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_io *__pyx_vtab;
  void *buf;
  int count;
  MPI_Datatype dtype;
  PyObject *_msg;
};


/* "mpi4py/MPI/msgpickle.pxi":44
 * @cython.final
 * @cython.internal
 * cdef class Pickle:             # <<<<<<<<<<<<<<
 * 
 *     """
 */
struct __pyx_obj_6mpi4py_3MPI_Pickle {
  PyObject_HEAD
  struct __pyx_vtabstruct_6mpi4py_3MPI_Pickle *__pyx_vtab;
  PyObject *ob_dumps;
  PyObject *ob_loads;
  PyObject *ob_PROTO;
};



/* "mpi4py/MPI/reqimpl.pxi":56
 * @cython.final
 * @cython.internal
 * cdef class _p_greq:             # <<<<<<<<<<<<<<
 * 
 *     cdef object query_fn
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_greq {
  int (*query)(struct __pyx_obj_6mpi4py_3MPI__p_greq *, MPI_Status *);
  int (*free)(struct __pyx_obj_6mpi4py_3MPI__p_greq *);
  int (*cancel)(struct __pyx_obj_6mpi4py_3MPI__p_greq *, int);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_greq *__pyx_vtabptr_6mpi4py_3MPI__p_greq;
static int __pyx_f_6mpi4py_3MPI_7_p_greq_query(struct __pyx_obj_6mpi4py_3MPI__p_greq *, MPI_Status *);
static int __pyx_f_6mpi4py_3MPI_7_p_greq_free(struct __pyx_obj_6mpi4py_3MPI__p_greq *);
static int __pyx_f_6mpi4py_3MPI_7_p_greq_cancel(struct __pyx_obj_6mpi4py_3MPI__p_greq *, int);


/* "mpi4py/MPI/drepimpl.pxi":7
 * @cython.final
 * @cython.internal
 * cdef class _p_datarep:             # <<<<<<<<<<<<<<
 * 
 *     cdef object read_fn
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_datarep {
  int (*read)(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, void *, MPI_Datatype, int, void *, MPI_Offset);
  int (*write)(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, void *, MPI_Datatype, int, void *, MPI_Offset);
  int (*extent)(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, MPI_Datatype, MPI_Aint *);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_datarep *__pyx_vtabptr_6mpi4py_3MPI__p_datarep;
static int __pyx_f_6mpi4py_3MPI_10_p_datarep_read(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, void *, MPI_Datatype, int, void *, MPI_Offset);
static int __pyx_f_6mpi4py_3MPI_10_p_datarep_write(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, void *, MPI_Datatype, int, void *, MPI_Offset);
static int __pyx_f_6mpi4py_3MPI_10_p_datarep_extent(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, MPI_Datatype, MPI_Aint *);


/* "mpi4py/MPI/msgbuffer.pxi":364
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_p2p:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side arguments
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_p2p {
  int (*for_send)(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *, PyObject *, int);
  int (*for_recv)(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *, PyObject *, int);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_p2p *__pyx_vtabptr_6mpi4py_3MPI__p_msg_p2p;
static int __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *, PyObject *, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *, PyObject *, int);


/* "mpi4py/MPI/msgbuffer.pxi":408
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_cco:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side arguments
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_cco {
  int (*for_cco_send)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, int, int);
  int (*for_cco_recv)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, int, int);
  int (*for_bcast)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int, MPI_Comm);
  int (*for_gather)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, int, MPI_Comm);
  int (*for_scatter)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, int, MPI_Comm);
  int (*for_allgather)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
  int (*for_alltoall)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
  int (*for_neighbor_allgather)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
  int (*for_neighbor_alltoall)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
  int (*for_cro_send)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int);
  int (*for_cro_recv)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int);
  int (*for_reduce)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, int, MPI_Comm);
  int (*for_allreduce)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
  int (*for_reduce_scatter_block)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
  int (*for_reduce_scatter)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, PyObject *, MPI_Comm);
  int (*for_scan)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
  int (*for_exscan)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_cco *__pyx_vtabptr_6mpi4py_3MPI__p_msg_cco;
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, int, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, int, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_bcast(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, int, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, int, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, int, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allreduce(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter_block(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scan(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_exscan(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm);


/* "mpi4py/MPI/msgbuffer.pxi":832
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_ccow:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side arguments
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_ccow {
  int (*for_alltoallw)(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *, PyObject *, PyObject *, MPI_Comm);
  int (*for_neighbor_alltoallw)(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *, PyObject *, PyObject *, MPI_Comm);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_ccow *__pyx_vtabptr_6mpi4py_3MPI__p_msg_ccow;
static int __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_alltoallw(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *, PyObject *, PyObject *, MPI_Comm);
static int __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_neighbor_alltoallw(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *, PyObject *, PyObject *, MPI_Comm);


/* "mpi4py/MPI/msgbuffer.pxi":904
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_rma:             # <<<<<<<<<<<<<<
 * 
 *     # raw origin arguments
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_rma {
  int (*for_rma)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, int, PyObject *, int, PyObject *);
  int (*for_put)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *);
  int (*for_get)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *);
  int (*for_acc)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *);
  int (*set_origin)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int);
  int (*set_compare)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int);
  int (*set_result)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int);
  int (*for_get_acc)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, int, PyObject *);
  int (*for_fetch_op)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, int, MPI_Aint);
  int (*for_cmp_swap)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, PyObject *, int, MPI_Aint);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_rma *__pyx_vtabptr_6mpi4py_3MPI__p_msg_rma;
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, int, PyObject *, int, PyObject *);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_put(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_acc(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_origin(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_compare(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get_acc(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, int, PyObject *);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_fetch_op(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, int, MPI_Aint);
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_cmp_swap(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, PyObject *, int, MPI_Aint);


/* "mpi4py/MPI/msgbuffer.pxi":1058
 * @cython.final
 * @cython.internal
 * cdef class _p_msg_io:             # <<<<<<<<<<<<<<
 * 
 *     # raw C-side data
 */

struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_io {
  int (*for_read)(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *, PyObject *);
  int (*for_write)(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *, PyObject *);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_io *__pyx_vtabptr_6mpi4py_3MPI__p_msg_io;
static int __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_read(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *, PyObject *);
static int __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_write(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *, PyObject *);


/* "mpi4py/MPI/msgpickle.pxi":44
 * @cython.final
 * @cython.internal
 * cdef class Pickle:             # <<<<<<<<<<<<<<
 * 
 *     """
 */

struct __pyx_vtabstruct_6mpi4py_3MPI_Pickle {
  PyObject *(*cdumps)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *);
  PyObject *(*cloads)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *);
  PyObject *(*dump)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *, void **, int *);
  PyObject *(*load)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void *, int);
  PyObject *(*dumpv)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *, void **, int, int *, int *);
  PyObject *(*loadv)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void *, int, int *, int *);
  PyObject *(*alloc)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void **, int);
  PyObject *(*allocv)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void **, int, int *, int *);
};
static struct __pyx_vtabstruct_6mpi4py_3MPI_Pickle *__pyx_vtabptr_6mpi4py_3MPI_Pickle;
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_cdumps(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_cloads(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_dump(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *, void **, int *);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_load(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void *, int);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_dumpv(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *, void **, int, int *, int *);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_loadv(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void *, int, int *, int *);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_alloc(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void **, int);
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_allocv(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void **, int, int *, int *);

/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#ifndef CYTHON_REFNANNY
  #define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
  typedef struct {
    void (*INCREF)(void*, PyObject*, int);
    void (*DECREF)(void*, PyObject*, int);
    void (*GOTREF)(void*, PyObject*, int);
    void (*GIVEREF)(void*, PyObject*, int);
    void* (*SetupContext)(const char*, int, const char*);
    void (*FinishContext)(void**);
  } __Pyx_RefNannyAPIStruct;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
#ifdef WITH_THREAD
  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
          if (acquire_gil) {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
              PyGILState_Release(__pyx_gilstate_save);\
          } else {\
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
          }
#else
  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
#endif
  #define __Pyx_RefNannyFinishContext()\
          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
#else
  #define __Pyx_RefNannyDeclarations
  #define __Pyx_RefNannySetupContext(name, acquire_gil)
  #define __Pyx_RefNannyFinishContext()
  #define __Pyx_INCREF(r) Py_INCREF(r)
  #define __Pyx_DECREF(r) Py_DECREF(r)
  #define __Pyx_GOTREF(r)
  #define __Pyx_GIVEREF(r)
  #define __Pyx_XINCREF(r) Py_XINCREF(r)
  #define __Pyx_XDECREF(r) Py_XDECREF(r)
  #define __Pyx_XGOTREF(r)
  #define __Pyx_XGIVEREF(r)
#endif
#define __Pyx_XDECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; __Pyx_XDECREF(tmp);\
    } while (0)
#define __Pyx_DECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; __Pyx_DECREF(tmp);\
    } while (0)
#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)

/* PyObjectGetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif

/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);

/* Import.proto */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);

/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);

/* PyCFunctionFastCall.proto */
#if CYTHON_FAST_PYCCALL
static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
#else
#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
#endif

/* PyFunctionFastCall.proto */
#if CYTHON_FAST_PYCALL
#define __Pyx_PyFunction_FastCall(func, args, nargs)\
    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
#if 1 || PY_VERSION_HEX < 0x030600B1
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
#else
#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
#endif
#define __Pyx_BUILD_ASSERT_EXPR(cond)\
    (sizeof(char [1 - 2*!(cond)]) - 1)
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
  static size_t __pyx_pyframe_localsplus_offset = 0;
  #include "frameobject.h"
  #define __Pxy_PyFrame_Initialize_Offsets()\
    ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
     (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
  #define __Pyx_PyFrame_GetLocalsplus(frame)\
    (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
#endif

/* PyObjectCall.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif

/* PyObjectCall2Args.proto */
static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);

/* PyObjectCallMethO.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif

/* PyObjectCallOneArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);

/* GetTopmostException.proto */
#if CYTHON_USE_EXC_INFO_STACK
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#endif

/* PyThreadStateGet.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
#define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred()  PyErr_Occurred()
#endif

/* SaveResetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
#else
#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
#endif

/* GetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* PyErrFetchRestore.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
#else
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#endif
#else
#define __Pyx_PyErr_Clear() PyErr_Clear()
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
#endif

/* IncludeStringH.proto */
#include <string.h>

/* BytesEquals.proto */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);

/* UnicodeEquals.proto */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);

/* StrEquals.proto */
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
#else
#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
#endif

/* RaiseException.proto */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);

/* RaiseDoubleKeywords.proto */
static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);

/* ParseKeywords.proto */
static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
    const char* function_name);

/* RaiseArgTupleInvalid.proto */
static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);

/* PyObjectCallNoArg.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
#else
#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
#endif

/* WriteUnraisableException.proto */
static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                  int lineno, const char *filename,
                                  int full_traceback, int nogil);

/* PyErrExceptionMatches.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
#else
#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
#endif

/* RaiseTooManyValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);

/* RaiseNeedMoreValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);

/* IterFinish.proto */
static CYTHON_INLINE int __Pyx_IterFinish(void);

/* UnpackItemEndCheck.proto */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);

/* DictGetItem.proto */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
#define __Pyx_PyObject_Dict_GetItem(obj, name)\
    (likely(PyDict_CheckExact(obj)) ?\
     __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
#else
#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
#define __Pyx_PyObject_Dict_GetItem(obj, name)  PyObject_GetItem(obj, name)
#endif

/* KeywordStringCheck.proto */
static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);

/* GetItemInt.proto */
#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                     int is_list, int wraparound, int boundscheck);

/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);

/* SetItemInt.proto */
#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
    (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
               __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
                                               int is_list, int wraparound, int boundscheck);

/* ListCompAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len)) {
        Py_INCREF(x);
        PyList_SET_ITEM(list, len, x);
        Py_SIZE(list) = len+1;
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
#endif

/* SwapException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* UnpackUnboundCMethod.proto */
typedef struct {
    PyObject *type;
    PyObject **method_name;
    PyCFunction func;
    PyObject *method;
    int flag;
} __Pyx_CachedCFunction;

/* CallUnboundCMethod2.proto */
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2);
#else
#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2)  __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2)
#endif

/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
    ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
        __Pyx__ArgTypeTest(obj, type, name, exact))
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);

/* dict_getitem_default.proto */
static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value);

/* CallUnboundCMethod1.proto */
static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
#else
#define __Pyx_CallUnboundCMethod1(cfunc, self, arg)  __Pyx__CallUnboundCMethod1(cfunc, self, arg)
#endif

/* PyObjectLookupSpecial.proto */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) {
    PyObject *res;
    PyTypeObject *tp = Py_TYPE(obj);
#if PY_MAJOR_VERSION < 3
    if (unlikely(PyInstance_Check(obj)))
        return __Pyx_PyObject_GetAttrStr(obj, attr_name);
#endif
    res = _PyType_Lookup(tp, attr_name);
    if (likely(res)) {
        descrgetfunc f = Py_TYPE(res)->tp_descr_get;
        if (!f) {
            Py_INCREF(res);
        } else {
            res = f(res, obj, (PyObject *)tp);
        }
    } else {
        PyErr_SetObject(PyExc_AttributeError, attr_name);
    }
    return res;
}
#else
#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
#endif

/* PyObjectGetMethod.proto */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);

/* PyObjectCallMethod1.proto */
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);

/* pop_index.proto */
static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix);
static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix);
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix);
#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
    (likely(PyList_CheckExact(L) && __Pyx_fits_Py_ssize_t(ix, type, is_signed))) ?\
        __Pyx__PyList_PopIndex(L, py_ix, ix) : (\
        (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
            __Pyx__PyObject_PopIndex(L, py_ix)))
#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
    __Pyx_fits_Py_ssize_t(ix, type, is_signed) ?\
        __Pyx__PyList_PopIndex(L, py_ix, ix) : (\
        (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
            __Pyx__PyObject_PopIndex(L, py_ix)))
#else
#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)\
    __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)
#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
    (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
        __Pyx__PyObject_PopIndex(L, py_ix))
#endif

/* tp_new.proto */
#define __Pyx_tp_new(type_obj, args) __Pyx_tp_new_kwargs(type_obj, args, NULL)
static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject* args, PyObject* kwargs) {
    return (PyObject*) (((PyTypeObject*)type_obj)->tp_new((PyTypeObject*)type_obj, args, kwargs));
}

/* PyObjectSetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL)
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value);
#else
#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif

/* PySequenceContains.proto */
static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
    int result = PySequence_Contains(seq, item);
    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}

/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
        Py_INCREF(x);
        PyList_SET_ITEM(list, len, x);
        Py_SIZE(list) = len+1;
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif

/* GetAttr.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);

/* HasAttr.proto */
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);

/* ObjectGetItem.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key);
#else
#define __Pyx_PyObject_GetItem(obj, key)  PyObject_GetItem(obj, key)
#endif

/* py_dict_items.proto */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d);

/* CallUnboundCMethod0.proto */
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CallUnboundCMethod0(cfunc, self)\
    (likely((cfunc)->func) ?\
        (likely((cfunc)->flag == METH_NOARGS) ?  (*((cfunc)->func))(self, NULL) :\
         (PY_VERSION_HEX >= 0x030600B1 && likely((cfunc)->flag == METH_FASTCALL) ?\
            (PY_VERSION_HEX >= 0x030700A0 ?\
                (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0) :\
                (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL)) :\
          (PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\
            (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL) :\
            (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ?  ((*(PyCFunctionWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
               ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) :\
               __Pyx__CallUnboundCMethod0(cfunc, self)))))) :\
        __Pyx__CallUnboundCMethod0(cfunc, self))
#else
#define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
#endif

/* PyDictVersioning.proto */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
#define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)
#define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
    (version_var) = __PYX_GET_DICT_VERSION(dict);\
    (cache_var) = (value);
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
    static PY_UINT64_T __pyx_dict_version = 0;\
    static PyObject *__pyx_dict_cached_value = NULL;\
    if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
        (VAR) = __pyx_dict_cached_value;\
    } else {\
        (VAR) = __pyx_dict_cached_value = (LOOKUP);\
        __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
    }\
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
#else
#define __PYX_GET_DICT_VERSION(dict)  (0)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);
#endif

/* GetModuleGlobalName.proto */
#if CYTHON_USE_DICT_VERSIONS
#define __Pyx_GetModuleGlobalName(var, name)  {\
    static PY_UINT64_T __pyx_dict_version = 0;\
    static PyObject *__pyx_dict_cached_value = NULL;\
    (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
        (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
        __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
}
#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
    PY_UINT64_T __pyx_dict_version;\
    PyObject *__pyx_dict_cached_value;\
    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
}
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
#else
#define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
#define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
#endif

/* SliceObject.proto */
#define __Pyx_PyObject_DelSlice(obj, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)\
    __Pyx_PyObject_SetSlice(obj, (PyObject*)NULL, cstart, cstop, py_start, py_stop, py_slice, has_cstart, has_cstop, wraparound)
static CYTHON_INLINE int __Pyx_PyObject_SetSlice(
        PyObject* obj, PyObject* value, Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
        int has_cstart, int has_cstop, int wraparound);

/* SliceObject.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(
        PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** py_start, PyObject** py_stop, PyObject** py_slice,
        int has_cstart, int has_cstop, int wraparound);

/* append.proto */
static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);

/* PyObject_GenericGetAttrNoDict.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
#endif

/* PyObject_GenericGetAttr.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
#endif

/* SetVTable.proto */
static int __Pyx_SetVtable(PyObject *dict, void *vtable);

/* GetNameInClass.proto */
#define __Pyx_GetNameInClass(var, nmspace, name)  (var) = __Pyx__GetNameInClass(nmspace, name)
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name);

/* CalculateMetaclass.proto */
static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);

/* FetchCommonType.proto */
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);

/* CythonFunction.proto */
#define __Pyx_CyFunction_USED 1
#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
#define __Pyx_CYFUNCTION_CCLASS        0x04
#define __Pyx_CyFunction_GetClosure(f)\
    (((__pyx_CyFunctionObject *) (f))->func_closure)
#define __Pyx_CyFunction_GetClassObj(f)\
    (((__pyx_CyFunctionObject *) (f))->func_classobj)
#define __Pyx_CyFunction_Defaults(type, f)\
    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
typedef struct {
    PyCFunctionObject func;
#if PY_VERSION_HEX < 0x030500A0
    PyObject *func_weakreflist;
#endif
    PyObject *func_dict;
    PyObject *func_name;
    PyObject *func_qualname;
    PyObject *func_doc;
    PyObject *func_globals;
    PyObject *func_code;
    PyObject *func_closure;
    PyObject *func_classobj;
    void *defaults;
    int defaults_pyobjects;
    int flags;
    PyObject *defaults_tuple;
    PyObject *defaults_kwdict;
    PyObject *(*defaults_getter)(PyObject *);
    PyObject *func_annotations;
} __pyx_CyFunctionObject;
static PyTypeObject *__pyx_CyFunctionType = 0;
#define __Pyx_CyFunction_Check(obj)  (__Pyx_TypeCheck(obj, __pyx_CyFunctionType))
#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)
static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *self,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
                                                         size_t size,
                                                         int pyobjects);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
                                                            PyObject *tuple);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
                                                             PyObject *dict);
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
                                                              PyObject *dict);
static int __pyx_CyFunction_init(void);

/* SetNameInClass.proto */
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
#define __Pyx_SetNameInClass(ns, name, value)\
    (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value))
#elif CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_SetNameInClass(ns, name, value)\
    (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value))
#else
#define __Pyx_SetNameInClass(ns, name, value)  PyObject_SetItem(ns, name, value)
#endif

/* Py3ClassCreate.proto */
static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
                                           PyObject *mkw, PyObject *modname, PyObject *doc);
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);

/* ClassMethod.proto */
#include "descrobject.h"
static CYTHON_UNUSED PyObject* __Pyx_Method_ClassMethod(PyObject *method);

/* RegisterModuleCleanup.proto */
static void __pyx_module_cleanup(PyObject *self);
#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
static int __Pyx_RegisterCleanup(void);
#else
#define __Pyx_RegisterCleanup() (0)
#endif

/* CLineInTraceback.proto */
#ifdef CYTHON_CLINE_IN_TRACEBACK
#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#else
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#endif

/* CodeObjectCache.proto */
typedef struct {
    PyCodeObject* code_object;
    int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
    int count;
    int max_count;
    __Pyx_CodeObjectCacheEntry* entries;
};
static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static PyCodeObject *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);

/* AddTraceback.proto */
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Aint(MPI_Aint value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Offset(MPI_Offset value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Count(MPI_Count value);

/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE MPI_Aint __Pyx_PyInt_As_MPI_Aint(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE MPI_Count __Pyx_PyInt_As_MPI_Count(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE MPI_Offset __Pyx_PyInt_As_MPI_Offset(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE MPI_Fint __Pyx_PyInt_As_MPI_Fint(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);

/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
#else
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
#endif
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)

/* CheckBinaryVersion.proto */
static int __Pyx_check_binary_version(void);

/* FunctionExport.proto */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig);

/* InitStrings.proto */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);

static int __pyx_f_6mpi4py_3MPI_7_p_greq_query(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self, MPI_Status *__pyx_v_status); /* proto*/
static int __pyx_f_6mpi4py_3MPI_7_p_greq_free(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self); /* proto*/
static int __pyx_f_6mpi4py_3MPI_7_p_greq_cancel(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self, int __pyx_v_completed); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_datarep_read(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_datarep_write(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_datarep_extent(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, MPI_Datatype __pyx_v_datatype, MPI_Aint *__pyx_v_file_extent); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_self, PyObject *__pyx_v_msg, int __pyx_v_rank); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_self, PyObject *__pyx_v_msg, int __pyx_v_rank); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_VECTOR, PyObject *__pyx_v_amsg, int __pyx_v_rank, int __pyx_v_blocks); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_VECTOR, PyObject *__pyx_v_amsg, int __pyx_v_rank, int __pyx_v_blocks); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_bcast(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_msg, int __pyx_v_root, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, int __pyx_v_root, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, int __pyx_v_root, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_amsg, int __pyx_v_root); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_amsg, int __pyx_v_root); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, int __pyx_v_root, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allreduce(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter_block(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, PyObject *__pyx_v_rcnt, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scan(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_exscan(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_alltoallw(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_neighbor_alltoallw(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, int __pyx_v_readonly, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_put(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_acc(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_origin(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_compare(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_compare, int __pyx_v_rank); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_result, int __pyx_v_rank); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get_acc(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_rank, PyObject *__pyx_v_target); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_fetch_op(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_rank, MPI_Aint __pyx_v_disp); /* proto*/
static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_cmp_swap(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_compare, PyObject *__pyx_v_result, int __pyx_v_rank, MPI_Aint __pyx_v_disp); /* proto*/
static int __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_read(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_self, PyObject *__pyx_v_msg); /* proto*/
static int __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_write(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_self, PyObject *__pyx_v_msg); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_cdumps(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_cloads(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_buf); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_dump(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj, void **__pyx_v_p, int *__pyx_v_n); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_load(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void *__pyx_v_p, int __pyx_v_n); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_dumpv(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj, void **__pyx_v_p, int __pyx_v_n, int *__pyx_v_cnt, int *__pyx_v_dsp); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_loadv(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void *__pyx_v_p, int __pyx_v_n, int *__pyx_v_cnt, int *__pyx_v_dsp); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_alloc(CYTHON_UNUSED struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void **__pyx_v_p, int __pyx_v_n); /* proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_allocv(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void **__pyx_v_p, int __pyx_v_n, int *__pyx_v_cnt, int *__pyx_v_dsp); /* proto*/

/* Module declarations from 'mpi4py.libmpi' */

/* Module declarations from 'cython' */

/* Module declarations from 'mpi4py.MPI' */
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Status = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Datatype = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Request = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Prequest = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Grequest = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Message = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Op = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Group = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Info = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Errhandler = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Comm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intracomm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Topocomm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Cartcomm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Graphcomm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Distgraphcomm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Intercomm = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Win = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_File = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_memory = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_mem = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_greq = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_datarep = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_keyval = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_message = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_msg_p2p = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_msg_cco = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_msg_ccow = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_msg_rma = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI__p_msg_io = 0;
static PyTypeObject *__pyx_ptype_6mpi4py_3MPI_Pickle = 0;
static __pyx_t_6mpi4py_3MPI_Options __pyx_v_6mpi4py_3MPI_options;
static int __pyx_v_6mpi4py_3MPI_abort_status;
static PyObject *__pyx_v_6mpi4py_3MPI_MPIException = 0;
static PyObject *__pyx_v_6mpi4py_3MPI__pypy_sentinel = 0;
static char __pyx_v_6mpi4py_3MPI_BYTE_FMT[2];
static PyTypeObject *__pyx_v_6mpi4py_3MPI_array_array = 0;
static PyTypeObject *__pyx_v_6mpi4py_3MPI_numpy_array = 0;
static int __pyx_v_6mpi4py_3MPI_pypy_have_numpy;
static MPI_Status __pyx_v_6mpi4py_3MPI_empty_status;
static PyObject *__pyx_v_6mpi4py_3MPI_op_user_registry = 0;
static struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_6mpi4py_3MPI__buffer = 0;
static PyObject *__pyx_v_6mpi4py_3MPI___UNWEIGHTED__ = 0;
static PyObject *__pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__ = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_allocate_lock = 0;
static int __pyx_v_6mpi4py_3MPI_lock_keyval;
static PyObject *__pyx_v_6mpi4py_3MPI_lock_registry = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_datarep_registry = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_type_keyval = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_comm_keyval = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_win_keyval = 0;
static PyObject *__pyx_v_6mpi4py_3MPI___BOTTOM__ = 0;
static PyObject *__pyx_v_6mpi4py_3MPI___IN_PLACE__ = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_PyPickle_dumps = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_PyPickle_loads = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_PyBytesIO_New = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_PyPickle_loadf = 0;
static struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE = 0;
static struct PyMPIErrhandlerObject *__pyx_v_6mpi4py_3MPI___ERRHANDLER_NULL__ = 0;
static struct PyMPIErrhandlerObject *__pyx_v_6mpi4py_3MPI___ERRORS_RETURN__ = 0;
static struct PyMPIErrhandlerObject *__pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___DATATYPE_NULL__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UB__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LB__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___PACKED__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___BYTE__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___AINT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___OFFSET__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___COUNT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___CHAR__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___WCHAR__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___SHORT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LONG__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LONG_LONG__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UNSIGNED__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___FLOAT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___DOUBLE__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___C_BOOL__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INT8_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INT16_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INT32_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INT64_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UINT8_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UINT16_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UINT32_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___UINT64_T__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___C_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___CXX_BOOL__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___SHORT_INT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___TWOINT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LONG_INT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___FLOAT_INT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___DOUBLE_INT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___CHARACTER__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LOGICAL__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INTEGER__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___REAL__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LOGICAL1__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LOGICAL2__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LOGICAL4__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___LOGICAL8__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INTEGER1__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INTEGER2__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INTEGER4__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INTEGER8__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___INTEGER16__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___REAL2__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___REAL4__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___REAL8__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___REAL16__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___COMPLEX4__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___COMPLEX8__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___COMPLEX16__ = 0;
static struct PyMPIDatatypeObject *__pyx_v_6mpi4py_3MPI___COMPLEX32__ = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_TypeDict = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_CTypeDict = 0;
static PyObject *__pyx_v_6mpi4py_3MPI_FTypeDict = 0;
static struct PyMPIRequestObject *__pyx_v_6mpi4py_3MPI___REQUEST_NULL__ = 0;
static struct PyMPIMessageObject *__pyx_v_6mpi4py_3MPI___MESSAGE_NULL__ = 0;
static struct PyMPIMessageObject *__pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__ = 0;
static struct PyMPIInfoObject *__pyx_v_6mpi4py_3MPI___INFO_NULL__ = 0;
static struct PyMPIInfoObject *__pyx_v_6mpi4py_3MPI___INFO_ENV__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___OP_NULL__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___MAX__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___MIN__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___SUM__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___PROD__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___LAND__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___BAND__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___LOR__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___BOR__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___LXOR__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___BXOR__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___MAXLOC__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___MINLOC__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___REPLACE__ = 0;
static struct PyMPIOpObject *__pyx_v_6mpi4py_3MPI___NO_OP__ = 0;
static struct PyMPIGroupObject *__pyx_v_6mpi4py_3MPI___GROUP_NULL__ = 0;
static struct PyMPIGroupObject *__pyx_v_6mpi4py_3MPI___GROUP_EMPTY__ = 0;
static struct PyMPICommObject *__pyx_v_6mpi4py_3MPI___COMM_NULL__ = 0;
static struct PyMPIIntracommObject *__pyx_v_6mpi4py_3MPI___COMM_SELF__ = 0;
static struct PyMPIIntracommObject *__pyx_v_6mpi4py_3MPI___COMM_WORLD__ = 0;
static struct PyMPIIntercommObject *__pyx_v_6mpi4py_3MPI___COMM_PARENT__ = 0;
static struct PyMPIWinObject *__pyx_v_6mpi4py_3MPI___WIN_NULL__ = 0;
static struct PyMPIFileObject *__pyx_v_6mpi4py_3MPI___FILE_NULL__ = 0;
static int __pyx_f_6mpi4py_3MPI_warnOpt(PyObject *, PyObject *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_getOptions(__pyx_t_6mpi4py_3MPI_Options *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_bootstrap(void); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_mpi_active(void); /*proto*/
static int __pyx_f_6mpi4py_3MPI_initialize(void); /*proto*/
static void __pyx_f_6mpi4py_3MPI_finalize(void); /*proto*/
static void __pyx_f_6mpi4py_3MPI_atexit(void); /*proto*/
static int __pyx_f_6mpi4py_3MPI_PyMPI_Raise(int); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_CHKERR(int); /*proto*/
static CYTHON_INLINE void __pyx_f_6mpi4py_3MPI_print_traceback(void); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_Py_IsInitialized(void); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asmpistr(PyObject *, char **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_tompistr(char const *, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_mpistr(char const *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_pystr(char const *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_PyPy_GetBuffer(PyObject *, Py_buffer *, int); /*proto*/
static int __pyx_f_6mpi4py_3MPI_Py27_GetBuffer(PyObject *, Py_buffer *, int); /*proto*/
static int __pyx_f_6mpi4py_3MPI_PyMPI_GetBuffer(PyObject *, Py_buffer *, int); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_newbuffer(void); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_getbuffer(PyObject *, int, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_getformat(struct __pyx_obj_6mpi4py_3MPI_memory *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_getbuffer_r(PyObject *, void **, MPI_Aint *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_getbuffer_w(PyObject *, void **, MPI_Aint *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_asbuffer(PyObject *, void *, MPI_Aint, int); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_asmemory(PyObject *, void **, MPI_Aint *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_tomemory(void *, MPI_Aint); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_f_6mpi4py_3MPI_allocate(Py_ssize_t, size_t, void *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_Datatype(PyObject *, int, MPI_Datatype **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_Info(PyObject *, int, MPI_Info **); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_string(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asstring(PyObject *, char **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_str(PyObject *, char ***); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_argv(PyObject *, char ***); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_cmds(PyObject *, int *, char ***); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_argvs(PyObject *, int, char ****); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_nprocs(PyObject *, int, int **); /*proto*/
static CYTHON_INLINE MPI_Status *__pyx_f_6mpi4py_3MPI_arg_Status(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_builtin_Datatype(MPI_Datatype); /*proto*/
static CYTHON_INLINE struct PyMPIDatatypeObject *__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_Datatype); /*proto*/
static CYTHON_INLINE struct PyMPIDatatypeObject *__pyx_f_6mpi4py_3MPI_ref_Datatype(MPI_Datatype); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Datatype(MPI_Datatype *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_acquire_rs(PyObject *, PyObject *, int *, MPI_Request **, MPI_Status **); /*proto*/
static int __pyx_f_6mpi4py_3MPI_release_rs(PyObject *, PyObject *, int, MPI_Request *, MPI_Status *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_greq_query(void *, MPI_Status *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_greq_free(void *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_greq_cancel(void *, int); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_greq_query_fn(void *, MPI_Status *); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_greq_free_fn(void *); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_greq_cancel_fn(void *, int); /*proto*/
static CYTHON_INLINE struct PyMPIRequestObject *__pyx_f_6mpi4py_3MPI_new_Request(MPI_Request); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Request(MPI_Request *); /*proto*/
static CYTHON_INLINE struct PyMPIMessageObject *__pyx_f_6mpi4py_3MPI_new_Message(MPI_Message); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Message(MPI_Message *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_MAX(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_MIN(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_SUM(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_PROD(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_BAND(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_BOR(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_BXOR(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_LAND(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_LOR(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_LXOR(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_MAXLOC(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_MINLOC(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_REPLACE(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI__op_NO_OP(PyObject *, PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_op_user_py(int, PyObject *, PyObject *, PyObject *); /*proto*/
static CYTHON_INLINE void __pyx_f_6mpi4py_3MPI_op_user_mpi(int, void *, void *, MPI_Aint, MPI_Datatype *); /*proto*/
static CYTHON_INLINE void __pyx_f_6mpi4py_3MPI_op_user_call(int, void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_01(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_02(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_03(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_04(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_05(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_06(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_07(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_08(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_09(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_10(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_11(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_12(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_13(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_14(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_15(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_16(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_17(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_18(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_19(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_20(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_21(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_22(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_23(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_24(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_25(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_26(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_27(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_28(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_29(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_30(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_31(void *, void *, int *, MPI_Datatype *); /*proto*/
static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_32(void *, void *, int *, MPI_Datatype *); /*proto*/
static MPI_User_function *__pyx_f_6mpi4py_3MPI_op_user_map(int); /*proto*/
static int __pyx_f_6mpi4py_3MPI_op_user_new(PyObject *, MPI_User_function **); /*proto*/
static int __pyx_f_6mpi4py_3MPI_op_user_del(int *); /*proto*/
static CYTHON_INLINE struct PyMPIOpObject *__pyx_f_6mpi4py_3MPI_new_Op(MPI_Op); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Op(MPI_Op *); /*proto*/
static CYTHON_INLINE struct PyMPIInfoObject *__pyx_f_6mpi4py_3MPI_new_Info(MPI_Info); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Info(MPI_Info *); /*proto*/
static CYTHON_INLINE MPI_Info __pyx_f_6mpi4py_3MPI_arg_Info(PyObject *); /*proto*/
static CYTHON_INLINE struct PyMPIGroupObject *__pyx_f_6mpi4py_3MPI_new_Group(MPI_Group); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Group(MPI_Group *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_attach_buffer(PyObject *, void **, int *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_detach_buffer(void *, int); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_asarray_weights(PyObject *, int, int **); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_comm_neighbors_count(MPI_Comm, int *, int *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_lock_free_cb(MPI_Comm); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_lock_free_fn(MPI_Comm, int, void *, void *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_Lock_table(MPI_Comm); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_Lock(MPI_Comm, PyObject *); /*proto*/
static CYTHON_INLINE struct PyMPICommObject *__pyx_f_6mpi4py_3MPI_new_Comm(MPI_Comm); /*proto*/
static CYTHON_INLINE struct PyMPIIntracommObject *__pyx_f_6mpi4py_3MPI_new_Intracomm(MPI_Comm); /*proto*/
static CYTHON_INLINE struct PyMPIIntercommObject *__pyx_f_6mpi4py_3MPI_new_Intercomm(MPI_Comm); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Comm(MPI_Comm *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_get_base(MPI_Win, void **); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_get_size(MPI_Win, MPI_Aint *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_get_unit(MPI_Win, int *); /*proto*/
static CYTHON_INLINE struct PyMPIWinObject *__pyx_f_6mpi4py_3MPI_new_Win(MPI_Win); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Win(MPI_Win *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_datarep_read(void *, MPI_Datatype, int, void *, MPI_Offset, void *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_datarep_write(void *, MPI_Datatype, int, void *, MPI_Offset, void *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_datarep_extent(MPI_Datatype, MPI_Aint *, void *); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_datarep_read_fn(void *, MPI_Datatype, int, void *, MPI_Offset, void *); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_datarep_write_fn(void *, MPI_Datatype, int, void *, MPI_Offset, void *); /*proto*/
static int MPIAPI __pyx_f_6mpi4py_3MPI_datarep_extent_fn(MPI_Datatype, MPI_Aint *, void *); /*proto*/
static CYTHON_INLINE struct PyMPIFileObject *__pyx_f_6mpi4py_3MPI_new_File(MPI_File); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_File(MPI_File *); /*proto*/
static CYTHON_INLINE struct PyMPIErrhandlerObject *__pyx_f_6mpi4py_3MPI_new_Errhandler(MPI_Errhandler); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Errhandler(MPI_Errhandler *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_comm_set_eh(MPI_Comm); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_set_eh(MPI_Win); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_file_set_eh(MPI_File); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_integral(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_buffer(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_datatype(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_downcast(MPI_Aint); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_clipcount(MPI_Aint); /*proto*/
static struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_f_6mpi4py_3MPI_message_basic(PyObject *, PyObject *, int, void **, MPI_Aint *, MPI_Datatype *); /*proto*/
static struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_f_6mpi4py_3MPI_message_simple(PyObject *, int, int, int, void **, int *, MPI_Datatype *); /*proto*/
static struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_f_6mpi4py_3MPI_message_vector(PyObject *, int, int, int, void **, int **, int **, MPI_Datatype *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_f_6mpi4py_3MPI_message_p2p_send(PyObject *, int); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_f_6mpi4py_3MPI_message_p2p_recv(PyObject *, int); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_f_6mpi4py_3MPI_message_cco(void); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_f_6mpi4py_3MPI_message_ccow(void); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_f_6mpi4py_3MPI_message_rma(void); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_f_6mpi4py_3MPI_message_io_read(PyObject *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_f_6mpi4py_3MPI_message_io_write(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_allocate_count_displ(int, int **, int **); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_send(PyObject *, int, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_bsend(PyObject *, int, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_ssend(PyObject *, int, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_obarg(PyObject *, int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_match(PyObject *, int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_probe(PyObject *, int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv(PyObject *, int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_isend(PyObject *, int, int, MPI_Comm, MPI_Request *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_ibsend(PyObject *, int, int, MPI_Comm, MPI_Request *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_issend(PyObject *, int, int, MPI_Comm, MPI_Request *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_irecv(PyObject *, int, int, MPI_Comm, MPI_Request *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_sendrecv(PyObject *, int, int, PyObject *, int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_load(MPI_Status *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_wait(struct PyMPIRequestObject *, struct PyMPIStatusObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_test(struct PyMPIRequestObject *, int *, struct PyMPIStatusObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_waitany(PyObject *, int *, struct PyMPIStatusObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_testany(PyObject *, int *, int *, struct PyMPIStatusObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_waitall(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_testall(PyObject *, int *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_probe(int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_iprobe(int, int, MPI_Comm, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_mprobe(int, int, MPI_Comm, MPI_Message *, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_improbe(int, int, MPI_Comm, int *, MPI_Message *, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_mrecv(PyObject *, MPI_Message *, MPI_Status *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_imrecv(PyObject *, MPI_Message *, MPI_Request *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_barrier(MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_bcast(PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_gather(PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scatter(PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allgather(PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_alltoall(PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_neighbor_allgather(PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_neighbor_alltoall(PyObject *, MPI_Comm); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI__py_reduce(PyObject *, PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI__py_scan(PyObject *, PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI__py_exscan(PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_naive(PyObject *, PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce_naive(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan_naive(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan_naive(PyObject *, PyObject *, MPI_Comm); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_copy(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_send_p2p(PyObject *, int, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_p2p(int, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_sendrecv_p2p(PyObject *, int, int, int, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_bcast_p2p(PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_p2p(PyObject *, PyObject *, int, MPI_Comm, int); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan_p2p(PyObject *, PyObject *, MPI_Comm, int); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan_p2p(PyObject *, PyObject *, MPI_Comm, int); /*proto*/
static int __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTRA(MPI_Comm, MPI_Comm *, int *); /*proto*/
static int __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTER(MPI_Comm, MPI_Comm *, int *, MPI_Comm *, int *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_intra(PyObject *, PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_inter(PyObject *, PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce_intra(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce_inter(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan_intra(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan_intra(PyObject *, PyObject *, MPI_Comm); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_comm_is_intra(MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce(PyObject *, PyObject *, int, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan(PyObject *, PyObject *, MPI_Comm); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIDatatype_New(MPI_Datatype); /*proto*/
static MPI_Datatype *__pyx_f_6mpi4py_3MPI_PyMPIDatatype_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIStatus_New(MPI_Status *); /*proto*/
static MPI_Status *__pyx_f_6mpi4py_3MPI_PyMPIStatus_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIRequest_New(MPI_Request); /*proto*/
static MPI_Request *__pyx_f_6mpi4py_3MPI_PyMPIRequest_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIMessage_New(MPI_Message); /*proto*/
static MPI_Message *__pyx_f_6mpi4py_3MPI_PyMPIMessage_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIOp_New(MPI_Op); /*proto*/
static MPI_Op *__pyx_f_6mpi4py_3MPI_PyMPIOp_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIInfo_New(MPI_Info); /*proto*/
static MPI_Info *__pyx_f_6mpi4py_3MPI_PyMPIInfo_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIGroup_New(MPI_Group); /*proto*/
static MPI_Group *__pyx_f_6mpi4py_3MPI_PyMPIGroup_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIComm_New(MPI_Comm); /*proto*/
static MPI_Comm *__pyx_f_6mpi4py_3MPI_PyMPIComm_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIWin_New(MPI_Win); /*proto*/
static MPI_Win *__pyx_f_6mpi4py_3MPI_PyMPIWin_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIFile_New(MPI_File); /*proto*/
static MPI_File *__pyx_f_6mpi4py_3MPI_PyMPIFile_Get(PyObject *); /*proto*/
static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIErrhandler_New(MPI_Errhandler); /*proto*/
static MPI_Errhandler *__pyx_f_6mpi4py_3MPI_PyMPIErrhandler_Get(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_AddTypeMap(PyObject *, char const *, struct PyMPIDatatypeObject *); /*proto*/
static CYTHON_INLINE char const *__pyx_f_6mpi4py_3MPI_Datatype2String(MPI_Datatype); /*proto*/
static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI__mpi_type(PyObject *, PyTypeObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(int, int **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_newarray(int, MPI_Aint **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(PyObject *, int *, int **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_getarray(PyObject *, int *, MPI_Aint **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(PyObject *, int, int **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_chkarray(PyObject *, int, MPI_Aint **); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(PyObject *, MPI_Datatype, int, PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(PyObject *, MPI_Comm, int, PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(PyObject *, MPI_Win, int, PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(MPI_Datatype, int, void *, void *, void *, int *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(MPI_Comm, int, void *, void *, void *, int *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(MPI_Win, int, void *, void *, void *, int *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(MPI_Datatype, int, void *, void *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(MPI_Comm, int, void *, void *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(MPI_Win, int, void *, void *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(MPI_Datatype, int, void *, void *, void *, int *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(MPI_Comm, int, void *, void *, void *, int *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(MPI_Win, int, void *, void *, void *, int *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(MPI_Datatype, int, void *, void *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(MPI_Comm, int, void *, void *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(MPI_Win, int, void *, void *); /*proto*/
static int MPIAPI __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn(MPI_Datatype, int, void *, void *, void *, int *); /*proto*/
static int MPIAPI __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn(MPI_Comm, int, void *, void *, void *, int *); /*proto*/
static int MPIAPI __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn(MPI_Win, int, void *, void *, void *, int *); /*proto*/
static int MPIAPI __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn(MPI_Datatype, int, void *, void *); /*proto*/
static int MPIAPI __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn(MPI_Comm, int, void *, void *); /*proto*/
static int MPIAPI __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn(MPI_Win, int, void *, void *); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(MPI_Datatype, int); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(MPI_Comm, int); /*proto*/
static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(MPI_Win, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(MPI_Datatype, int, void *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(MPI_Comm, int, void *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(MPI_Win, int, void *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(MPI_Datatype, int, PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(MPI_Comm, int, PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(MPI_Win, int, PyObject *); /*proto*/
static PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_message_vector_w(PyObject *, int, int, void **, int **, int **, MPI_Datatype **); /*proto*/
static PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_message_vector_w(PyObject *, int, int, void **, int **, MPI_Aint **, MPI_Datatype **); /*proto*/
#define __Pyx_MODULE_NAME "mpi4py.MPI"
extern int __pyx_module_is_main_mpi4py__MPI;
int __pyx_module_is_main_mpi4py__MPI = 0;

/* Implementation of 'mpi4py.MPI' */
static PyObject *__pyx_builtin_ImportError;
static PyObject *__pyx_builtin_staticmethod;
static PyObject *__pyx_builtin_RuntimeError;
static PyObject *__pyx_builtin_property;
static PyObject *__pyx_builtin_SystemError;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_IndexError;
static PyObject *__pyx_builtin_AttributeError;
static PyObject *__pyx_builtin_MemoryError;
static PyObject *__pyx_builtin_KeyError;
static PyObject *__pyx_builtin_NotImplemented;
static PyObject *__pyx_builtin_OverflowError;
static PyObject *__pyx_builtin_UserWarning;
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_NotImplementedError;
static const char __pyx_k_B[] = "B";
static const char __pyx_k_i[] = "i";
static const char __pyx_k_m[] = "m";
static const char __pyx_k_n[] = "n";
static const char __pyx_k_p[] = "p";
static const char __pyx_k_r[] = "r";
static const char __pyx_k_x[] = "x";
static const char __pyx_k_y[] = "y";
static const char __pyx_k_IO[] = "IO";
static const char __pyx_k_LB[] = "LB";
static const char __pyx_k_Op[] = "Op";
static const char __pyx_k_UB[] = "UB";
static const char __pyx_k_eq[] = "__eq__";
static const char __pyx_k_ex[] = "ex";
static const char __pyx_k_fd[] = "fd";
static const char __pyx_k_ge[] = "__ge__";
static const char __pyx_k_gt[] = "__gt__";
static const char __pyx_k_io[] = "io";
static const char __pyx_k_lb[] = "lb";
static const char __pyx_k_le[] = "__le__";
static const char __pyx_k_lt[] = "__lt__";
static const char __pyx_k_ne[] = "__ne__";
static const char __pyx_k_no[] = "no";
static const char __pyx_k_op[] = "op";
static const char __pyx_k_rc[] = "rc";
static const char __pyx_k_rd[] = "rd";
static const char __pyx_k_tc[] = "tc";
static const char __pyx_k_wr[] = "wr";
static const char __pyx_k_xs[] = "xs";
static const char __pyx_k_BOR[] = "BOR";
static const char __pyx_k_DUP[] = "DUP";
static const char __pyx_k_Dup[] = "Dup";
static const char __pyx_k_Get[] = "Get";
static const char __pyx_k_INT[] = "INT";
static const char __pyx_k_LOR[] = "LOR";
static const char __pyx_k_MAX[] = "MAX";
static const char __pyx_k_MIN[] = "MIN";
static const char __pyx_k_SUM[] = "SUM";
static const char __pyx_k_Set[] = "Set";
static const char __pyx_k_Win[] = "Win";
static const char __pyx_k__23[] = "";
static const char __pyx_k_arg[] = "arg";
static const char __pyx_k_buf[] = "buf";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_get[] = "get";
static const char __pyx_k_int[] = "__int__";
static const char __pyx_k_key[] = "key";
static const char __pyx_k_mem[] = "mem";
static const char __pyx_k_new[] = "__new__";
static const char __pyx_k_obj[] = "obj";
static const char __pyx_k_pop[] = "pop";
static const char __pyx_k_ptr[] = "ptr";
static const char __pyx_k_str[] = "__str__";
static const char __pyx_k_sys[] = "sys";
static const char __pyx_k_tag[] = "tag";
static const char __pyx_k_tmp[] = "tmp";
static const char __pyx_k_win[] = "win";
static const char __pyx_k_yes[] = "yes";
static const char __pyx_k_AINT[] = "AINT";
static const char __pyx_k_BAND[] = "BAND";
static const char __pyx_k_BOOL[] = "BOOL";
static const char __pyx_k_BXOR[] = "BXOR";
static const char __pyx_k_BYTE[] = "BYTE";
static const char __pyx_k_CART[] = "CART";
static const char __pyx_k_CHAR[] = "CHAR";
static const char __pyx_k_Comm[] = "Comm";
static const char __pyx_k_File[] = "File";
static const char __pyx_k_HOST[] = "HOST";
static const char __pyx_k_Info[] = "Info";
static const char __pyx_k_Init[] = "Init";
static const char __pyx_k_Join[] = "Join";
static const char __pyx_k_LAND[] = "LAND";
static const char __pyx_k_LONG[] = "LONG";
static const char __pyx_k_LXOR[] = "LXOR";
static const char __pyx_k_Open[] = "Open";
static const char __pyx_k_PROD[] = "PROD";
static const char __pyx_k_REAL[] = "REAL";
static const char __pyx_k_ROOT[] = "ROOT";
static const char __pyx_k_args[] = "args";
static const char __pyx_k_base[] = "base";
static const char __pyx_k_bool[] = "__bool__";
static const char __pyx_k_call[] = "__call__";
static const char __pyx_k_char[] = "char";
static const char __pyx_k_comm[] = "comm";
static const char __pyx_k_data[] = "data";
static const char __pyx_k_dest[] = "dest";
static const char __pyx_k_dims[] = "dims";
static const char __pyx_k_disp[] = "disp";
static const char __pyx_k_exit[] = "__exit__";
static const char __pyx_k_f2py[] = "f2py";
static const char __pyx_k_file[] = "file";
static const char __pyx_k_flag[] = "flag";
static const char __pyx_k_hash[] = "__hash__";
static const char __pyx_k_high[] = "high";
static const char __pyx_k_ierr[] = "ierr";
static const char __pyx_k_info[] = "info";
static const char __pyx_k_init[] = "__init__";
static const char __pyx_k_keys[] = "keys";
static const char __pyx_k_load[] = "load";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_name[] = "__name__";
static const char __pyx_k_nlen[] = "nlen";
static const char __pyx_k_rank[] = "rank";
static const char __pyx_k_recv[] = "recv";
static const char __pyx_k_repr[] = "__repr__";
static const char __pyx_k_root[] = "root";
static const char __pyx_k_self[] = "self";
static const char __pyx_k_size[] = "size";
static const char __pyx_k_warn[] = "warn";
static const char __pyx_k_COUNT[] = "COUNT";
static const char __pyx_k_FLOAT[] = "FLOAT";
static const char __pyx_k_F_INT[] = "F_INT";
static const char __pyx_k_GRAPH[] = "GRAPH";
static const char __pyx_k_Group[] = "Group";
static const char __pyx_k_IDENT[] = "IDENT";
static const char __pyx_k_NO_OP[] = "NO_OP";
static const char __pyx_k_Probe[] = "Probe";
static const char __pyx_k_REAL2[] = "REAL2";
static const char __pyx_k_REAL4[] = "REAL4";
static const char __pyx_k_REAL8[] = "REAL8";
static const char __pyx_k_SHORT[] = "SHORT";
static const char __pyx_k_Shift[] = "Shift";
static const char __pyx_k_Start[] = "Start";
static const char __pyx_k_Union[] = "Union";
static const char __pyx_k_WCHAR[] = "WCHAR";
static const char __pyx_k_Wtick[] = "Wtick";
static const char __pyx_k_Wtime[] = "Wtime";
static const char __pyx_k_addr1[] = "addr1";
static const char __pyx_k_addr2[] = "addr2";
static const char __pyx_k_amode[] = "amode";
static const char __pyx_k_array[] = "array";
static const char __pyx_k_bcast[] = "bcast";
static const char __pyx_k_cinfo[] = "cinfo";
static const char __pyx_k_color[] = "color";
static const char __pyx_k_comm1[] = "comm1";
static const char __pyx_k_comm2[] = "comm2";
static const char __pyx_k_count[] = "count";
static const char __pyx_k_dargs[] = "dargs";
static const char __pyx_k_doc_2[] = "doc";
static const char __pyx_k_dtype[] = "dtype";
static const char __pyx_k_dumps[] = "dumps";
static const char __pyx_k_edges[] = "edges";
static const char __pyx_k_enter[] = "__enter__";
static const char __pyx_k_error[] = "error";
static const char __pyx_k_etype[] = "etype";
static const char __pyx_k_fatal[] = "fatal";
static const char __pyx_k_flags[] = "flags";
static const char __pyx_k_flush[] = "flush";
static const char __pyx_k_group[] = "group";
static const char __pyx_k_idims[] = "idims";
static const char __pyx_k_inbuf[] = "inbuf";
static const char __pyx_k_index[] = "index";
static const char __pyx_k_items[] = "items";
static const char __pyx_k_kargs[] = "kargs";
static const char __pyx_k_level[] = "level";
static const char __pyx_k_loads[] = "loads";
static const char __pyx_k_major[] = "major";
static const char __pyx_k_micro[] = "micro";
static const char __pyx_k_minor[] = "minor";
static const char __pyx_k_ndims[] = "ndims";
static const char __pyx_k_numpy[] = "numpy";
static const char __pyx_k_order[] = "order";
static const char __pyx_k_other[] = "other";
static const char __pyx_k_probe[] = "probe";
static const char __pyx_k_range[] = "range";
static const char __pyx_k_ranks[] = "ranks";
static const char __pyx_k_sizes[] = "sizes";
static const char __pyx_k_state[] = "state";
static const char __pyx_k_value[] = "value";
static const char __pyx_k_APPNUM[] = "APPNUM";
static const char __pyx_k_BOTTOM[] = "BOTTOM";
static const char __pyx_k_C_BOOL[] = "C_BOOL";
static const char __pyx_k_Create[] = "Create";
static const char __pyx_k_DARRAY[] = "DARRAY";
static const char __pyx_k_DOUBLE[] = "DOUBLE";
static const char __pyx_k_Delete[] = "Delete";
static const char __pyx_k_ERR_IO[] = "ERR_IO";
static const char __pyx_k_ERR_OP[] = "ERR_OP";
static const char __pyx_k_F_BOOL[] = "F_BOOL";
static const char __pyx_k_INT8_T[] = "INT8_T";
static const char __pyx_k_Iprobe[] = "Iprobe";
static const char __pyx_k_MAXLOC[] = "MAXLOC";
static const char __pyx_k_MINLOC[] = "MINLOC";
static const char __pyx_k_OFFSET[] = "OFFSET";
static const char __pyx_k_PACKED[] = "PACKED";
static const char __pyx_k_REAL16[] = "REAL16";
static const char __pyx_k_STRUCT[] = "STRUCT";
static const char __pyx_k_Status[] = "Status";
static const char __pyx_k_TAG_UB[] = "TAG_UB";
static const char __pyx_k_TWOINT[] = "TWOINT";
static const char __pyx_k_VECTOR[] = "VECTOR";
static const char __pyx_k_append[] = "append";
static const char __pyx_k_coords[] = "coords";
static const char __pyx_k_errors[] = "errors";
static const char __pyx_k_extent[] = "extent";
static const char __pyx_k_gather[] = "gather";
static const char __pyx_k_group1[] = "group1";
static const char __pyx_k_group2[] = "group2";
static const char __pyx_k_gsizes[] = "gsizes";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_insert[] = "insert";
static const char __pyx_k_iprobe[] = "iprobe";
static const char __pyx_k_keyval[] = "keyval";
static const char __pyx_k_maxlen[] = "maxlen";
static const char __pyx_k_memory[] = "memory";
static const char __pyx_k_module[] = "__module__";
static const char __pyx_k_mpi4py[] = "mpi4py";
static const char __pyx_k_name_2[] = "name";
static const char __pyx_k_nbytes[] = "nbytes";
static const char __pyx_k_nnodes[] = "nnodes";
static const char __pyx_k_ob_mpi[] = "ob_mpi";
static const char __pyx_k_offset[] = "offset";
static const char __pyx_k_origin[] = "origin";
static const char __pyx_k_outbuf[] = "outbuf";
static const char __pyx_k_pickle[] = "pickle";
static const char __pyx_k_psizes[] = "psizes";
static const char __pyx_k_ranks1[] = "ranks1";
static const char __pyx_k_result[] = "result";
static const char __pyx_k_single[] = "single";
static const char __pyx_k_sizeof[] = "_sizeof";
static const char __pyx_k_source[] = "source";
static const char __pyx_k_starts[] = "starts";
static const char __pyx_k_status[] = "status";
static const char __pyx_k_stderr[] = "stderr";
static const char __pyx_k_stride[] = "stride";
static const char __pyx_k_string[] = "string";
static const char __pyx_k_target[] = "target";
static const char __pyx_k_thread[] = "_thread";
static const char __pyx_k_whence[] = "whence";
static const char __pyx_k_ANY_TAG[] = "ANY_TAG";
static const char __pyx_k_BytesIO[] = "BytesIO";
static const char __pyx_k_COMPLEX[] = "COMPLEX";
static const char __pyx_k_Compare[] = "Compare";
static const char __pyx_k_ERR_ARG[] = "ERR_ARG";
static const char __pyx_k_ERR_TAG[] = "ERR_TAG";
static const char __pyx_k_ERR_WIN[] = "ERR_WIN";
static const char __pyx_k_F_FLOAT[] = "F_FLOAT";
static const char __pyx_k_Get_dim[] = "Get_dim";
static const char __pyx_k_Get_tag[] = "Get_tag";
static const char __pyx_k_HVECTOR[] = "HVECTOR";
static const char __pyx_k_INDEXED[] = "INDEXED";
static const char __pyx_k_INT16_T[] = "INT16_T";
static const char __pyx_k_INT32_T[] = "INT32_T";
static const char __pyx_k_INT64_T[] = "INT64_T";
static const char __pyx_k_INTEGER[] = "INTEGER";
static const char __pyx_k_INT_INT[] = "INT_INT";
static const char __pyx_k_LOGICAL[] = "LOGICAL";
static const char __pyx_k_Message[] = "Message";
static const char __pyx_k_OP_NULL[] = "OP_NULL";
static const char __pyx_k_ORDER_C[] = "ORDER_C";
static const char __pyx_k_ORDER_F[] = "ORDER_F";
static const char __pyx_k_REPLACE[] = "REPLACE";
static const char __pyx_k_RESIZED[] = "RESIZED";
static const char __pyx_k_Request[] = "Request";
static const char __pyx_k_Resized[] = "Resized";
static const char __pyx_k_SIMILAR[] = "SIMILAR";
static const char __pyx_k_SINT8_T[] = "SINT8_T";
static const char __pyx_k_SUCCESS[] = "SUCCESS";
static const char __pyx_k_Set_tag[] = "Set_tag";
static const char __pyx_k_Testall[] = "Testall";
static const char __pyx_k_Testany[] = "Testany";
static const char __pyx_k_UINT8_T[] = "UINT8_T";
static const char __pyx_k_UNEQUAL[] = "UNEQUAL";
static const char __pyx_k_VERSION[] = "VERSION";
static const char __pyx_k_Waitall[] = "Waitall";
static const char __pyx_k_Waitany[] = "Waitany";
static const char __pyx_k_address[] = "address";
static const char __pyx_k_attrval[] = "attrval";
static const char __pyx_k_baseptr[] = "baseptr";
static const char __pyx_k_cPickle[] = "cPickle";
static const char __pyx_k_command[] = "command";
static const char __pyx_k_commute[] = "commute";
static const char __pyx_k_compare[] = "compare";
static const char __pyx_k_copy_fn[] = "copy_fn";
static const char __pyx_k_cstring[] = "cstring";
static const char __pyx_k_datarep[] = "datarep";
static const char __pyx_k_default[] = "default";
static const char __pyx_k_degrees[] = "degrees";
static const char __pyx_k_free_fn[] = "free_fn";
static const char __pyx_k_message[] = "message";
static const char __pyx_k_ndarray[] = "ndarray";
static const char __pyx_k_nonzero[] = "__nonzero__";
static const char __pyx_k_numpypy[] = "numpypy";
static const char __pyx_k_periods[] = "periods";
static const char __pyx_k_prepare[] = "__prepare__";
static const char __pyx_k_read_fn[] = "read_fn";
static const char __pyx_k_recvbuf[] = "recvbuf";
static const char __pyx_k_recvtag[] = "recvtag";
static const char __pyx_k_release[] = "release";
static const char __pyx_k_reorder[] = "reorder";
static const char __pyx_k_request[] = "request";
static const char __pyx_k_scatter[] = "scatter";
static const char __pyx_k_sendbuf[] = "sendbuf";
static const char __pyx_k_sendobj[] = "sendobj";
static const char __pyx_k_sendtag[] = "sendtag";
static const char __pyx_k_sources[] = "sources";
static const char __pyx_k_testall[] = "testall";
static const char __pyx_k_testany[] = "testany";
static const char __pyx_k_threads[] = "threads";
static const char __pyx_k_version[] = "version";
static const char __pyx_k_waitall[] = "waitall";
static const char __pyx_k_waitany[] = "waitany";
static const char __pyx_k_weights[] = "weights";
static const char __pyx_k_Aint_add[] = "Aint_add";
static const char __pyx_k_Allocate[] = "Allocate";
static const char __pyx_k_COMPLEX4[] = "COMPLEX4";
static const char __pyx_k_COMPLEX8[] = "COMPLEX8";
static const char __pyx_k_CXX_BOOL[] = "CXX_BOOL";
static const char __pyx_k_Cartcomm[] = "Cartcomm";
static const char __pyx_k_DISP_CUR[] = "DISP_CUR";
static const char __pyx_k_Datatype[] = "Datatype";
static const char __pyx_k_ERR_BASE[] = "ERR_BASE";
static const char __pyx_k_ERR_COMM[] = "ERR_COMM";
static const char __pyx_k_ERR_DIMS[] = "ERR_DIMS";
static const char __pyx_k_ERR_DISP[] = "ERR_DISP";
static const char __pyx_k_ERR_FILE[] = "ERR_FILE";
static const char __pyx_k_ERR_INFO[] = "ERR_INFO";
static const char __pyx_k_ERR_NAME[] = "ERR_NAME";
static const char __pyx_k_ERR_PORT[] = "ERR_PORT";
static const char __pyx_k_ERR_RANK[] = "ERR_RANK";
static const char __pyx_k_ERR_ROOT[] = "ERR_ROOT";
static const char __pyx_k_ERR_SIZE[] = "ERR_SIZE";
static const char __pyx_k_ERR_TYPE[] = "ERR_TYPE";
static const char __pyx_k_F90_REAL[] = "F90_REAL";
static const char __pyx_k_F_DOUBLE[] = "F_DOUBLE";
static const char __pyx_k_Finalize[] = "Finalize";
static const char __pyx_k_Free_mem[] = "Free_mem";
static const char __pyx_k_Get_dims[] = "Get_dims";
static const char __pyx_k_Get_info[] = "Get_info";
static const char __pyx_k_Get_name[] = "Get_name";
static const char __pyx_k_Get_rank[] = "Get_rank";
static const char __pyx_k_Get_size[] = "Get_size";
static const char __pyx_k_Get_topo[] = "Get_topo";
static const char __pyx_k_Grequest[] = "Grequest";
static const char __pyx_k_HINDEXED[] = "HINDEXED";
static const char __pyx_k_INFO_ENV[] = "INFO_ENV";
static const char __pyx_k_INTEGER1[] = "INTEGER1";
static const char __pyx_k_INTEGER2[] = "INTEGER2";
static const char __pyx_k_INTEGER4[] = "INTEGER4";
static const char __pyx_k_INTEGER8[] = "INTEGER8";
static const char __pyx_k_IN_PLACE[] = "IN_PLACE";
static const char __pyx_k_Is_inter[] = "Is_inter";
static const char __pyx_k_Is_intra[] = "Is_intra";
static const char __pyx_k_KeyError[] = "KeyError";
static const char __pyx_k_LOGICAL1[] = "LOGICAL1";
static const char __pyx_k_LOGICAL2[] = "LOGICAL2";
static const char __pyx_k_LOGICAL4[] = "LOGICAL4";
static const char __pyx_k_LOGICAL8[] = "LOGICAL8";
static const char __pyx_k_LONG_INT[] = "LONG_INT";
static const char __pyx_k_Pcontrol[] = "Pcontrol";
static const char __pyx_k_Prequest[] = "Prequest";
static const char __pyx_k_SEEK_CUR[] = "SEEK_CUR";
static const char __pyx_k_SEEK_END[] = "SEEK_END";
static const char __pyx_k_SEEK_SET[] = "SEEK_SET";
static const char __pyx_k_SINT16_T[] = "SINT16_T";
static const char __pyx_k_SINT32_T[] = "SINT32_T";
static const char __pyx_k_SINT64_T[] = "SINT64_T";
static const char __pyx_k_SUBARRAY[] = "SUBARRAY";
static const char __pyx_k_Set_info[] = "Set_info";
static const char __pyx_k_Set_name[] = "Set_name";
static const char __pyx_k_Startall[] = "Startall";
static const char __pyx_k_StringIO[] = "StringIO";
static const char __pyx_k_Testsome[] = "Testsome";
static const char __pyx_k_Topocomm[] = "Topocomm";
static const char __pyx_k_UINT16_T[] = "UINT16_T";
static const char __pyx_k_UINT32_T[] = "UINT32_T";
static const char __pyx_k_UINT64_T[] = "UINT64_T";
static const char __pyx_k_UNSIGNED[] = "UNSIGNED";
static const char __pyx_k_WIN_BASE[] = "WIN_BASE";
static const char __pyx_k_WIN_NULL[] = "WIN_NULL";
static const char __pyx_k_WIN_SIZE[] = "WIN_SIZE";
static const char __pyx_k_Waitsome[] = "Waitsome";
static const char __pyx_k_alltoall[] = "alltoall";
static const char __pyx_k_cdatarep[] = "cdatarep";
static const char __pyx_k_datatype[] = "datatype";
static const char __pyx_k_distribs[] = "distribs";
static const char __pyx_k_errcodes[] = "errcodes";
static const char __pyx_k_filename[] = "filename";
static const char __pyx_k_filetype[] = "filetype";
static const char __pyx_k_finalize[] = "finalize";
static const char __pyx_k_function[] = "function";
static const char __pyx_k_funneled[] = "funneled";
static const char __pyx_k_handleof[] = "_handleof";
static const char __pyx_k_inoutbuf[] = "inoutbuf";
static const char __pyx_k_itemsize[] = "itemsize";
static const char __pyx_k_location[] = "location";
static const char __pyx_k_maxprocs[] = "maxprocs";
static const char __pyx_k_multiple[] = "multiple";
static const char __pyx_k_nopython[] = "nopython";
static const char __pyx_k_position[] = "position";
static const char __pyx_k_property[] = "property";
static const char __pyx_k_protocol[] = "protocol";
static const char __pyx_k_provided[] = "provided";
static const char __pyx_k_qualname[] = "__qualname__";
static const char __pyx_k_query_fn[] = "query_fn";
static const char __pyx_k_readonly[] = "readonly";
static const char __pyx_k_requests[] = "requests";
static const char __pyx_k_required[] = "required";
static const char __pyx_k_statuses[] = "statuses";
static const char __pyx_k_subsizes[] = "subsizes";
static const char __pyx_k_thread_2[] = "thread";
static const char __pyx_k_threaded[] = "threaded";
static const char __pyx_k_typecode[] = "typecode";
static const char __pyx_k_typedict[] = "_typedict";
static const char __pyx_k_warnings[] = "warnings";
static const char __pyx_k_write_fn[] = "write_fn";
static const char __pyx_k_Aint_diff[] = "Aint_diff";
static const char __pyx_k_Alloc_mem[] = "Alloc_mem";
static const char __pyx_k_CHARACTER[] = "CHARACTER";
static const char __pyx_k_COMM_NULL[] = "COMM_NULL";
static const char __pyx_k_COMM_SELF[] = "COMM_SELF";
static const char __pyx_k_COMPLEX16[] = "COMPLEX16";
static const char __pyx_k_COMPLEX32[] = "COMPLEX32";
static const char __pyx_k_CONGRUENT[] = "CONGRUENT";
static const char __pyx_k_C_COMPLEX[] = "C_COMPLEX";
static const char __pyx_k_ERR_AMODE[] = "ERR_AMODE";
static const char __pyx_k_ERR_COUNT[] = "ERR_COUNT";
static const char __pyx_k_ERR_GROUP[] = "ERR_GROUP";
static const char __pyx_k_ERR_OTHER[] = "ERR_OTHER";
static const char __pyx_k_ERR_QUOTA[] = "ERR_QUOTA";
static const char __pyx_k_ERR_SPAWN[] = "ERR_SPAWN";
static const char __pyx_k_Exception[] = "\n    Exception\n    ";
static const char __pyx_k_FILE_NULL[] = "FILE_NULL";
static const char __pyx_k_FLOAT_INT[] = "FLOAT_INT";
static const char __pyx_k_F_COMPLEX[] = "F_COMPLEX";
static const char __pyx_k_Get_amode[] = "Get_amode";
static const char __pyx_k_Get_count[] = "Get_count";
static const char __pyx_k_Get_error[] = "Get_error";
static const char __pyx_k_Get_group[] = "Get_group";
static const char __pyx_k_Get_nkeys[] = "Get_nkeys";
static const char __pyx_k_Graphcomm[] = "Graphcomm";
static const char __pyx_k_INFO_NULL[] = "INFO_NULL";
static const char __pyx_k_INTEGER16[] = "INTEGER16";
static const char __pyx_k_Intercomm[] = "Intercomm";
static const char __pyx_k_Intersect[] = "Intersect";
static const char __pyx_k_Intracomm[] = "Intracomm";
static const char __pyx_k_LONG_LONG[] = "LONG_LONG";
static const char __pyx_k_MODE_EXCL[] = "MODE_EXCL";
static const char __pyx_k_MODE_RDWR[] = "MODE_RDWR";
static const char __pyx_k_Open_port[] = "Open_port";
static const char __pyx_k_PROC_NULL[] = "PROC_NULL";
static const char __pyx_k_SHORT_INT[] = "SHORT_INT";
static const char __pyx_k_Set_error[] = "Set_error";
static const char __pyx_k_TypeError[] = "TypeError";
static const char __pyx_k_UNDEFINED[] = "UNDEFINED";
static const char __pyx_k_WIN_MODEL[] = "WIN_MODEL";
static const char __pyx_k_addressof[] = "_addressof";
static const char __pyx_k_allgather[] = "allgather";
static const char __pyx_k_assertion[] = "assertion";
static const char __pyx_k_bcast_p2p[] = "@bcast_p2p@";
static const char __pyx_k_cStringIO[] = "cStringIO";
static const char __pyx_k_cancel_fn[] = "cancel_fn";
static const char __pyx_k_cportname[] = "cportname";
static const char __pyx_k_csrvcname[] = "csrvcname";
static const char __pyx_k_datatypes[] = "datatypes";
static const char __pyx_k_delete_fn[] = "delete_fn";
static const char __pyx_k_direction[] = "direction";
static const char __pyx_k_disp_unit[] = "disp_unit";
static const char __pyx_k_errorcode[] = "errorcode";
static const char __pyx_k_exception[] = "exception";
static const char __pyx_k_extent_fn[] = "extent_fn";
static const char __pyx_k_lock_type[] = "lock_type";
static const char __pyx_k_metaclass[] = "__metaclass__";
static const char __pyx_k_peer_comm[] = "peer_comm";
static const char __pyx_k_port_name[] = "port_name";
static const char __pyx_k_print_exc[] = "print_exc";
static const char __pyx_k_resultlen[] = "resultlen";
static const char __pyx_k_traceback[] = "traceback";
static const char __pyx_k_typeclass[] = "typeclass";
static const char __pyx_k_ANY_SOURCE[] = "ANY_SOURCE";
static const char __pyx_k_COMM_WORLD[] = "COMM_WORLD";
static const char __pyx_k_CONTIGUOUS[] = "CONTIGUOUS";
static const char __pyx_k_Close_port[] = "Close_port";
static const char __pyx_k_Create_dup[] = "Create_dup";
static const char __pyx_k_DIST_GRAPH[] = "DIST_GRAPH";
static const char __pyx_k_DOUBLE_INT[] = "DOUBLE_INT";
static const char __pyx_k_Difference[] = "Difference";
static const char __pyx_k_ERR_ACCESS[] = "ERR_ACCESS";
static const char __pyx_k_ERR_ASSERT[] = "ERR_ASSERT";
static const char __pyx_k_ERR_BUFFER[] = "ERR_BUFFER";
static const char __pyx_k_ERR_INTERN[] = "ERR_INTERN";
static const char __pyx_k_ERR_KEYVAL[] = "ERR_KEYVAL";
static const char __pyx_k_ERR_NO_MEM[] = "ERR_NO_MEM";
static const char __pyx_k_Errhandler[] = "Errhandler";
static const char __pyx_k_GROUP_NULL[] = "GROUP_NULL";
static const char __pyx_k_Get_nthkey[] = "Get_nthkey";
static const char __pyx_k_Get_parent[] = "Get_parent";
static const char __pyx_k_Get_source[] = "Get_source";
static const char __pyx_k_IndexError[] = "IndexError";
static const char __pyx_k_MODE_NOPUT[] = "MODE_NOPUT";
static const char __pyx_k_Match_size[] = "Match_size";
static const char __pyx_k_SIGNED_INT[] = "SIGNED_INT";
static const char __pyx_k_SUBVERSION[] = "SUBVERSION";
static const char __pyx_k_Set_source[] = "Set_source";
static const char __pyx_k_UNWEIGHTED[] = "UNWEIGHTED";
static const char __pyx_k_ValueError[] = "ValueError";
static const char __pyx_k_WIN_FLAVOR[] = "WIN_FLAVOR";
static const char __pyx_k_errhandler[] = "errhandler";
static const char __pyx_k_error_code[] = "error code";
static const char __pyx_k_errorclass[] = "errorclass";
static const char __pyx_k_frombuffer[] = "frombuffer";
static const char __pyx_k_get_vendor[] = "get_vendor";
static const char __pyx_k_initialize[] = "initialize";
static const char __pyx_k_inoutedges[] = "inoutedges";
static const char __pyx_k_lock_table[] = "_lock_table";
static const char __pyx_k_mpi4py_MPI[] = "mpi4py.MPI";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_recvcounts[] = "recvcounts";
static const char __pyx_k_serialized[] = "serialized";
static const char __pyx_k_split_type[] = "split_type";
static const char __pyx_k_subversion[] = "subversion";
static const char __pyx_k_typecode_2[] = "_typecode";
static const char __pyx_k_typedict_c[] = "_typedict_c";
static const char __pyx_k_typedict_f[] = "_typedict_f";
static const char __pyx_k_ERR_PENDING[] = "ERR_PENDING";
static const char __pyx_k_ERR_REQUEST[] = "ERR_REQUEST";
static const char __pyx_k_ERR_SERVICE[] = "ERR_SERVICE";
static const char __pyx_k_ERR_UNKNOWN[] = "ERR_UNKNOWN";
static const char __pyx_k_Exception_2[] = "Exception";
static const char __pyx_k_F90_COMPLEX[] = "F90_COMPLEX";
static const char __pyx_k_F90_INTEGER[] = "F90_INTEGER";
static const char __pyx_k_Free_keyval[] = "Free_keyval";
static const char __pyx_k_GROUP_EMPTY[] = "GROUP_EMPTY";
static const char __pyx_k_Get_address[] = "Get_address";
static const char __pyx_k_Get_version[] = "Get_version";
static const char __pyx_k_ImportError[] = "ImportError";
static const char __pyx_k_Init_thread[] = "Init_thread";
static const char __pyx_k_LOCK_SHARED[] = "LOCK_SHARED";
static const char __pyx_k_LONG_DOUBLE[] = "LONG_DOUBLE";
static const char __pyx_k_Lookup_name[] = "Lookup_name";
static const char __pyx_k_MODE_APPEND[] = "MODE_APPEND";
static const char __pyx_k_MODE_CREATE[] = "MODE_CREATE";
static const char __pyx_k_MODE_RDONLY[] = "MODE_RDONLY";
static const char __pyx_k_MODE_WRONLY[] = "MODE_WRONLY";
static const char __pyx_k_MemoryError[] = "MemoryError";
static const char __pyx_k_SIGNED_CHAR[] = "SIGNED_CHAR";
static const char __pyx_k_SIGNED_LONG[] = "SIGNED_LONG";
static const char __pyx_k_SystemError[] = "SystemError";
static const char __pyx_k_UserWarning[] = "UserWarning";
static const char __pyx_k_WIN_UNIFIED[] = "WIN_UNIFIED";
static const char __pyx_k_blocklength[] = "blocklength";
static const char __pyx_k_buffer_info[] = "buffer_info";
static const char __pyx_k_destweights[] = "destweights";
static const char __pyx_k_error_class[] = "error class";
static const char __pyx_k_fast_reduce[] = "fast_reduce";
static const char __pyx_k_fromaddress[] = "fromaddress";
static const char __pyx_k_recv_mprobe[] = "recv_mprobe";
static const char __pyx_k_remain_dims[] = "remain_dims";
static const char __pyx_k_target_disp[] = "target_disp";
static const char __pyx_k_target_rank[] = "target_rank";
static const char __pyx_k_COMBINER_DUP[] = "COMBINER_DUP";
static const char __pyx_k_Compute_dims[] = "Compute_dims";
static const char __pyx_k_ERR_BAD_FILE[] = "ERR_BAD_FILE";
static const char __pyx_k_ERR_INFO_KEY[] = "ERR_INFO_KEY";
static const char __pyx_k_ERR_LASTCODE[] = "ERR_LASTCODE";
static const char __pyx_k_ERR_LOCKTYPE[] = "ERR_LOCKTYPE";
static const char __pyx_k_ERR_NOT_SAME[] = "ERR_NOT_SAME";
static const char __pyx_k_ERR_NO_SPACE[] = "ERR_NO_SPACE";
static const char __pyx_k_ERR_RMA_SYNC[] = "ERR_RMA_SYNC";
static const char __pyx_k_ERR_TOPOLOGY[] = "ERR_TOPOLOGY";
static const char __pyx_k_ERR_TRUNCATE[] = "ERR_TRUNCATE";
static const char __pyx_k_Get_contents[] = "Get_contents";
static const char __pyx_k_Get_envelope[] = "Get_envelope";
static const char __pyx_k_Get_topology[] = "Get_topology";
static const char __pyx_k_Intersection[] = "Intersection";
static const char __pyx_k_Is_cancelled[] = "Is_cancelled";
static const char __pyx_k_Is_finalized[] = "Is_finalized";
static const char __pyx_k_LASTUSEDCODE[] = "LASTUSEDCODE";
static const char __pyx_k_MAX_INFO_KEY[] = "MAX_INFO_KEY";
static const char __pyx_k_MAX_INFO_VAL[] = "MAX_INFO_VAL";
static const char __pyx_k_MESSAGE_NULL[] = "MESSAGE_NULL";
static const char __pyx_k_MODE_NOCHECK[] = "MODE_NOCHECK";
static const char __pyx_k_MODE_NOSTORE[] = "MODE_NOSTORE";
static const char __pyx_k_Publish_name[] = "Publish_name";
static const char __pyx_k_Query_thread[] = "Query_thread";
static const char __pyx_k_REQUEST_NULL[] = "REQUEST_NULL";
static const char __pyx_k_RuntimeError[] = "RuntimeError";
static const char __pyx_k_SIGNED_SHORT[] = "SIGNED_SHORT";
static const char __pyx_k_UNSIGNED_INT[] = "UNSIGNED_INT";
static const char __pyx_k_WIN_SEPARATE[] = "WIN_SEPARATE";
static const char __pyx_k_blocklengths[] = "blocklengths";
static const char __pyx_k_destinations[] = "destinations";
static const char __pyx_k_dummy_thread[] = "_dummy_thread";
static const char __pyx_k_error_code_2[] = "error_code";
static const char __pyx_k_error_code_d[] = "error code: %d";
static const char __pyx_k_error_string[] = "error string";
static const char __pyx_k_local_leader[] = "local_leader";
static const char __pyx_k_service_name[] = "service_name";
static const char __pyx_k_staticmethod[] = "staticmethod";
static const char __pyx_k_thread_level[] = "thread_level";
static const char __pyx_k_Attach_buffer[] = "Attach_buffer";
static const char __pyx_k_Create_keyval[] = "Create_keyval";
static const char __pyx_k_Create_struct[] = "Create_struct";
static const char __pyx_k_DATATYPE_NULL[] = "DATATYPE_NULL";
static const char __pyx_k_Detach_buffer[] = "Detach_buffer";
static const char __pyx_k_Distgraphcomm[] = "Distgraphcomm";
static const char __pyx_k_ERRORS_RETURN[] = "ERRORS_RETURN";
static const char __pyx_k_ERR_IN_STATUS[] = "ERR_IN_STATUS";
static const char __pyx_k_ERR_READ_ONLY[] = "ERR_READ_ONLY";
static const char __pyx_k_ERR_RMA_RANGE[] = "ERR_RMA_RANGE";
static const char __pyx_k_Get_atomicity[] = "Get_atomicity";
static const char __pyx_k_Get_neighbors[] = "Get_neighbors";
static const char __pyx_k_INDEXED_BLOCK[] = "INDEXED_BLOCK";
static const char __pyx_k_MAX_PORT_NAME[] = "MAX_PORT_NAME";
static const char __pyx_k_ORDER_FORTRAN[] = "ORDER_FORTRAN";
static const char __pyx_k_OverflowError[] = "OverflowError";
static const char __pyx_k_Set_atomicity[] = "Set_atomicity";
static const char __pyx_k_Set_cancelled[] = "Set_cancelled";
static const char __pyx_k_THREAD_SINGLE[] = "THREAD_SINGLE";
static const char __pyx_k_UNIVERSE_SIZE[] = "UNIVERSE_SIZE";
static const char __pyx_k_UNSIGNED_CHAR[] = "UNSIGNED_CHAR";
static const char __pyx_k_UNSIGNED_LONG[] = "UNSIGNED_LONG";
static const char __pyx_k_WEIGHTS_EMPTY[] = "WEIGHTS_EMPTY";
static const char __pyx_k_WIN_DISP_UNIT[] = "WIN_DISP_UNIT";
static const char __pyx_k_allocate_lock[] = "allocate_lock";
static const char __pyx_k_commctx_inter[] = "@commctx_inter";
static const char __pyx_k_commctx_intra[] = "@commctx_intra";
static const char __pyx_k_displacements[] = "displacements";
static const char __pyx_k_error_class_2[] = "error_class";
static const char __pyx_k_remote_leader[] = "remote_leader";
static const char __pyx_k_sourceweights[] = "sourceweights";
static const char __pyx_k_Add_error_code[] = "Add_error_code";
static const char __pyx_k_AttributeError[] = "AttributeError";
static const char __pyx_k_BSEND_OVERHEAD[] = "BSEND_OVERHEAD";
static const char __pyx_k_COMBINER_NAMED[] = "COMBINER_NAMED";
static const char __pyx_k_Create_dynamic[] = "Create_dynamic";
static const char __pyx_k_Create_resized[] = "Create_resized";
static const char __pyx_k_DOUBLE_COMPLEX[] = "DOUBLE_COMPLEX";
static const char __pyx_k_ERR_CONVERSION[] = "ERR_CONVERSION";
static const char __pyx_k_ERR_INFO_NOKEY[] = "ERR_INFO_NOKEY";
static const char __pyx_k_ERR_INFO_VALUE[] = "ERR_INFO_VALUE";
static const char __pyx_k_ERR_RMA_ATTACH[] = "ERR_RMA_ATTACH";
static const char __pyx_k_ERR_RMA_FLAVOR[] = "ERR_RMA_FLAVOR";
static const char __pyx_k_ERR_RMA_SHARED[] = "ERR_RMA_SHARED";
static const char __pyx_k_Exception___eq[] = "Exception.__eq__";
static const char __pyx_k_Exception___ge[] = "Exception.__ge__";
static const char __pyx_k_Exception___gt[] = "Exception.__gt__";
static const char __pyx_k_Exception___le[] = "Exception.__le__";
static const char __pyx_k_Exception___lt[] = "Exception.__lt__";
static const char __pyx_k_Exception___ne[] = "Exception.__ne__";
static const char __pyx_k_Get_error_code[] = "Get_error_code";
static const char __pyx_k_HINDEXED_BLOCK[] = "HINDEXED_BLOCK";
static const char __pyx_k_Is_commutative[] = "Is_commutative";
static const char __pyx_k_Is_initialized[] = "Is_initialized";
static const char __pyx_k_Is_thread_main[] = "Is_thread_main";
static const char __pyx_k_KEYVAL_INVALID[] = "KEYVAL_INVALID";
static const char __pyx_k_LOCK_EXCLUSIVE[] = "LOCK_EXCLUSIVE";
static const char __pyx_k_MODE_NOPRECEDE[] = "MODE_NOPRECEDE";
static const char __pyx_k_MODE_NOSUCCEED[] = "MODE_NOSUCCEED";
static const char __pyx_k_NotImplemented[] = "NotImplemented";
static const char __pyx_k_TYPECLASS_REAL[] = "TYPECLASS_REAL";
static const char __pyx_k_UNSIGNED_SHORT[] = "UNSIGNED_SHORT";
static const char __pyx_k_Unpublish_name[] = "Unpublish_name";
static const char __pyx_k_dummy_thread_2[] = "dummy_thread";
static const char __pyx_k_error_string_2[] = "error_string";
static const char __pyx_k_Add_error_class[] = "Add_error_class";
static const char __pyx_k_Allocate_shared[] = "Allocate_shared";
static const char __pyx_k_COMBINER_DARRAY[] = "COMBINER_DARRAY";
static const char __pyx_k_COMBINER_STRUCT[] = "COMBINER_STRUCT";
static const char __pyx_k_COMBINER_VECTOR[] = "COMBINER_VECTOR";
static const char __pyx_k_C_FLOAT_COMPLEX[] = "C_FLOAT_COMPLEX";
static const char __pyx_k_Create_f90_real[] = "Create_f90_real";
static const char __pyx_k_DISTRIBUTE_NONE[] = "DISTRIBUTE_NONE";
static const char __pyx_k_ERRHANDLER_NULL[] = "ERRHANDLER_NULL";
static const char __pyx_k_ERR_DUP_DATAREP[] = "ERR_DUP_DATAREP";
static const char __pyx_k_ERR_FILE_EXISTS[] = "ERR_FILE_EXISTS";
static const char __pyx_k_ERR_FILE_IN_USE[] = "ERR_FILE_IN_USE";
static const char __pyx_k_Exception___int[] = "Exception.__int__";
static const char __pyx_k_Exception___str[] = "Exception.__str__";
static const char __pyx_k_F_FLOAT_COMPLEX[] = "F_FLOAT_COMPLEX";
static const char __pyx_k_Get_error_class[] = "Get_error_class";
static const char __pyx_k_Get_remote_size[] = "Get_remote_size";
static const char __pyx_k_LONG_DOUBLE_INT[] = "LONG_DOUBLE_INT";
static const char __pyx_k_MAX_OBJECT_NAME[] = "MAX_OBJECT_NAME";
static const char __pyx_k_MESSAGE_NO_PROC[] = "MESSAGE_NO_PROC";
static const char __pyx_k_MODE_SEQUENTIAL[] = "MODE_SEQUENTIAL";
static const char __pyx_k_MPI_Exception_d[] = "MPI.Exception(%d)";
static const char __pyx_k_THREAD_FUNNELED[] = "THREAD_FUNNELED";
static const char __pyx_k_THREAD_MULTIPLE[] = "THREAD_MULTIPLE";
static const char __pyx_k_Translate_ranks[] = "Translate_ranks";
static const char __pyx_k_WTIME_IS_GLOBAL[] = "WTIME_IS_GLOBAL";
static const char __pyx_k_array_interface[] = "__array_interface__";
static const char __pyx_k_keyval_registry[] = "_keyval_registry";
static const char __pyx_k_Add_error_string[] = "Add_error_string";
static const char __pyx_k_COMBINER_HVECTOR[] = "COMBINER_HVECTOR";
static const char __pyx_k_COMBINER_INDEXED[] = "COMBINER_INDEXED";
static const char __pyx_k_COMBINER_RESIZED[] = "COMBINER_RESIZED";
static const char __pyx_k_COMM_TYPE_SHARED[] = "COMM_TYPE_SHARED";
static const char __pyx_k_C_DOUBLE_COMPLEX[] = "C_DOUBLE_COMPLEX";
static const char __pyx_k_DEFAULT_PROTOCOL[] = "DEFAULT_PROTOCOL";
static const char __pyx_k_DISTRIBUTE_BLOCK[] = "DISTRIBUTE_BLOCK";
static const char __pyx_k_DOUBLE_PRECISION[] = "DOUBLE_PRECISION";
static const char __pyx_k_ERRORS_ARE_FATAL[] = "ERRORS_ARE_FATAL";
static const char __pyx_k_ERR_NO_SUCH_FILE[] = "ERR_NO_SUCH_FILE";
static const char __pyx_k_ERR_RMA_CONFLICT[] = "ERR_RMA_CONFLICT";
static const char __pyx_k_Exception___bool[] = "Exception.__bool__";
static const char __pyx_k_Exception___hash[] = "Exception.__hash__";
static const char __pyx_k_Exception___init[] = "Exception.__init__";
static const char __pyx_k_Exception___repr[] = "Exception.__repr__";
static const char __pyx_k_F_DOUBLE_COMPLEX[] = "F_DOUBLE_COMPLEX";
static const char __pyx_k_Get_error_string[] = "Get_error_string";
static const char __pyx_k_Get_remote_group[] = "Get_remote_group";
static const char __pyx_k_HIGHEST_PROTOCOL[] = "HIGHEST_PROTOCOL";
static const char __pyx_k_MAX_ERROR_STRING[] = "MAX_ERROR_STRING";
static const char __pyx_k_MODE_UNIQUE_OPEN[] = "MODE_UNIQUE_OPEN";
static const char __pyx_k_Register_datarep[] = "Register_datarep";
static const char __pyx_k_SIGNED_LONG_LONG[] = "SIGNED_LONG_LONG";
static const char __pyx_k_set_abort_status[] = "_set_abort_status";
static const char __pyx_k_COMBINER_F90_REAL[] = "COMBINER_F90_REAL";
static const char __pyx_k_COMBINER_HINDEXED[] = "COMBINER_HINDEXED";
static const char __pyx_k_COMBINER_SUBARRAY[] = "COMBINER_SUBARRAY";
static const char __pyx_k_CXX_FLOAT_COMPLEX[] = "CXX_FLOAT_COMPLEX";
static const char __pyx_k_DISTRIBUTE_CYCLIC[] = "DISTRIBUTE_CYCLIC";
static const char __pyx_k_THREAD_SERIALIZED[] = "THREAD_SERIALIZED";
static const char __pyx_k_TYPECLASS_COMPLEX[] = "TYPECLASS_COMPLEX";
static const char __pyx_k_TYPECLASS_INTEGER[] = "TYPECLASS_INTEGER";
static const char __pyx_k_WIN_CREATE_FLAVOR[] = "WIN_CREATE_FLAVOR";
static const char __pyx_k_WIN_FLAVOR_CREATE[] = "WIN_FLAVOR_CREATE";
static const char __pyx_k_WIN_FLAVOR_SHARED[] = "WIN_FLAVOR_SHARED";
static const char __pyx_k_neighbor_alltoall[] = "neighbor_alltoall";
static const char __pyx_k_CXX_DOUBLE_COMPLEX[] = "CXX_DOUBLE_COMPLEX";
static const char __pyx_k_Create_f90_complex[] = "Create_f90_complex";
static const char __pyx_k_Create_f90_integer[] = "Create_f90_integer";
static const char __pyx_k_Get_dist_neighbors[] = "Get_dist_neighbors";
static const char __pyx_k_Get_processor_name[] = "Get_processor_name";
static const char __pyx_k_MAX_DATAREP_STRING[] = "MAX_DATAREP_STRING";
static const char __pyx_k_MAX_PROCESSOR_NAME[] = "MAX_PROCESSOR_NAME";
static const char __pyx_k_UNSIGNED_LONG_LONG[] = "UNSIGNED_LONG_LONG";
static const char __pyx_k_WIN_FLAVOR_DYNAMIC[] = "WIN_FLAVOR_DYNAMIC";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_index_out_of_range[] = "index out of range";
static const char __pyx_k_mpi4py_MPI_MPI_pyx[] = "mpi4py/MPI/MPI.pyx";
static const char __pyx_k_neighbor_allgather[] = "neighbor_allgather";
static const char __pyx_k_numpypy_multiarray[] = "_numpypy.multiarray";
static const char __pyx_k_COMBINER_CONTIGUOUS[] = "COMBINER_CONTIGUOUS";
static const char __pyx_k_Get_library_version[] = "Get_library_version";
static const char __pyx_k_Get_neighbors_count[] = "Get_neighbors_count";
static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
static const char __pyx_k_WIN_FLAVOR_ALLOCATE[] = "WIN_FLAVOR_ALLOCATE";
static const char __pyx_k_mpi4py_MPI_Comm_pyx[] = "mpi4py/MPI/Comm.pyx";
static const char __pyx_k_mpi4py_MPI_File_pyx[] = "mpi4py/MPI/File.pyx";
static const char __pyx_k_COMBINER_F90_COMPLEX[] = "COMBINER_F90_COMPLEX";
static const char __pyx_k_COMBINER_F90_INTEGER[] = "COMBINER_F90_INTEGER";
static const char __pyx_k_DISPLACEMENT_CURRENT[] = "DISPLACEMENT_CURRENT";
static const char __pyx_k_DISTRIBUTE_DFLT_DARG[] = "DISTRIBUTE_DFLT_DARG";
static const char __pyx_k_MODE_DELETE_ON_CLOSE[] = "MODE_DELETE_ON_CLOSE";
static const char __pyx_k_unorderable_type_s_s[] = "unorderable type: '%s.%s'";
static const char __pyx_k_C_LONG_DOUBLE_COMPLEX[] = "C_LONG_DOUBLE_COMPLEX";
static const char __pyx_k_COMBINER_INDEXED_BLOCK[] = "COMBINER_INDEXED_BLOCK";
static const char __pyx_k_mpi4py_MPI_typestr_pxi[] = "mpi4py/MPI/typestr.pxi";
static const char __pyx_k_COMBINER_HINDEXED_BLOCK[] = "COMBINER_HINDEXED_BLOCK";
static const char __pyx_k_CXX_LONG_DOUBLE_COMPLEX[] = "CXX_LONG_DOUBLE_COMPLEX";
static const char __pyx_k_ERR_UNSUPPORTED_DATAREP[] = "ERR_UNSUPPORTED_DATAREP";
static const char __pyx_k_expecting_d_items_got_d[] = "expecting %d items, got %d";
static const char __pyx_k_mpi4py_MPI_Datatype_pyx[] = "mpi4py/MPI/Datatype.pyx";
static const char __pyx_k_mpi4py_MPI_asbuffer_pxi[] = "mpi4py/MPI/asbuffer.pxi";
static const char __pyx_k_mpi4py_MPI_atimport_pxi[] = "mpi4py/MPI/atimport.pxi";
static const char __pyx_k_mpi4py_MPI_commimpl_pxi[] = "mpi4py/MPI/commimpl.pxi";
static const char __pyx_k_Exception_Get_error_code[] = "Exception.Get_error_code";
static const char __pyx_k_Get_dist_neighbors_count[] = "Get_dist_neighbors_count";
static const char __pyx_k_message_negative_count_d[] = "message: negative count %d";
static const char __pyx_k_mpi4py_MPI_Exception_pyx[] = "mpi4py/MPI/Exception.pyx";
static const char __pyx_k_ERR_UNSUPPORTED_OPERATION[] = "ERR_UNSUPPORTED_OPERATION";
static const char __pyx_k_Exception_Get_error_class[] = "Exception.Get_error_class";
static const char __pyx_k_Message_Passing_Interface[] = "\nMessage Passing Interface\n";
static const char __pyx_k_expecting_an_MPI_instance[] = "expecting an MPI instance";
static const char __pyx_k_mpi4py_MPI_ExceptionP_pyx[] = "mpi4py/MPI/ExceptionP.pyx";
static const char __pyx_k_Exception_Get_error_string[] = "Exception.Get_error_string";
static const char __pyx_k_MAX_LIBRARY_VERSION_STRING[] = "MAX_LIBRARY_VERSION_STRING";
static const char __pyx_k_expecting_non_NULL_address[] = "expecting non-NULL address";
static const char __pyx_k_memory_buffer_is_read_only[] = "memory buffer is read-only";
static const char __pyx_k_Not_a_topology_communicator[] = "Not a topology communicator";
static const char __pyx_k_MPI_Init_failed_error_code_d[] = "MPI_Init() failed [error code: %d]";
static const char __pyx_k_integer_d_does_not_fit_in_int[] = "integer %d does not fit in 'int'";
static const char __pyx_k_slice_with_step_not_supported[] = "slice with step not supported";
static const char __pyx_k_expecting_an_intercommunicator[] = "expecting an intercommunicator";
static const char __pyx_k_expecting_an_intracommunicator[] = "expecting an intracommunicator";
static const char __pyx_k_index_must_be_integer_or_slice[] = "index must be integer or slice";
static const char __pyx_k_message_expecting_2_to_4_items[] = "message: expecting 2 to 4 items";
static const char __pyx_k_message_negative_diplacement_d[] = "message: negative diplacement %d";
static const char __pyx_k_mpi4py_rc_s_unexpected_value_r[] = "mpi4py.rc: '%s': unexpected value '%r'";
static const char __pyx_k_expecting_a_sequence_of_strings[] = "expecting a sequence of strings";
static const char __pyx_k_memory_allocation_with_negative[] = "memory allocation with negative size";
static const char __pyx_k_mismatch_in_receive_count_d_and[] = "mismatch in receive count %d and counts[%d] %d";
static const char __pyx_k_MPI_Init_thread_failed_error_cod[] = "MPI_Init_thread() failed [error code: %d]";
static const char __pyx_k_accessing_non_existent_buffer_se[] = "accessing non-existent buffer segment";
static const char __pyx_k_cannot_create_too_many_user_defi[] = "cannot create too many user-defined reduction operations";
static const char __pyx_k_compare_expecting_a_single_eleme[] = "compare: expecting a single element, got %d";
static const char __pyx_k_empty_weights_but_nonzero_degree[] = "empty weights but nonzero degree";
static const char __pyx_k_expecting_a_Cartesian_communicat[] = "expecting a Cartesian communicator";
static const char __pyx_k_expecting_a_distributed_graph_co[] = "expecting a distributed graph communicator";
static const char __pyx_k_expecting_a_general_graph_commun[] = "expecting a general graph communicator";
static const char __pyx_k_expecting_a_topology_communicato[] = "expecting a topology communicator";
static const char __pyx_k_expecting_an_MPI_type_or_instanc[] = "expecting an MPI type or instance";
static const char __pyx_k_expecting_non_negative_buffer_le[] = "expecting non-negative buffer length";
static const char __pyx_k_memory_allocation_size_too_large[] = "memory allocation size too large";
static const char __pyx_k_message_buffer_is_None_but_count[] = "message: buffer is None but count is %d";
static const char __pyx_k_message_cannot_handle_diplacemen[] = "message: cannot handle diplacement, datatype is null";
static const char __pyx_k_message_cannot_infer_count_buffe[] = "message: cannot infer count, buffer length %d is not a multiple of datatype extent %d (lb:%d, ub:%d)";
static const char __pyx_k_message_cannot_infer_count_datat[] = "message: cannot infer count, datatype is null";
static const char __pyx_k_message_cannot_infer_count_numbe[] = "message: cannot infer count, number of entries %d is not a multiple of required number of blocks %d";
static const char __pyx_k_message_displacement_d_out_of_bo[] = "message: displacement %d out of bounds, number of datatype entries %d";
static const char __pyx_k_message_expecting_buffer_or_list[] = "message: expecting buffer or list/tuple";
static const char __pyx_k_mismatch_in_inbuf_and_inoutbuf_M[] = "mismatch in inbuf and inoutbuf MPI datatypes";
static const char __pyx_k_mismatch_in_inbuf_count_d_and_in[] = "mismatch in inbuf count %d and inoutbuf count %d";
static const char __pyx_k_mismatch_in_origin_and_compare_M[] = "mismatch in origin and compare MPI datatypes";
static const char __pyx_k_mismatch_in_origin_and_result_MP[] = "mismatch in origin and result MPI datatypes";
static const char __pyx_k_mismatch_in_send_and_receive_MPI[] = "mismatch in send and receive MPI datatypes";
static const char __pyx_k_mismatch_in_send_count_d_and_rec[] = "mismatch in send count %d and receive count %d";
static const char __pyx_k_mismatch_in_send_count_d_and_sum[] = "mismatch in send count %d and sum(counts) %d";
static const char __pyx_k_mismatch_in_send_count_d_receive[] = "mismatch in send count %d receive count %d";
static const char __pyx_k_origin_expecting_a_single_elemen[] = "origin: expecting a single element, got %d";
static const char __pyx_k_result_expecting_a_single_elemen[] = "result: expecting a single element, got %d";
static const char __pyx_k_slice_length_does_not_match_buff[] = "slice length does not match buffer";
static const char __pyx_k_target_expecting_3_items_at_most[] = "target: expecting 3 items at most";
static const char __pyx_k_target_expecting_integral_or_lis[] = "target: expecting integral or list/tuple";
static const char __pyx_k_mismatch_in_receive_count_d_and_2[] = "mismatch in receive count %d and sum(counts) %d";
static const char __pyx_k_message_cannot_handle_diplacemen_2[] = "message: cannot handle diplacement, datatype extent %d (lb:%d, ub:%d)";
static const char __pyx_k_message_cannot_infer_count_datat_2[] = "message: cannot infer count, datatype extent %d (lb:%d, ub:%d)";
static PyObject *__pyx_n_s_AINT;
static PyObject *__pyx_n_s_ANY_SOURCE;
static PyObject *__pyx_n_s_ANY_TAG;
static PyObject *__pyx_n_s_APPNUM;
static PyObject *__pyx_n_s_Add_error_class;
static PyObject *__pyx_n_s_Add_error_code;
static PyObject *__pyx_n_s_Add_error_string;
static PyObject *__pyx_n_s_Aint_add;
static PyObject *__pyx_n_s_Aint_diff;
static PyObject *__pyx_n_s_Alloc_mem;
static PyObject *__pyx_n_s_Allocate;
static PyObject *__pyx_n_s_Allocate_shared;
static PyObject *__pyx_n_s_Attach_buffer;
static PyObject *__pyx_n_s_AttributeError;
static PyObject *__pyx_n_s_B;
static PyObject *__pyx_n_s_BAND;
static PyObject *__pyx_n_s_BOOL;
static PyObject *__pyx_n_s_BOR;
static PyObject *__pyx_n_s_BOTTOM;
static PyObject *__pyx_n_s_BSEND_OVERHEAD;
static PyObject *__pyx_n_s_BXOR;
static PyObject *__pyx_n_s_BYTE;
static PyObject *__pyx_n_s_BytesIO;
static PyObject *__pyx_n_s_CART;
static PyObject *__pyx_n_s_CHAR;
static PyObject *__pyx_n_s_CHARACTER;
static PyObject *__pyx_n_s_COMBINER_CONTIGUOUS;
static PyObject *__pyx_n_s_COMBINER_DARRAY;
static PyObject *__pyx_n_s_COMBINER_DUP;
static PyObject *__pyx_n_s_COMBINER_F90_COMPLEX;
static PyObject *__pyx_n_s_COMBINER_F90_INTEGER;
static PyObject *__pyx_n_s_COMBINER_F90_REAL;
static PyObject *__pyx_n_s_COMBINER_HINDEXED;
static PyObject *__pyx_n_s_COMBINER_HINDEXED_BLOCK;
static PyObject *__pyx_n_s_COMBINER_HVECTOR;
static PyObject *__pyx_n_s_COMBINER_INDEXED;
static PyObject *__pyx_n_s_COMBINER_INDEXED_BLOCK;
static PyObject *__pyx_n_s_COMBINER_NAMED;
static PyObject *__pyx_n_s_COMBINER_RESIZED;
static PyObject *__pyx_n_s_COMBINER_STRUCT;
static PyObject *__pyx_n_s_COMBINER_SUBARRAY;
static PyObject *__pyx_n_s_COMBINER_VECTOR;
static PyObject *__pyx_n_s_COMM_NULL;
static PyObject *__pyx_n_s_COMM_SELF;
static PyObject *__pyx_n_s_COMM_TYPE_SHARED;
static PyObject *__pyx_n_s_COMM_WORLD;
static PyObject *__pyx_n_s_COMPLEX;
static PyObject *__pyx_n_s_COMPLEX16;
static PyObject *__pyx_n_s_COMPLEX32;
static PyObject *__pyx_n_s_COMPLEX4;
static PyObject *__pyx_n_s_COMPLEX8;
static PyObject *__pyx_n_s_CONGRUENT;
static PyObject *__pyx_n_s_CONTIGUOUS;
static PyObject *__pyx_n_s_COUNT;
static PyObject *__pyx_n_s_CXX_BOOL;
static PyObject *__pyx_n_s_CXX_DOUBLE_COMPLEX;
static PyObject *__pyx_n_s_CXX_FLOAT_COMPLEX;
static PyObject *__pyx_n_s_CXX_LONG_DOUBLE_COMPLEX;
static PyObject *__pyx_n_s_C_BOOL;
static PyObject *__pyx_n_s_C_COMPLEX;
static PyObject *__pyx_n_s_C_DOUBLE_COMPLEX;
static PyObject *__pyx_n_s_C_FLOAT_COMPLEX;
static PyObject *__pyx_n_s_C_LONG_DOUBLE_COMPLEX;
static PyObject *__pyx_n_s_Cartcomm;
static PyObject *__pyx_n_s_Close_port;
static PyObject *__pyx_n_s_Comm;
static PyObject *__pyx_n_s_Compare;
static PyObject *__pyx_n_s_Compute_dims;
static PyObject *__pyx_n_s_Create;
static PyObject *__pyx_n_s_Create_dup;
static PyObject *__pyx_n_s_Create_dynamic;
static PyObject *__pyx_n_s_Create_f90_complex;
static PyObject *__pyx_n_s_Create_f90_integer;
static PyObject *__pyx_n_s_Create_f90_real;
static PyObject *__pyx_n_s_Create_keyval;
static PyObject *__pyx_n_s_Create_resized;
static PyObject *__pyx_n_s_Create_struct;
static PyObject *__pyx_n_s_DARRAY;
static PyObject *__pyx_n_s_DATATYPE_NULL;
static PyObject *__pyx_n_s_DEFAULT_PROTOCOL;
static PyObject *__pyx_n_s_DISPLACEMENT_CURRENT;
static PyObject *__pyx_n_s_DISP_CUR;
static PyObject *__pyx_n_s_DISTRIBUTE_BLOCK;
static PyObject *__pyx_n_s_DISTRIBUTE_CYCLIC;
static PyObject *__pyx_n_s_DISTRIBUTE_DFLT_DARG;
static PyObject *__pyx_n_s_DISTRIBUTE_NONE;
static PyObject *__pyx_n_s_DIST_GRAPH;
static PyObject *__pyx_n_s_DOUBLE;
static PyObject *__pyx_n_s_DOUBLE_COMPLEX;
static PyObject *__pyx_n_s_DOUBLE_INT;
static PyObject *__pyx_n_s_DOUBLE_PRECISION;
static PyObject *__pyx_n_s_DUP;
static PyObject *__pyx_n_s_Datatype;
static PyObject *__pyx_n_s_Delete;
static PyObject *__pyx_n_s_Detach_buffer;
static PyObject *__pyx_n_s_Difference;
static PyObject *__pyx_n_s_Distgraphcomm;
static PyObject *__pyx_n_s_Dup;
static PyObject *__pyx_n_s_ERRHANDLER_NULL;
static PyObject *__pyx_n_s_ERRORS_ARE_FATAL;
static PyObject *__pyx_n_s_ERRORS_RETURN;
static PyObject *__pyx_n_s_ERR_ACCESS;
static PyObject *__pyx_n_s_ERR_AMODE;
static PyObject *__pyx_n_s_ERR_ARG;
static PyObject *__pyx_n_s_ERR_ASSERT;
static PyObject *__pyx_n_s_ERR_BAD_FILE;
static PyObject *__pyx_n_s_ERR_BASE;
static PyObject *__pyx_n_s_ERR_BUFFER;
static PyObject *__pyx_n_s_ERR_COMM;
static PyObject *__pyx_n_s_ERR_CONVERSION;
static PyObject *__pyx_n_s_ERR_COUNT;
static PyObject *__pyx_n_s_ERR_DIMS;
static PyObject *__pyx_n_s_ERR_DISP;
static PyObject *__pyx_n_s_ERR_DUP_DATAREP;
static PyObject *__pyx_n_s_ERR_FILE;
static PyObject *__pyx_n_s_ERR_FILE_EXISTS;
static PyObject *__pyx_n_s_ERR_FILE_IN_USE;
static PyObject *__pyx_n_s_ERR_GROUP;
static PyObject *__pyx_n_s_ERR_INFO;
static PyObject *__pyx_n_s_ERR_INFO_KEY;
static PyObject *__pyx_n_s_ERR_INFO_NOKEY;
static PyObject *__pyx_n_s_ERR_INFO_VALUE;
static PyObject *__pyx_n_s_ERR_INTERN;
static PyObject *__pyx_n_s_ERR_IN_STATUS;
static PyObject *__pyx_n_s_ERR_IO;
static PyObject *__pyx_n_s_ERR_KEYVAL;
static PyObject *__pyx_n_s_ERR_LASTCODE;
static PyObject *__pyx_n_s_ERR_LOCKTYPE;
static PyObject *__pyx_n_s_ERR_NAME;
static PyObject *__pyx_n_s_ERR_NOT_SAME;
static PyObject *__pyx_n_s_ERR_NO_MEM;
static PyObject *__pyx_n_s_ERR_NO_SPACE;
static PyObject *__pyx_n_s_ERR_NO_SUCH_FILE;
static PyObject *__pyx_n_s_ERR_OP;
static PyObject *__pyx_n_s_ERR_OTHER;
static PyObject *__pyx_n_s_ERR_PENDING;
static PyObject *__pyx_n_s_ERR_PORT;
static PyObject *__pyx_n_s_ERR_QUOTA;
static PyObject *__pyx_n_s_ERR_RANK;
static PyObject *__pyx_n_s_ERR_READ_ONLY;
static PyObject *__pyx_n_s_ERR_REQUEST;
static PyObject *__pyx_n_s_ERR_RMA_ATTACH;
static PyObject *__pyx_n_s_ERR_RMA_CONFLICT;
static PyObject *__pyx_n_s_ERR_RMA_FLAVOR;
static PyObject *__pyx_n_s_ERR_RMA_RANGE;
static PyObject *__pyx_n_s_ERR_RMA_SHARED;
static PyObject *__pyx_n_s_ERR_RMA_SYNC;
static PyObject *__pyx_n_s_ERR_ROOT;
static PyObject *__pyx_n_s_ERR_SERVICE;
static PyObject *__pyx_n_s_ERR_SIZE;
static PyObject *__pyx_n_s_ERR_SPAWN;
static PyObject *__pyx_n_s_ERR_TAG;
static PyObject *__pyx_n_s_ERR_TOPOLOGY;
static PyObject *__pyx_n_s_ERR_TRUNCATE;
static PyObject *__pyx_n_s_ERR_TYPE;
static PyObject *__pyx_n_s_ERR_UNKNOWN;
static PyObject *__pyx_n_s_ERR_UNSUPPORTED_DATAREP;
static PyObject *__pyx_n_s_ERR_UNSUPPORTED_OPERATION;
static PyObject *__pyx_n_s_ERR_WIN;
static PyObject *__pyx_n_s_Errhandler;
static PyObject *__pyx_kp_s_Exception;
static PyObject *__pyx_n_s_Exception_2;
static PyObject *__pyx_n_s_Exception_Get_error_class;
static PyObject *__pyx_n_s_Exception_Get_error_code;
static PyObject *__pyx_n_s_Exception_Get_error_string;
static PyObject *__pyx_n_s_Exception___bool;
static PyObject *__pyx_n_s_Exception___eq;
static PyObject *__pyx_n_s_Exception___ge;
static PyObject *__pyx_n_s_Exception___gt;
static PyObject *__pyx_n_s_Exception___hash;
static PyObject *__pyx_n_s_Exception___init;
static PyObject *__pyx_n_s_Exception___int;
static PyObject *__pyx_n_s_Exception___le;
static PyObject *__pyx_n_s_Exception___lt;
static PyObject *__pyx_n_s_Exception___ne;
static PyObject *__pyx_n_s_Exception___repr;
static PyObject *__pyx_n_s_Exception___str;
static PyObject *__pyx_n_s_F90_COMPLEX;
static PyObject *__pyx_n_s_F90_INTEGER;
static PyObject *__pyx_n_s_F90_REAL;
static PyObject *__pyx_n_s_FILE_NULL;
static PyObject *__pyx_n_s_FLOAT;
static PyObject *__pyx_n_s_FLOAT_INT;
static PyObject *__pyx_n_s_F_BOOL;
static PyObject *__pyx_n_s_F_COMPLEX;
static PyObject *__pyx_n_s_F_DOUBLE;
static PyObject *__pyx_n_s_F_DOUBLE_COMPLEX;
static PyObject *__pyx_n_s_F_FLOAT;
static PyObject *__pyx_n_s_F_FLOAT_COMPLEX;
static PyObject *__pyx_n_s_F_INT;
static PyObject *__pyx_n_s_File;
static PyObject *__pyx_n_s_Finalize;
static PyObject *__pyx_n_s_Free_keyval;
static PyObject *__pyx_n_s_Free_mem;
static PyObject *__pyx_n_s_GRAPH;
static PyObject *__pyx_n_s_GROUP_EMPTY;
static PyObject *__pyx_n_s_GROUP_NULL;
static PyObject *__pyx_n_s_Get;
static PyObject *__pyx_n_s_Get_address;
static PyObject *__pyx_n_s_Get_amode;
static PyObject *__pyx_n_s_Get_atomicity;
static PyObject *__pyx_n_s_Get_contents;
static PyObject *__pyx_n_s_Get_count;
static PyObject *__pyx_n_s_Get_dim;
static PyObject *__pyx_n_s_Get_dims;
static PyObject *__pyx_n_s_Get_dist_neighbors;
static PyObject *__pyx_n_s_Get_dist_neighbors_count;
static PyObject *__pyx_n_s_Get_envelope;
static PyObject *__pyx_n_s_Get_error;
static PyObject *__pyx_n_s_Get_error_class;
static PyObject *__pyx_n_s_Get_error_code;
static PyObject *__pyx_n_s_Get_error_string;
static PyObject *__pyx_n_s_Get_group;
static PyObject *__pyx_n_s_Get_info;
static PyObject *__pyx_n_s_Get_library_version;
static PyObject *__pyx_n_s_Get_name;
static PyObject *__pyx_n_s_Get_neighbors;
static PyObject *__pyx_n_s_Get_neighbors_count;
static PyObject *__pyx_n_s_Get_nkeys;
static PyObject *__pyx_n_s_Get_nthkey;
static PyObject *__pyx_n_s_Get_parent;
static PyObject *__pyx_n_s_Get_processor_name;
static PyObject *__pyx_n_s_Get_rank;
static PyObject *__pyx_n_s_Get_remote_group;
static PyObject *__pyx_n_s_Get_remote_size;
static PyObject *__pyx_n_s_Get_size;
static PyObject *__pyx_n_s_Get_source;
static PyObject *__pyx_n_s_Get_tag;
static PyObject *__pyx_n_s_Get_topo;
static PyObject *__pyx_n_s_Get_topology;
static PyObject *__pyx_n_s_Get_version;
static PyObject *__pyx_n_s_Graphcomm;
static PyObject *__pyx_n_s_Grequest;
static PyObject *__pyx_n_s_Group;
static PyObject *__pyx_n_s_HIGHEST_PROTOCOL;
static PyObject *__pyx_n_s_HINDEXED;
static PyObject *__pyx_n_s_HINDEXED_BLOCK;
static PyObject *__pyx_n_s_HOST;
static PyObject *__pyx_n_s_HVECTOR;
static PyObject *__pyx_n_s_IDENT;
static PyObject *__pyx_n_s_INDEXED;
static PyObject *__pyx_n_s_INDEXED_BLOCK;
static PyObject *__pyx_n_s_INFO_ENV;
static PyObject *__pyx_n_s_INFO_NULL;
static PyObject *__pyx_n_s_INT;
static PyObject *__pyx_n_s_INT16_T;
static PyObject *__pyx_n_s_INT32_T;
static PyObject *__pyx_n_s_INT64_T;
static PyObject *__pyx_n_s_INT8_T;
static PyObject *__pyx_n_s_INTEGER;
static PyObject *__pyx_n_s_INTEGER1;
static PyObject *__pyx_n_s_INTEGER16;
static PyObject *__pyx_n_s_INTEGER2;
static PyObject *__pyx_n_s_INTEGER4;
static PyObject *__pyx_n_s_INTEGER8;
static PyObject *__pyx_n_s_INT_INT;
static PyObject *__pyx_n_s_IN_PLACE;
static PyObject *__pyx_n_s_IO;
static PyObject *__pyx_n_s_ImportError;
static PyObject *__pyx_n_s_IndexError;
static PyObject *__pyx_n_s_Info;
static PyObject *__pyx_n_s_Init;
static PyObject *__pyx_n_s_Init_thread;
static PyObject *__pyx_n_s_Intercomm;
static PyObject *__pyx_n_s_Intersect;
static PyObject *__pyx_n_s_Intersection;
static PyObject *__pyx_n_s_Intracomm;
static PyObject *__pyx_n_s_Iprobe;
static PyObject *__pyx_n_s_Is_cancelled;
static PyObject *__pyx_n_s_Is_commutative;
static PyObject *__pyx_n_s_Is_finalized;
static PyObject *__pyx_n_s_Is_initialized;
static PyObject *__pyx_n_s_Is_inter;
static PyObject *__pyx_n_s_Is_intra;
static PyObject *__pyx_n_s_Is_thread_main;
static PyObject *__pyx_n_s_Join;
static PyObject *__pyx_n_s_KEYVAL_INVALID;
static PyObject *__pyx_n_s_KeyError;
static PyObject *__pyx_n_s_LAND;
static PyObject *__pyx_n_s_LASTUSEDCODE;
static PyObject *__pyx_n_s_LB;
static PyObject *__pyx_n_s_LOCK_EXCLUSIVE;
static PyObject *__pyx_n_s_LOCK_SHARED;
static PyObject *__pyx_n_s_LOGICAL;
static PyObject *__pyx_n_s_LOGICAL1;
static PyObject *__pyx_n_s_LOGICAL2;
static PyObject *__pyx_n_s_LOGICAL4;
static PyObject *__pyx_n_s_LOGICAL8;
static PyObject *__pyx_n_s_LONG;
static PyObject *__pyx_n_s_LONG_DOUBLE;
static PyObject *__pyx_n_s_LONG_DOUBLE_INT;
static PyObject *__pyx_n_s_LONG_INT;
static PyObject *__pyx_n_s_LONG_LONG;
static PyObject *__pyx_n_s_LOR;
static PyObject *__pyx_n_s_LXOR;
static PyObject *__pyx_n_s_Lookup_name;
static PyObject *__pyx_n_s_MAX;
static PyObject *__pyx_n_s_MAXLOC;
static PyObject *__pyx_n_s_MAX_DATAREP_STRING;
static PyObject *__pyx_n_s_MAX_ERROR_STRING;
static PyObject *__pyx_n_s_MAX_INFO_KEY;
static PyObject *__pyx_n_s_MAX_INFO_VAL;
static PyObject *__pyx_n_s_MAX_LIBRARY_VERSION_STRING;
static PyObject *__pyx_n_s_MAX_OBJECT_NAME;
static PyObject *__pyx_n_s_MAX_PORT_NAME;
static PyObject *__pyx_n_s_MAX_PROCESSOR_NAME;
static PyObject *__pyx_n_s_MESSAGE_NO_PROC;
static PyObject *__pyx_n_s_MESSAGE_NULL;
static PyObject *__pyx_n_s_MIN;
static PyObject *__pyx_n_s_MINLOC;
static PyObject *__pyx_n_s_MODE_APPEND;
static PyObject *__pyx_n_s_MODE_CREATE;
static PyObject *__pyx_n_s_MODE_DELETE_ON_CLOSE;
static PyObject *__pyx_n_s_MODE_EXCL;
static PyObject *__pyx_n_s_MODE_NOCHECK;
static PyObject *__pyx_n_s_MODE_NOPRECEDE;
static PyObject *__pyx_n_s_MODE_NOPUT;
static PyObject *__pyx_n_s_MODE_NOSTORE;
static PyObject *__pyx_n_s_MODE_NOSUCCEED;
static PyObject *__pyx_n_s_MODE_RDONLY;
static PyObject *__pyx_n_s_MODE_RDWR;
static PyObject *__pyx_n_s_MODE_SEQUENTIAL;
static PyObject *__pyx_n_s_MODE_UNIQUE_OPEN;
static PyObject *__pyx_n_s_MODE_WRONLY;
static PyObject *__pyx_kp_s_MPI_Exception_d;
static PyObject *__pyx_kp_s_MPI_Init_failed_error_code_d;
static PyObject *__pyx_kp_s_MPI_Init_thread_failed_error_cod;
static PyObject *__pyx_n_s_Match_size;
static PyObject *__pyx_n_s_MemoryError;
static PyObject *__pyx_n_s_Message;
static PyObject *__pyx_kp_s_Message_Passing_Interface;
static PyObject *__pyx_n_s_NO_OP;
static PyObject *__pyx_n_s_NotImplemented;
static PyObject *__pyx_n_s_NotImplementedError;
static PyObject *__pyx_kp_s_Not_a_topology_communicator;
static PyObject *__pyx_n_s_OFFSET;
static PyObject *__pyx_n_s_OP_NULL;
static PyObject *__pyx_n_s_ORDER_C;
static PyObject *__pyx_n_s_ORDER_F;
static PyObject *__pyx_n_s_ORDER_FORTRAN;
static PyObject *__pyx_n_s_Op;
static PyObject *__pyx_n_s_Open;
static PyObject *__pyx_n_s_Open_port;
static PyObject *__pyx_n_s_OverflowError;
static PyObject *__pyx_n_s_PACKED;
static PyObject *__pyx_n_s_PROC_NULL;
static PyObject *__pyx_n_s_PROD;
static PyObject *__pyx_n_s_Pcontrol;
static PyObject *__pyx_n_s_Prequest;
static PyObject *__pyx_n_s_Probe;
static PyObject *__pyx_n_s_Publish_name;
static PyObject *__pyx_n_s_Query_thread;
static PyObject *__pyx_n_s_REAL;
static PyObject *__pyx_n_s_REAL16;
static PyObject *__pyx_n_s_REAL2;
static PyObject *__pyx_n_s_REAL4;
static PyObject *__pyx_n_s_REAL8;
static PyObject *__pyx_n_s_REPLACE;
static PyObject *__pyx_n_s_REQUEST_NULL;
static PyObject *__pyx_n_s_RESIZED;
static PyObject *__pyx_n_s_ROOT;
static PyObject *__pyx_n_s_Register_datarep;
static PyObject *__pyx_n_s_Request;
static PyObject *__pyx_n_s_Resized;
static PyObject *__pyx_n_s_RuntimeError;
static PyObject *__pyx_n_s_SEEK_CUR;
static PyObject *__pyx_n_s_SEEK_END;
static PyObject *__pyx_n_s_SEEK_SET;
static PyObject *__pyx_n_s_SHORT;
static PyObject *__pyx_n_s_SHORT_INT;
static PyObject *__pyx_n_s_SIGNED_CHAR;
static PyObject *__pyx_n_s_SIGNED_INT;
static PyObject *__pyx_n_s_SIGNED_LONG;
static PyObject *__pyx_n_s_SIGNED_LONG_LONG;
static PyObject *__pyx_n_s_SIGNED_SHORT;
static PyObject *__pyx_n_s_SIMILAR;
static PyObject *__pyx_n_s_SINT16_T;
static PyObject *__pyx_n_s_SINT32_T;
static PyObject *__pyx_n_s_SINT64_T;
static PyObject *__pyx_n_s_SINT8_T;
static PyObject *__pyx_n_s_STRUCT;
static PyObject *__pyx_n_s_SUBARRAY;
static PyObject *__pyx_n_s_SUBVERSION;
static PyObject *__pyx_n_s_SUCCESS;
static PyObject *__pyx_n_s_SUM;
static PyObject *__pyx_n_s_Set;
static PyObject *__pyx_n_s_Set_atomicity;
static PyObject *__pyx_n_s_Set_cancelled;
static PyObject *__pyx_n_s_Set_error;
static PyObject *__pyx_n_s_Set_info;
static PyObject *__pyx_n_s_Set_name;
static PyObject *__pyx_n_s_Set_source;
static PyObject *__pyx_n_s_Set_tag;
static PyObject *__pyx_n_s_Shift;
static PyObject *__pyx_n_s_Start;
static PyObject *__pyx_n_s_Startall;
static PyObject *__pyx_n_s_Status;
static PyObject *__pyx_n_s_StringIO;
static PyObject *__pyx_n_s_SystemError;
static PyObject *__pyx_n_s_TAG_UB;
static PyObject *__pyx_n_s_THREAD_FUNNELED;
static PyObject *__pyx_n_s_THREAD_MULTIPLE;
static PyObject *__pyx_n_s_THREAD_SERIALIZED;
static PyObject *__pyx_n_s_THREAD_SINGLE;
static PyObject *__pyx_n_s_TWOINT;
static PyObject *__pyx_n_s_TYPECLASS_COMPLEX;
static PyObject *__pyx_n_s_TYPECLASS_INTEGER;
static PyObject *__pyx_n_s_TYPECLASS_REAL;
static PyObject *__pyx_n_s_Testall;
static PyObject *__pyx_n_s_Testany;
static PyObject *__pyx_n_s_Testsome;
static PyObject *__pyx_n_s_Topocomm;
static PyObject *__pyx_n_s_Translate_ranks;
static PyObject *__pyx_n_s_TypeError;
static PyObject *__pyx_n_s_UB;
static PyObject *__pyx_n_s_UINT16_T;
static PyObject *__pyx_n_s_UINT32_T;
static PyObject *__pyx_n_s_UINT64_T;
static PyObject *__pyx_n_s_UINT8_T;
static PyObject *__pyx_n_s_UNDEFINED;
static PyObject *__pyx_n_s_UNEQUAL;
static PyObject *__pyx_n_s_UNIVERSE_SIZE;
static PyObject *__pyx_n_s_UNSIGNED;
static PyObject *__pyx_n_s_UNSIGNED_CHAR;
static PyObject *__pyx_n_s_UNSIGNED_INT;
static PyObject *__pyx_n_s_UNSIGNED_LONG;
static PyObject *__pyx_n_s_UNSIGNED_LONG_LONG;
static PyObject *__pyx_n_s_UNSIGNED_SHORT;
static PyObject *__pyx_n_s_UNWEIGHTED;
static PyObject *__pyx_n_s_Union;
static PyObject *__pyx_n_s_Unpublish_name;
static PyObject *__pyx_n_s_UserWarning;
static PyObject *__pyx_n_s_VECTOR;
static PyObject *__pyx_n_s_VERSION;
static PyObject *__pyx_n_s_ValueError;
static PyObject *__pyx_n_s_WCHAR;
static PyObject *__pyx_n_s_WEIGHTS_EMPTY;
static PyObject *__pyx_n_s_WIN_BASE;
static PyObject *__pyx_n_s_WIN_CREATE_FLAVOR;
static PyObject *__pyx_n_s_WIN_DISP_UNIT;
static PyObject *__pyx_n_s_WIN_FLAVOR;
static PyObject *__pyx_n_s_WIN_FLAVOR_ALLOCATE;
static PyObject *__pyx_n_s_WIN_FLAVOR_CREATE;
static PyObject *__pyx_n_s_WIN_FLAVOR_DYNAMIC;
static PyObject *__pyx_n_s_WIN_FLAVOR_SHARED;
static PyObject *__pyx_n_s_WIN_MODEL;
static PyObject *__pyx_n_s_WIN_NULL;
static PyObject *__pyx_n_s_WIN_SEPARATE;
static PyObject *__pyx_n_s_WIN_SIZE;
static PyObject *__pyx_n_s_WIN_UNIFIED;
static PyObject *__pyx_n_s_WTIME_IS_GLOBAL;
static PyObject *__pyx_n_s_Waitall;
static PyObject *__pyx_n_s_Waitany;
static PyObject *__pyx_n_s_Waitsome;
static PyObject *__pyx_n_s_Win;
static PyObject *__pyx_n_s_Wtick;
static PyObject *__pyx_n_s_Wtime;
static PyObject *__pyx_kp_b__23;
static PyObject *__pyx_kp_s_accessing_non_existent_buffer_se;
static PyObject *__pyx_n_s_addr1;
static PyObject *__pyx_n_s_addr2;
static PyObject *__pyx_n_s_address;
static PyObject *__pyx_n_s_addressof;
static PyObject *__pyx_n_s_allgather;
static PyObject *__pyx_n_s_allocate_lock;
static PyObject *__pyx_n_s_alltoall;
static PyObject *__pyx_n_s_amode;
static PyObject *__pyx_n_s_append;
static PyObject *__pyx_n_s_arg;
static PyObject *__pyx_n_s_args;
static PyObject *__pyx_n_s_array;
static PyObject *__pyx_n_s_array_interface;
static PyObject *__pyx_n_s_assertion;
static PyObject *__pyx_n_s_attrval;
static PyObject *__pyx_n_s_base;
static PyObject *__pyx_n_s_baseptr;
static PyObject *__pyx_n_s_bcast;
static PyObject *__pyx_kp_s_bcast_p2p;
static PyObject *__pyx_n_s_blocklength;
static PyObject *__pyx_n_s_blocklengths;
static PyObject *__pyx_n_s_bool;
static PyObject *__pyx_n_s_buf;
static PyObject *__pyx_n_s_buffer_info;
static PyObject *__pyx_n_s_cPickle;
static PyObject *__pyx_n_s_cStringIO;
static PyObject *__pyx_n_s_call;
static PyObject *__pyx_n_s_cancel_fn;
static PyObject *__pyx_kp_s_cannot_create_too_many_user_defi;
static PyObject *__pyx_n_s_cdatarep;
static PyObject *__pyx_n_s_char;
static PyObject *__pyx_n_s_cinfo;
static PyObject *__pyx_n_s_cline_in_traceback;
static PyObject *__pyx_n_s_color;
static PyObject *__pyx_n_s_comm;
static PyObject *__pyx_n_s_comm1;
static PyObject *__pyx_n_s_comm2;
static PyObject *__pyx_n_s_command;
static PyObject *__pyx_kp_s_commctx_inter;
static PyObject *__pyx_kp_s_commctx_intra;
static PyObject *__pyx_n_s_commute;
static PyObject *__pyx_n_s_compare;
static PyObject *__pyx_kp_s_compare_expecting_a_single_eleme;
static PyObject *__pyx_n_s_coords;
static PyObject *__pyx_n_s_copy_fn;
static PyObject *__pyx_n_s_count;
static PyObject *__pyx_n_s_cportname;
static PyObject *__pyx_n_s_csrvcname;
static PyObject *__pyx_n_s_cstring;
static PyObject *__pyx_n_s_dargs;
static PyObject *__pyx_n_s_data;
static PyObject *__pyx_n_s_datarep;
static PyObject *__pyx_n_s_datatype;
static PyObject *__pyx_n_s_datatypes;
static PyObject *__pyx_n_s_default;
static PyObject *__pyx_n_s_degrees;
static PyObject *__pyx_n_s_delete_fn;
static PyObject *__pyx_n_s_dest;
static PyObject *__pyx_n_s_destinations;
static PyObject *__pyx_n_s_destweights;
static PyObject *__pyx_n_s_dims;
static PyObject *__pyx_n_s_direction;
static PyObject *__pyx_n_s_disp;
static PyObject *__pyx_n_s_disp_unit;
static PyObject *__pyx_n_s_displacements;
static PyObject *__pyx_n_s_distribs;
static PyObject *__pyx_n_s_doc;
static PyObject *__pyx_n_s_doc_2;
static PyObject *__pyx_n_s_dtype;
static PyObject *__pyx_n_s_dummy_thread;
static PyObject *__pyx_n_s_dummy_thread_2;
static PyObject *__pyx_n_s_dumps;
static PyObject *__pyx_n_s_edges;
static PyObject *__pyx_kp_s_empty_weights_but_nonzero_degree;
static PyObject *__pyx_n_s_enter;
static PyObject *__pyx_n_s_eq;
static PyObject *__pyx_n_s_errcodes;
static PyObject *__pyx_n_s_errhandler;
static PyObject *__pyx_n_s_error;
static PyObject *__pyx_kp_s_error_class;
static PyObject *__pyx_n_s_error_class_2;
static PyObject *__pyx_kp_s_error_code;
static PyObject *__pyx_n_s_error_code_2;
static PyObject *__pyx_kp_s_error_code_d;
static PyObject *__pyx_kp_s_error_string;
static PyObject *__pyx_n_s_error_string_2;
static PyObject *__pyx_n_s_errorclass;
static PyObject *__pyx_n_s_errorcode;
static PyObject *__pyx_n_s_errors;
static PyObject *__pyx_n_s_etype;
static PyObject *__pyx_n_s_ex;
static PyObject *__pyx_n_s_exception;
static PyObject *__pyx_n_s_exit;
static PyObject *__pyx_kp_s_expecting_a_Cartesian_communicat;
static PyObject *__pyx_kp_s_expecting_a_distributed_graph_co;
static PyObject *__pyx_kp_s_expecting_a_general_graph_commun;
static PyObject *__pyx_kp_s_expecting_a_sequence_of_strings;
static PyObject *__pyx_kp_s_expecting_a_topology_communicato;
static PyObject *__pyx_kp_s_expecting_an_MPI_instance;
static PyObject *__pyx_kp_s_expecting_an_MPI_type_or_instanc;
static PyObject *__pyx_kp_s_expecting_an_intercommunicator;
static PyObject *__pyx_kp_s_expecting_an_intracommunicator;
static PyObject *__pyx_kp_s_expecting_d_items_got_d;
static PyObject *__pyx_kp_s_expecting_non_NULL_address;
static PyObject *__pyx_kp_s_expecting_non_negative_buffer_le;
static PyObject *__pyx_n_s_extent;
static PyObject *__pyx_n_s_extent_fn;
static PyObject *__pyx_n_s_f2py;
static PyObject *__pyx_n_s_fast_reduce;
static PyObject *__pyx_n_s_fatal;
static PyObject *__pyx_n_s_fd;
static PyObject *__pyx_n_s_file;
static PyObject *__pyx_n_s_filename;
static PyObject *__pyx_n_s_filetype;
static PyObject *__pyx_n_s_finalize;
static PyObject *__pyx_n_s_flag;
static PyObject *__pyx_n_s_flags;
static PyObject *__pyx_n_s_flush;
static PyObject *__pyx_n_s_free_fn;
static PyObject *__pyx_n_s_fromaddress;
static PyObject *__pyx_n_s_frombuffer;
static PyObject *__pyx_n_s_function;
static PyObject *__pyx_n_s_funneled;
static PyObject *__pyx_n_s_gather;
static PyObject *__pyx_n_s_ge;
static PyObject *__pyx_n_s_get;
static PyObject *__pyx_n_s_get_vendor;
static PyObject *__pyx_n_s_group;
static PyObject *__pyx_n_s_group1;
static PyObject *__pyx_n_s_group2;
static PyObject *__pyx_n_s_gsizes;
static PyObject *__pyx_n_s_gt;
static PyObject *__pyx_n_s_handleof;
static PyObject *__pyx_n_s_hash;
static PyObject *__pyx_n_s_high;
static PyObject *__pyx_n_s_i;
static PyObject *__pyx_n_s_idims;
static PyObject *__pyx_n_s_ierr;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_inbuf;
static PyObject *__pyx_n_s_index;
static PyObject *__pyx_kp_s_index_must_be_integer_or_slice;
static PyObject *__pyx_kp_s_index_out_of_range;
static PyObject *__pyx_n_s_info;
static PyObject *__pyx_n_s_init;
static PyObject *__pyx_n_s_initialize;
static PyObject *__pyx_n_s_inoutbuf;
static PyObject *__pyx_n_s_inoutedges;
static PyObject *__pyx_n_s_insert;
static PyObject *__pyx_n_s_int;
static PyObject *__pyx_kp_s_integer_d_does_not_fit_in_int;
static PyObject *__pyx_n_s_io;
static PyObject *__pyx_n_s_iprobe;
static PyObject *__pyx_n_s_items;
static PyObject *__pyx_n_s_itemsize;
static PyObject *__pyx_n_s_kargs;
static PyObject *__pyx_n_s_key;
static PyObject *__pyx_n_s_keys;
static PyObject *__pyx_n_s_keyval;
static PyObject *__pyx_n_s_keyval_registry;
static PyObject *__pyx_n_s_lb;
static PyObject *__pyx_n_s_le;
static PyObject *__pyx_n_s_level;
static PyObject *__pyx_n_s_load;
static PyObject *__pyx_n_s_loads;
static PyObject *__pyx_n_s_local_leader;
static PyObject *__pyx_n_s_location;
static PyObject *__pyx_n_s_lock_table;
static PyObject *__pyx_n_s_lock_type;
static PyObject *__pyx_n_s_lt;
static PyObject *__pyx_n_s_m;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_major;
static PyObject *__pyx_n_s_maxlen;
static PyObject *__pyx_n_s_maxprocs;
static PyObject *__pyx_n_s_mem;
static PyObject *__pyx_n_s_memory;
static PyObject *__pyx_kp_s_memory_allocation_size_too_large;
static PyObject *__pyx_kp_s_memory_allocation_with_negative;
static PyObject *__pyx_kp_s_memory_buffer_is_read_only;
static PyObject *__pyx_n_s_message;
static PyObject *__pyx_kp_s_message_buffer_is_None_but_count;
static PyObject *__pyx_kp_s_message_cannot_handle_diplacemen;
static PyObject *__pyx_kp_s_message_cannot_handle_diplacemen_2;
static PyObject *__pyx_kp_s_message_cannot_infer_count_buffe;
static PyObject *__pyx_kp_s_message_cannot_infer_count_datat;
static PyObject *__pyx_kp_s_message_cannot_infer_count_datat_2;
static PyObject *__pyx_kp_s_message_cannot_infer_count_numbe;
static PyObject *__pyx_kp_s_message_displacement_d_out_of_bo;
static PyObject *__pyx_kp_s_message_expecting_2_to_4_items;
static PyObject *__pyx_kp_s_message_expecting_buffer_or_list;
static PyObject *__pyx_kp_s_message_negative_count_d;
static PyObject *__pyx_kp_s_message_negative_diplacement_d;
static PyObject *__pyx_n_s_metaclass;
static PyObject *__pyx_n_s_micro;
static PyObject *__pyx_n_s_minor;
static PyObject *__pyx_kp_s_mismatch_in_inbuf_and_inoutbuf_M;
static PyObject *__pyx_kp_s_mismatch_in_inbuf_count_d_and_in;
static PyObject *__pyx_kp_s_mismatch_in_origin_and_compare_M;
static PyObject *__pyx_kp_s_mismatch_in_origin_and_result_MP;
static PyObject *__pyx_kp_s_mismatch_in_receive_count_d_and;
static PyObject *__pyx_kp_s_mismatch_in_receive_count_d_and_2;
static PyObject *__pyx_kp_s_mismatch_in_send_and_receive_MPI;
static PyObject *__pyx_kp_s_mismatch_in_send_count_d_and_rec;
static PyObject *__pyx_kp_s_mismatch_in_send_count_d_and_sum;
static PyObject *__pyx_kp_s_mismatch_in_send_count_d_receive;
static PyObject *__pyx_n_s_module;
static PyObject *__pyx_n_s_mpi4py;
static PyObject *__pyx_n_s_mpi4py_MPI;
static PyObject *__pyx_kp_s_mpi4py_MPI_Comm_pyx;
static PyObject *__pyx_kp_s_mpi4py_MPI_Datatype_pyx;
static PyObject *__pyx_kp_s_mpi4py_MPI_ExceptionP_pyx;
static PyObject *__pyx_kp_s_mpi4py_MPI_Exception_pyx;
static PyObject *__pyx_kp_s_mpi4py_MPI_File_pyx;
static PyObject *__pyx_kp_s_mpi4py_MPI_MPI_pyx;
static PyObject *__pyx_kp_s_mpi4py_MPI_asbuffer_pxi;
static PyObject *__pyx_kp_s_mpi4py_MPI_atimport_pxi;
static PyObject *__pyx_kp_s_mpi4py_MPI_commimpl_pxi;
static PyObject *__pyx_kp_s_mpi4py_MPI_typestr_pxi;
static PyObject *__pyx_kp_s_mpi4py_rc_s_unexpected_value_r;
static PyObject *__pyx_n_s_multiple;
static PyObject *__pyx_n_s_n;
static PyObject *__pyx_n_s_name;
static PyObject *__pyx_n_s_name_2;
static PyObject *__pyx_n_s_nbytes;
static PyObject *__pyx_n_s_ndarray;
static PyObject *__pyx_n_s_ndims;
static PyObject *__pyx_n_s_ne;
static PyObject *__pyx_n_s_neighbor_allgather;
static PyObject *__pyx_n_s_neighbor_alltoall;
static PyObject *__pyx_n_s_new;
static PyObject *__pyx_n_s_nlen;
static PyObject *__pyx_n_s_nnodes;
static PyObject *__pyx_n_s_no;
static PyObject *__pyx_n_s_nonzero;
static PyObject *__pyx_n_s_nopython;
static PyObject *__pyx_n_s_numpy;
static PyObject *__pyx_n_s_numpypy;
static PyObject *__pyx_n_s_numpypy_multiarray;
static PyObject *__pyx_n_s_ob_mpi;
static PyObject *__pyx_n_s_obj;
static PyObject *__pyx_n_s_offset;
static PyObject *__pyx_n_s_op;
static PyObject *__pyx_n_s_order;
static PyObject *__pyx_n_s_origin;
static PyObject *__pyx_kp_s_origin_expecting_a_single_elemen;
static PyObject *__pyx_n_s_other;
static PyObject *__pyx_n_s_outbuf;
static PyObject *__pyx_n_s_p;
static PyObject *__pyx_n_s_peer_comm;
static PyObject *__pyx_n_s_periods;
static PyObject *__pyx_n_s_pickle;
static PyObject *__pyx_n_s_pop;
static PyObject *__pyx_n_s_port_name;
static PyObject *__pyx_n_s_position;
static PyObject *__pyx_n_s_prepare;
static PyObject *__pyx_n_s_print_exc;
static PyObject *__pyx_n_s_probe;
static PyObject *__pyx_n_s_property;
static PyObject *__pyx_n_s_protocol;
static PyObject *__pyx_n_s_provided;
static PyObject *__pyx_n_s_psizes;
static PyObject *__pyx_n_s_ptr;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_qualname;
static PyObject *__pyx_n_s_query_fn;
static PyObject *__pyx_n_s_r;
static PyObject *__pyx_n_s_range;
static PyObject *__pyx_n_s_rank;
static PyObject *__pyx_n_s_ranks;
static PyObject *__pyx_n_s_ranks1;
static PyObject *__pyx_n_s_rc;
static PyObject *__pyx_n_s_rd;
static PyObject *__pyx_n_s_read_fn;
static PyObject *__pyx_n_s_readonly;
static PyObject *__pyx_n_s_recv;
static PyObject *__pyx_n_s_recv_mprobe;
static PyObject *__pyx_n_s_recvbuf;
static PyObject *__pyx_n_s_recvcounts;
static PyObject *__pyx_n_s_recvtag;
static PyObject *__pyx_n_s_release;
static PyObject *__pyx_n_s_remain_dims;
static PyObject *__pyx_n_s_remote_leader;
static PyObject *__pyx_n_s_reorder;
static PyObject *__pyx_n_s_repr;
static PyObject *__pyx_n_s_request;
static PyObject *__pyx_n_s_requests;
static PyObject *__pyx_n_s_required;
static PyObject *__pyx_n_s_result;
static PyObject *__pyx_kp_s_result_expecting_a_single_elemen;
static PyObject *__pyx_n_s_resultlen;
static PyObject *__pyx_n_s_root;
static PyObject *__pyx_n_s_scatter;
static PyObject *__pyx_n_s_self;
static PyObject *__pyx_n_s_sendbuf;
static PyObject *__pyx_n_s_sendobj;
static PyObject *__pyx_n_s_sendtag;
static PyObject *__pyx_n_s_serialized;
static PyObject *__pyx_n_s_service_name;
static PyObject *__pyx_n_s_set_abort_status;
static PyObject *__pyx_n_s_single;
static PyObject *__pyx_n_s_size;
static PyObject *__pyx_n_s_sizeof;
static PyObject *__pyx_n_s_sizes;
static PyObject *__pyx_kp_s_slice_length_does_not_match_buff;
static PyObject *__pyx_kp_s_slice_with_step_not_supported;
static PyObject *__pyx_n_s_source;
static PyObject *__pyx_n_s_sources;
static PyObject *__pyx_n_s_sourceweights;
static PyObject *__pyx_n_s_split_type;
static PyObject *__pyx_n_s_starts;
static PyObject *__pyx_n_s_state;
static PyObject *__pyx_n_s_staticmethod;
static PyObject *__pyx_n_s_status;
static PyObject *__pyx_n_s_statuses;
static PyObject *__pyx_n_s_stderr;
static PyObject *__pyx_n_s_str;
static PyObject *__pyx_n_s_stride;
static PyObject *__pyx_n_s_string;
static PyObject *__pyx_n_s_subsizes;
static PyObject *__pyx_n_s_subversion;
static PyObject *__pyx_n_s_sys;
static PyObject *__pyx_n_s_tag;
static PyObject *__pyx_n_s_target;
static PyObject *__pyx_n_s_target_disp;
static PyObject *__pyx_kp_s_target_expecting_3_items_at_most;
static PyObject *__pyx_kp_s_target_expecting_integral_or_lis;
static PyObject *__pyx_n_s_target_rank;
static PyObject *__pyx_n_s_tc;
static PyObject *__pyx_n_s_testall;
static PyObject *__pyx_n_s_testany;
static PyObject *__pyx_n_s_thread;
static PyObject *__pyx_n_s_thread_2;
static PyObject *__pyx_n_s_thread_level;
static PyObject *__pyx_n_s_threaded;
static PyObject *__pyx_n_s_threads;
static PyObject *__pyx_n_s_tmp;
static PyObject *__pyx_n_s_traceback;
static PyObject *__pyx_n_s_typeclass;
static PyObject *__pyx_n_s_typecode;
static PyObject *__pyx_n_s_typecode_2;
static PyObject *__pyx_n_s_typedict;
static PyObject *__pyx_n_s_typedict_c;
static PyObject *__pyx_n_s_typedict_f;
static PyObject *__pyx_kp_s_unorderable_type_s_s;
static PyObject *__pyx_n_s_value;
static PyObject *__pyx_n_s_version;
static PyObject *__pyx_n_s_waitall;
static PyObject *__pyx_n_s_waitany;
static PyObject *__pyx_n_s_warn;
static PyObject *__pyx_n_s_warnings;
static PyObject *__pyx_n_s_weights;
static PyObject *__pyx_n_s_whence;
static PyObject *__pyx_n_s_win;
static PyObject *__pyx_n_s_wr;
static PyObject *__pyx_n_s_write_fn;
static PyObject *__pyx_n_s_x;
static PyObject *__pyx_n_s_xs;
static PyObject *__pyx_n_s_y;
static PyObject *__pyx_n_s_yes;
static PyObject *__pyx_pf_6mpi4py_3MPI__set_abort_status(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_status); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6memory___cinit__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static void __pyx_pf_6mpi4py_3MPI_6memory_2__dealloc__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_4frombuffer(PyObject *__pyx_v_obj, int __pyx_v_readonly); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_6fromaddress(PyObject *__pyx_v_address, PyObject *__pyx_v_nbytes, int __pyx_v_readonly); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_7address___get__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_6nbytes___get__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_8readonly___get__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_8tobytes(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_10release(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6memory_12__getbuffer__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_14__getsegcount__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /* proto */
#endif
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_16__getreadbuffer__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
#endif
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_18__getwritebuffer__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /* proto */
#endif
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_20__len__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_22__getitem__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6memory_24__setitem__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6_p_mem___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_v_self); /* proto */
static void __pyx_pf_6mpi4py_3MPI_6_p_mem_2__dealloc__(struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_7_p_greq___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self, PyObject *__pyx_v_query_fn, PyObject *__pyx_v_free_fn, PyObject *__pyx_v_cancel_fn, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2_lock_table(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm); /* proto */
static int __pyx_pf_6mpi4py_3MPI_10_p_datarep___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, PyObject *__pyx_v_read_fn, PyObject *__pyx_v_write_fn, PyObject *__pyx_v_extent_fn); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_keyval___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn___get__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn_2__set__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn_4__del__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn___get__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn_2__set__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn_4__del__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9_p_keyval_8nopython___get__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_8nopython_2__set__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6mpi4py_3MPI_10_p_msg_p2p___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_10_p_msg_cco___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_11_p_msg_ccow___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_10_p_msg_rma___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9_p_msg_io___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Pickle___cinit__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Pickle_2__init__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_dumps, PyObject *__pyx_v_loads, PyObject *__pyx_v_protocol); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Pickle_4dumps(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Pickle_6loads(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Pickle_8PROTOCOL___get__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Pickle_8PROTOCOL_2__set__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_protocol); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_ierr); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_4__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_6__lt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_8__le__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_10__gt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_12__ge__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_14__hash__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_16__bool__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_18__int__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_20__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_22__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_24Get_error_code(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_26Get_error_class(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_28Get_error_string(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Get_error_class(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorcode); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Get_error_string(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorcode); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Add_error_class(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_10Add_error_code(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorclass); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_12Add_error_string(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorcode, PyObject *__pyx_v_string); /* proto */
static int __pyx_pf_6mpi4py_3MPI_10Errhandler___cinit__(struct PyMPIErrhandlerObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler); /* proto */
static void __pyx_pf_6mpi4py_3MPI_10Errhandler_2__dealloc__(struct PyMPIErrhandlerObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_4__richcmp__(struct PyMPIErrhandlerObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_10Errhandler_6__bool__(struct PyMPIErrhandlerObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_8Free(struct PyMPIErrhandlerObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_10py2f(struct PyMPIErrhandlerObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_12f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Datatype___cinit__(struct PyMPIDatatypeObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype); /* proto */
static void __pyx_pf_6mpi4py_3MPI_8Datatype_2__dealloc__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_4__richcmp__(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Datatype_6__bool__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8Get_size(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_4size___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_10Get_extent(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_6extent___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_2lb___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_2ub___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_12Dup(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_14Create_contiguous(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_16Create_vector(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count, int __pyx_v_blocklength, int __pyx_v_stride); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_18Create_hvector(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count, int __pyx_v_blocklength, MPI_Aint __pyx_v_stride); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_20Create_indexed(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_blocklengths, PyObject *__pyx_v_displacements); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_22Create_hindexed(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_blocklengths, PyObject *__pyx_v_displacements); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_24Create_indexed_block(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_blocklength, PyObject *__pyx_v_displacements); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_26Create_hindexed_block(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_blocklength, PyObject *__pyx_v_displacements); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_28Create_struct(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_blocklengths, PyObject *__pyx_v_displacements, PyObject *__pyx_v_datatypes); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_30Create_subarray(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_sizes, PyObject *__pyx_v_subsizes, PyObject *__pyx_v_starts, int __pyx_v_order); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_32Create_darray(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_size, int __pyx_v_rank, PyObject *__pyx_v_gsizes, PyObject *__pyx_v_distribs, PyObject *__pyx_v_dargs, PyObject *__pyx_v_psizes, int __pyx_v_order); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_34Create_f90_integer(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_r); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_36Create_f90_real(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_p, int __pyx_v_r); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_38Create_f90_complex(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_p, int __pyx_v_r); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_40Match_size(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_typeclass, int __pyx_v_size); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_42Commit(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_44Free(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_46Create_resized(struct PyMPIDatatypeObject *__pyx_v_self, MPI_Aint __pyx_v_lb, MPI_Aint __pyx_v_extent); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_48Get_true_extent(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_11true_extent___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_7true_lb___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_7true_ub___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_50Get_envelope(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8envelope___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_52Get_contents(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8contents___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_54decode(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8combiner___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8is_named___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_13is_predefined___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_56Pack(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_inbuf, PyObject *__pyx_v_outbuf, int __pyx_v_position, struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_58Unpack(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_inbuf, int __pyx_v_position, PyObject *__pyx_v_outbuf, struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_60Pack_size(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count, struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_62Pack_external(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_datarep, PyObject *__pyx_v_inbuf, PyObject *__pyx_v_outbuf, MPI_Aint __pyx_v_position); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_64Unpack_external(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_datarep, PyObject *__pyx_v_inbuf, MPI_Aint __pyx_v_position, PyObject *__pyx_v_outbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_66Pack_external_size(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_datarep, int __pyx_v_count); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_68Get_attr(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_70Set_attr(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_keyval, PyObject *__pyx_v_attrval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_72Delete_attr(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_74Create_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_76Free_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_78Get_name(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_80Set_name(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_4name___get__(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Datatype_4name_2__set__(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_82py2f(struct PyMPIDatatypeObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_84f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_14Get_address(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_location); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_16Aint_add(CYTHON_UNUSED PyObject *__pyx_self, MPI_Aint __pyx_v_base, MPI_Aint __pyx_v_disp); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_18Aint_diff(CYTHON_UNUSED PyObject *__pyx_self, MPI_Aint __pyx_v_addr1, MPI_Aint __pyx_v_addr2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_20_typecode(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPIDatatypeObject *__pyx_v_datatype); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Status___cinit__(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_2__richcmp__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_4Get_source(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_6Set_source(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_source); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_6source___get__(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Status_6source_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_8Get_tag(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_10Set_tag(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_3tag___get__(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Status_3tag_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_12Get_error(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_14Set_error(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_error); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_5error___get__(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Status_5error_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_16Get_count(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_5count___get__(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_18Get_elements(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_20Set_elements(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype, MPI_Count __pyx_v_count); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_22Is_cancelled(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_24Set_cancelled(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_flag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_9cancelled___get__(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_6Status_9cancelled_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_26py2f(struct PyMPIStatusObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_28f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static int __pyx_pf_6mpi4py_3MPI_7Request___cinit__(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIRequestObject *__pyx_v_request); /* proto */
static void __pyx_pf_6mpi4py_3MPI_7Request_2__dealloc__(struct PyMPIRequestObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_4__richcmp__(struct PyMPIRequestObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_7Request_6__bool__(struct PyMPIRequestObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_8Wait(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_10Test(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_12Free(struct PyMPIRequestObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_14Get_status(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_16Waitany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_18Testany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_20Waitall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_22Testall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_24Waitsome(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_26Testsome(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_28Cancel(struct PyMPIRequestObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_30py2f(struct PyMPIRequestObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_32f2py(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_34wait(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_36test(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_38waitany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_40testany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_42waitall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_44testall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Prequest___cinit__(struct PyMPIPrequestObject *__pyx_v_self, struct PyMPIRequestObject *__pyx_v_request); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Prequest_2Start(struct PyMPIPrequestObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Prequest_4Startall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Grequest___cinit__(struct PyMPIGrequestObject *__pyx_v_self, struct PyMPIRequestObject *__pyx_v_request); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Grequest_2Start(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_query_fn, PyObject *__pyx_v_free_fn, PyObject *__pyx_v_cancel_fn, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Grequest_4Complete(struct PyMPIGrequestObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_7Message___cinit__(struct PyMPIMessageObject *__pyx_v_self, struct PyMPIMessageObject *__pyx_v_message); /* proto */
static void __pyx_pf_6mpi4py_3MPI_7Message_2__dealloc__(struct PyMPIMessageObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_4__richcmp__(struct PyMPIMessageObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_7Message_6__bool__(struct PyMPIMessageObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_8Probe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_10Iprobe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_12Recv(struct PyMPIMessageObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_14Irecv(struct PyMPIMessageObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_16probe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_18iprobe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_20recv(struct PyMPIMessageObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_22irecv(struct PyMPIMessageObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_24py2f(struct PyMPIMessageObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_26f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Info___cinit__(struct PyMPIInfoObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static void __pyx_pf_6mpi4py_3MPI_4Info_2__dealloc__(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_4__richcmp__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Info_6__bool__(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_8Create(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_10Free(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_12Dup(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_14Get(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, int __pyx_v_maxlen); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_16Set(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_18Delete(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_20Get_nkeys(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_22Get_nthkey(struct PyMPIInfoObject *__pyx_v_self, int __pyx_v_n); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_24py2f(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_26f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_4Info_28__len__(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Info_30__contains__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_32__iter__(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_34__getitem__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Info_36__setitem__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Info_38__delitem__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_40get(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_default); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_42keys(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_44values(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_46items(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_48update(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_kwds); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_50copy(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_52clear(struct PyMPIInfoObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_2Op___cinit__(struct PyMPIOpObject *__pyx_v_self, struct PyMPIOpObject *__pyx_v_op); /* proto */
static void __pyx_pf_6mpi4py_3MPI_2Op_2__dealloc__(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_4__richcmp__(struct PyMPIOpObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_2Op_6__bool__(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_8__call__(struct PyMPIOpObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_10Create(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_function, int __pyx_v_commute); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_12Free(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_14Is_commutative(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_14is_commutative___get__(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_16Reduce_local(struct PyMPIOpObject *__pyx_v_self, PyObject *__pyx_v_inbuf, PyObject *__pyx_v_inoutbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_13is_predefined___get__(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_18py2f(struct PyMPIOpObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_20f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static int __pyx_pf_6mpi4py_3MPI_5Group___cinit__(struct PyMPIGroupObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group); /* proto */
static void __pyx_pf_6mpi4py_3MPI_5Group_2__dealloc__(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_4__richcmp__(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_5Group_6__bool__(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_8Get_size(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_4size___get__(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_10Get_rank(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_4rank___get__(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_12Translate_ranks(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, PyObject *__pyx_v_ranks1, struct PyMPIGroupObject *__pyx_v_group2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_14Compare(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_16Dup(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_18Union(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_20Intersection(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_22Difference(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_24Incl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_26Excl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_28Range_incl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_30Range_excl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_32Free(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_34py2f(struct PyMPIGroupObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_36f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Comm___cinit__(struct PyMPICommObject *__pyx_v_self, struct PyMPICommObject *__pyx_v_comm); /* proto */
static void __pyx_pf_6mpi4py_3MPI_4Comm_2__dealloc__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4__richcmp__(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Comm_6__bool__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8Get_group(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_5group___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_10Get_size(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4size___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_12Get_rank(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4rank___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_14Compare(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm1, struct PyMPICommObject *__pyx_v_comm2); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_16Clone(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_18Dup(struct PyMPICommObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_20Dup_with_info(struct PyMPICommObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_22Idup(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_24Create(struct PyMPICommObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_26Create_group(struct PyMPICommObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_28Split(struct PyMPICommObject *__pyx_v_self, int __pyx_v_color, int __pyx_v_key); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_30Split_type(struct PyMPICommObject *__pyx_v_self, int __pyx_v_split_type, int __pyx_v_key, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_32Free(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_34Set_info(struct PyMPICommObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_36Get_info(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4info___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Comm_4info_2__set__(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_38Send(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_40Recv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_42Sendrecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, int __pyx_v_dest, int __pyx_v_sendtag, PyObject *__pyx_v_recvbuf, int __pyx_v_source, int __pyx_v_recvtag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_44Sendrecv_replace(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_sendtag, int __pyx_v_source, int __pyx_v_recvtag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_46Isend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_48Irecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_50Probe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_52Iprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_54Mprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_56Improbe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_58Send_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_60Recv_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_62Bsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_64Ssend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_66Rsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_68Ibsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_70Issend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_72Irsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_74Bsend_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_76Ssend_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_78Rsend_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_80Barrier(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_82Bcast(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_84Gather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_86Gatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_88Scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_90Scatterv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_92Allgather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_94Allgatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_96Alltoall(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_98Alltoallv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_100Alltoallw(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_102Reduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_104Allreduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_106Reduce_scatter_block(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_108Reduce_scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, PyObject *__pyx_v_recvcounts, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_110Ibarrier(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_112Ibcast(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_114Igather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_116Igatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_118Iscatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_120Iscatterv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_122Iallgather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_124Iallgatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_126Ialltoall(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_128Ialltoallv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_130Ialltoallw(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_132Ireduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_134Iallreduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_136Ireduce_scatter_block(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_138Ireduce_scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, PyObject *__pyx_v_recvcounts, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_140Is_inter(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8is_inter___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_142Is_intra(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8is_intra___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_144Get_topology(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8topology___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_7is_topo___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_146Get_parent(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_148Disconnect(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_150Join(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_fd); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_152Get_attr(struct PyMPICommObject *__pyx_v_self, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_154Set_attr(struct PyMPICommObject *__pyx_v_self, int __pyx_v_keyval, PyObject *__pyx_v_attrval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_156Delete_attr(struct PyMPICommObject *__pyx_v_self, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_158Create_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_160Free_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_162Get_errhandler(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_164Set_errhandler(struct PyMPICommObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_166Call_errhandler(struct PyMPICommObject *__pyx_v_self, int __pyx_v_errorcode); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_168Abort(struct PyMPICommObject *__pyx_v_self, int __pyx_v_errorcode); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_170Get_name(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_172Set_name(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4name___get__(struct PyMPICommObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4Comm_4name_2__set__(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_174py2f(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_176f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_178send(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_180bsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_182ssend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_184recv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_186sendrecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, int __pyx_v_dest, int __pyx_v_sendtag, PyObject *__pyx_v_recvbuf, int __pyx_v_source, int __pyx_v_recvtag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_188isend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_190ibsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_192issend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_194irecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_196probe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_198iprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_200mprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_202improbe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_204barrier(struct PyMPICommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_206bcast(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_208gather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_210scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_212allgather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_214alltoall(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_216reduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_218allreduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9Intracomm___cinit__(struct PyMPIIntracommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_2Create_cart(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_periods, int __pyx_v_reorder); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_4Create_graph(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_edges, int __pyx_v_reorder); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_6Create_dist_graph_adjacent(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sources, PyObject *__pyx_v_destinations, PyObject *__pyx_v_sourceweights, PyObject *__pyx_v_destweights, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_reorder); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_8Create_dist_graph(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sources, PyObject *__pyx_v_degrees, PyObject *__pyx_v_destinations, PyObject *__pyx_v_weights, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_reorder); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_10Create_intercomm(struct PyMPIIntracommObject *__pyx_v_self, int __pyx_v_local_leader, struct PyMPIIntracommObject *__pyx_v_peer_comm, int __pyx_v_remote_leader, int __pyx_v_tag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_12Cart_map(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_periods); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_14Graph_map(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_edges); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_16Scan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_18Exscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_20Iscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_22Iexscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_24scan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_26exscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_28Spawn(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_command, PyObject *__pyx_v_args, int __pyx_v_maxprocs, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_root, PyObject *__pyx_v_errcodes); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_30Spawn_multiple(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_command, PyObject *__pyx_v_args, PyObject *__pyx_v_maxprocs, PyObject *__pyx_v_info, int __pyx_v_root, PyObject *__pyx_v_errcodes); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_32Accept(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_port_name, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_root); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_34Connect(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_port_name, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_root); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Topocomm___cinit__(struct PyMPITopocommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_7degrees___get__(struct PyMPITopocommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_8indegree___get__(struct PyMPITopocommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_9outdegree___get__(struct PyMPITopocommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_10inoutedges___get__(struct PyMPITopocommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_7inedges___get__(struct PyMPITopocommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_8outedges___get__(struct PyMPITopocommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_2Neighbor_allgather(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_4Neighbor_allgatherv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_6Neighbor_alltoall(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_8Neighbor_alltoallv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_10Neighbor_alltoallw(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_12Ineighbor_allgather(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_14Ineighbor_allgatherv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_16Ineighbor_alltoall(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_18Ineighbor_alltoallv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_20Ineighbor_alltoallw(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_22neighbor_allgather(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendobj); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_24neighbor_alltoall(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendobj); /* proto */
static int __pyx_pf_6mpi4py_3MPI_8Cartcomm___cinit__(struct PyMPICartcommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_2Get_dim(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_3dim___get__(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4ndim___get__(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4Get_topo(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4topo___get__(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4dims___get__(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_7periods___get__(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_6coords___get__(struct PyMPICartcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_6Get_cart_rank(struct PyMPICartcommObject *__pyx_v_self, PyObject *__pyx_v_coords); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_8Get_coords(struct PyMPICartcommObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_10Shift(struct PyMPICartcommObject *__pyx_v_self, int __pyx_v_direction, int __pyx_v_disp); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_12Sub(struct PyMPICartcommObject *__pyx_v_self, PyObject *__pyx_v_remain_dims); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_22Compute_dims(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nnodes, PyObject *__pyx_v_dims); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9Graphcomm___cinit__(struct PyMPIGraphcommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_2Get_dims(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_4dims___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_6nnodes___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_6nedges___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_4Get_topo(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_4topo___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_5index___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_5edges___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_6Get_neighbors_count(struct PyMPIGraphcommObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_10nneighbors___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_8Get_neighbors(struct PyMPIGraphcommObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_9neighbors___get__(struct PyMPIGraphcommObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_13Distgraphcomm___cinit__(struct PyMPIDistgraphcommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_13Distgraphcomm_2Get_dist_neighbors_count(struct PyMPIDistgraphcommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_13Distgraphcomm_4Get_dist_neighbors(struct PyMPIDistgraphcommObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_9Intercomm___cinit__(struct PyMPIIntercommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_2Get_remote_group(struct PyMPIIntercommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_12remote_group___get__(struct PyMPIIntercommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_4Get_remote_size(struct PyMPIIntercommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_11remote_size___get__(struct PyMPIIntercommObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_6Merge(struct PyMPIIntercommObject *__pyx_v_self, int __pyx_v_high); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_24Attach_buffer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_26Detach_buffer(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_28Open_port(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_30Close_port(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_port_name); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_32Publish_name(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_service_name, PyObject *__pyx_v_port_name, PyObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_34Unpublish_name(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_service_name, PyObject *__pyx_v_port_name, PyObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_36Lookup_name(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_service_name, PyObject *__pyx_v_info); /* proto */
static int __pyx_pf_6mpi4py_3MPI_3Win___cinit__(struct PyMPIWinObject *__pyx_v_self, struct PyMPIWinObject *__pyx_v_win); /* proto */
static void __pyx_pf_6mpi4py_3MPI_3Win_2__dealloc__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_4__richcmp__(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_3Win_6__bool__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_8Create(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_memory, int __pyx_v_disp_unit, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_10Allocate(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, MPI_Aint __pyx_v_size, int __pyx_v_disp_unit, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_12Allocate_shared(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, MPI_Aint __pyx_v_size, int __pyx_v_disp_unit, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_14Shared_query(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_16Create_dynamic(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_18Attach(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_memory); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_20Detach(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_memory); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_22Free(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_24Set_info(struct PyMPIWinObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_26Get_info(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_4info___get__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_3Win_4info_2__set__(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_28Get_group(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_5group___get__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_30Get_attr(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_32Set_attr(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_keyval, PyObject *__pyx_v_attrval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_34Delete_attr(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_36Create_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_38Free_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_keyval); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_5attrs___get__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_6flavor___get__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_5model___get__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_40tomemory(struct PyMPIWinObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_3Win_42__getbuffer__(struct PyMPIWinObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /* proto */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_3Win_44__getsegcount__(struct PyMPIWinObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /* proto */
#endif
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_3Win_46__getreadbuffer__(struct PyMPIWinObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp); /* proto */
#endif
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_3Win_48__getwritebuffer__(struct PyMPIWinObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp); /* proto */
#endif
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_50Put(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_52Get(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_54Accumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_56Get_accumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_58Fetch_and_op(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_target_rank, MPI_Aint __pyx_v_target_disp, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_60Compare_and_swap(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_compare, PyObject *__pyx_v_result, int __pyx_v_target_rank, MPI_Aint __pyx_v_target_disp); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_62Rput(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_64Rget(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_66Raccumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_68Rget_accumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_70Fence(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_assertion); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_72Start(struct PyMPIWinObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group, int __pyx_v_assertion); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_74Complete(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_76Post(struct PyMPIWinObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group, int __pyx_v_assertion); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_78Wait(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_80Test(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_82Lock(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank, int __pyx_v_lock_type, int __pyx_v_assertion); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_84Unlock(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_86Lock_all(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_assertion); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_88Unlock_all(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_90Flush(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_92Flush_all(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_94Flush_local(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_96Flush_local_all(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_98Sync(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_100Get_errhandler(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_102Set_errhandler(struct PyMPIWinObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_104Call_errhandler(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_errorcode); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_106Get_name(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_108Set_name(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_4name___get__(struct PyMPIWinObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_3Win_4name_2__set__(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_110py2f(struct PyMPIWinObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_112f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4File___cinit__(struct PyMPIFileObject *__pyx_v_self, struct PyMPIFileObject *__pyx_v_file); /* proto */
static void __pyx_pf_6mpi4py_3MPI_4File_2__dealloc__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_4__richcmp__(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4File_6__bool__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_8Open(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIIntracommObject *__pyx_v_comm, PyObject *__pyx_v_filename, int __pyx_v_amode, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_10Close(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_12Delete(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_filename, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_14Set_size(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_size); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_16Preallocate(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_size); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_18Get_size(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_4size___get__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_20Get_amode(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_5amode___get__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_22Get_group(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_5group___get__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_24Set_info(struct PyMPIFileObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_26Get_info(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_4info___get__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4File_4info_2__set__(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_28Set_view(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_disp, struct PyMPIDatatypeObject *__pyx_v_etype, struct PyMPIDatatypeObject *__pyx_v_filetype, PyObject *__pyx_v_datarep, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_30Get_view(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_32Read_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_34Read_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_36Write_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_38Write_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_40Iread_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_42Iread_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_44Iwrite_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_46Iwrite_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_48Read(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_50Read_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_52Write(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_54Write_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_56Iread(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_58Iread_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_60Iwrite(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_62Iwrite_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_64Seek(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, int __pyx_v_whence); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_66Get_position(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_68Get_byte_offset(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_70Read_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_72Write_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_74Iread_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_76Iwrite_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_78Read_ordered(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_80Write_ordered(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_82Seek_shared(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, int __pyx_v_whence); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_84Get_position_shared(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_86Read_at_all_begin(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_88Read_at_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_90Write_at_all_begin(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_92Write_at_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_94Read_all_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_96Read_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_98Write_all_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_100Write_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_102Read_ordered_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_104Read_ordered_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_106Write_ordered_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_108Write_ordered_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_110Get_type_extent(struct PyMPIFileObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_112Set_atomicity(struct PyMPIFileObject *__pyx_v_self, int __pyx_v_flag); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_114Get_atomicity(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_9atomicity___get__(struct PyMPIFileObject *__pyx_v_self); /* proto */
static int __pyx_pf_6mpi4py_3MPI_4File_9atomicity_2__set__(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_116Sync(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_118Get_errhandler(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_120Set_errhandler(struct PyMPIFileObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_122Call_errhandler(struct PyMPIFileObject *__pyx_v_self, int __pyx_v_errorcode); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_124py2f(struct PyMPIFileObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_4File_126f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_38Register_datarep(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_datarep, PyObject *__pyx_v_read_fn, PyObject *__pyx_v_write_fn, PyObject *__pyx_v_extent_fn); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_40Alloc_mem(CYTHON_UNUSED PyObject *__pyx_self, MPI_Aint __pyx_v_size, struct PyMPIInfoObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_42Free_mem(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_mem); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_44Init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_46Finalize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_48Init_thread(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_required); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_50Query_thread(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_52Is_thread_main(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_54Is_initialized(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_56Is_finalized(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_58Get_version(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_60Get_library_version(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_62Get_processor_name(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_64Wtime(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_66Wtick(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_68Pcontrol(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_level); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_70get_vendor(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_72_sizeof(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_74_addressof(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_pf_6mpi4py_3MPI_76_handleof(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg); /* proto */
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Status(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Datatype(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Request(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Prequest(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Grequest(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Message(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Op(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Group(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Info(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Errhandler(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Comm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Intracomm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Topocomm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Cartcomm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Graphcomm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Distgraphcomm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Intercomm(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Win(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_File(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_memory(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_mem(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_greq(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_datarep(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_keyval(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_message(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_p2p(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_cco(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_ccow(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_rma(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_io(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6mpi4py_3MPI_Pickle(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_get = {0, &__pyx_n_s_get, 0, 0, 0};
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items = {0, &__pyx_n_s_items, 0, 0, 0};
static __Pyx_CachedCFunction __pyx_umethod_PyList_Type_index = {0, &__pyx_n_s_index, 0, 0, 0};
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_1;
static PyObject *__pyx_int_2;
static PyObject *__pyx_int_neg_1;
static int __pyx_k__26;
static int __pyx_k__27;
static struct PyMPIDatatypeObject *__pyx_k__28;
static int __pyx_k__29;
static int __pyx_k__30;
static int __pyx_k__31;
static int __pyx_k__32;
static int __pyx_k__33;
static int __pyx_k__34;
static int __pyx_k__35;
static int __pyx_k__36;
static struct PyMPIInfoObject *__pyx_k__38;
static int __pyx_k__39;
static int __pyx_k__40;
static int __pyx_k__41;
static int __pyx_k__42;
static int __pyx_k__43;
static int __pyx_k__44;
static int __pyx_k__45;
static int __pyx_k__46;
static int __pyx_k__47;
static int __pyx_k__48;
static int __pyx_k__49;
static int __pyx_k__50;
static int __pyx_k__51;
static int __pyx_k__52;
static int __pyx_k__53;
static int __pyx_k__54;
static int __pyx_k__55;
static int __pyx_k__56;
static struct PyMPIOpObject *__pyx_k__57;
static struct PyMPIOpObject *__pyx_k__58;
static struct PyMPIOpObject *__pyx_k__59;
static struct PyMPIOpObject *__pyx_k__60;
static struct PyMPIOpObject *__pyx_k__61;
static struct PyMPIOpObject *__pyx_k__62;
static struct PyMPIOpObject *__pyx_k__63;
static struct PyMPIOpObject *__pyx_k__64;
static int __pyx_k__65;
static int __pyx_k__66;
static int __pyx_k__67;
static int __pyx_k__68;
static int __pyx_k__69;
static int __pyx_k__70;
static int __pyx_k__71;
static int __pyx_k__72;
static int __pyx_k__73;
static int __pyx_k__74;
static int __pyx_k__75;
static int __pyx_k__76;
static int __pyx_k__77;
static int __pyx_k__78;
static PyObject *__pyx_k__79;
static PyObject *__pyx_k__80;
static struct PyMPIInfoObject *__pyx_k__82;
static struct PyMPIInfoObject *__pyx_k__83;
static struct PyMPIOpObject *__pyx_k__84;
static struct PyMPIOpObject *__pyx_k__85;
static struct PyMPIOpObject *__pyx_k__86;
static struct PyMPIOpObject *__pyx_k__87;
static PyObject *__pyx_k__88;
static PyObject *__pyx_k__89;
static struct PyMPIInfoObject *__pyx_k__90;
static PyObject *__pyx_k__92;
static struct PyMPIInfoObject *__pyx_k__93;
static struct PyMPIInfoObject *__pyx_k__94;
static struct PyMPIInfoObject *__pyx_k__102;
static PyObject *__pyx_k__103;
static PyObject *__pyx_k__104;
static PyObject *__pyx_k__105;
static struct PyMPIInfoObject *__pyx_k__106;
static struct PyMPIIntracommObject *__pyx_k__107;
static struct PyMPIInfoObject *__pyx_k__108;
static struct PyMPIIntracommObject *__pyx_k__109;
static struct PyMPIInfoObject *__pyx_k__110;
static struct PyMPIIntracommObject *__pyx_k__111;
static struct PyMPIInfoObject *__pyx_k__112;
static struct PyMPIIntracommObject *__pyx_k__113;
static struct PyMPIOpObject *__pyx_k__114;
static struct PyMPIOpObject *__pyx_k__115;
static struct PyMPIOpObject *__pyx_k__116;
static struct PyMPIOpObject *__pyx_k__117;
static struct PyMPIOpObject *__pyx_k__118;
static int __pyx_k__119;
static struct PyMPIInfoObject *__pyx_k__120;
static int __pyx_k__121;
static struct PyMPIInfoObject *__pyx_k__122;
static struct PyMPIInfoObject *__pyx_k__123;
static int __pyx_k__124;
static int __pyx_k__125;
static struct PyMPIInfoObject *__pyx_k__126;
static int __pyx_k__127;
static PyObject *__pyx_tuple_;
static PyObject *__pyx_tuple__2;
static PyObject *__pyx_tuple__3;
static PyObject *__pyx_tuple__4;
static PyObject *__pyx_tuple__5;
static PyObject *__pyx_tuple__6;
static PyObject *__pyx_tuple__7;
static PyObject *__pyx_tuple__8;
static PyObject *__pyx_tuple__9;
static PyObject *__pyx_slice__91;
static PyObject *__pyx_slice__96;
static PyObject *__pyx_tuple__10;
static PyObject *__pyx_tuple__11;
static PyObject *__pyx_tuple__12;
static PyObject *__pyx_tuple__13;
static PyObject *__pyx_tuple__14;
static PyObject *__pyx_tuple__15;
static PyObject *__pyx_tuple__16;
static PyObject *__pyx_tuple__17;
static PyObject *__pyx_tuple__18;
static PyObject *__pyx_tuple__19;
static PyObject *__pyx_tuple__20;
static PyObject *__pyx_tuple__21;
static PyObject *__pyx_tuple__22;
static PyObject *__pyx_tuple__24;
static PyObject *__pyx_tuple__25;
static PyObject *__pyx_tuple__37;
static PyObject *__pyx_tuple__81;
static PyObject *__pyx_tuple__95;
static PyObject *__pyx_tuple__97;
static PyObject *__pyx_tuple__98;
static PyObject *__pyx_tuple__99;
static PyObject *__pyx_tuple__100;
static PyObject *__pyx_tuple__101;
static PyObject *__pyx_tuple__128;
static PyObject *__pyx_tuple__129;
static PyObject *__pyx_tuple__130;
static PyObject *__pyx_tuple__132;
static PyObject *__pyx_tuple__134;
static PyObject *__pyx_tuple__136;
static PyObject *__pyx_tuple__138;
static PyObject *__pyx_tuple__139;
static PyObject *__pyx_tuple__141;
static PyObject *__pyx_tuple__143;
static PyObject *__pyx_tuple__145;
static PyObject *__pyx_tuple__147;
static PyObject *__pyx_tuple__149;
static PyObject *__pyx_tuple__151;
static PyObject *__pyx_tuple__153;
static PyObject *__pyx_tuple__155;
static PyObject *__pyx_tuple__157;
static PyObject *__pyx_tuple__159;
static PyObject *__pyx_tuple__161;
static PyObject *__pyx_tuple__163;
static PyObject *__pyx_tuple__165;
static PyObject *__pyx_tuple__167;
static PyObject *__pyx_tuple__169;
static PyObject *__pyx_tuple__171;
static PyObject *__pyx_tuple__173;
static PyObject *__pyx_tuple__175;
static PyObject *__pyx_tuple__177;
static PyObject *__pyx_tuple__179;
static PyObject *__pyx_tuple__181;
static PyObject *__pyx_tuple__183;
static PyObject *__pyx_tuple__185;
static PyObject *__pyx_tuple__187;
static PyObject *__pyx_tuple__189;
static PyObject *__pyx_tuple__191;
static PyObject *__pyx_tuple__193;
static PyObject *__pyx_tuple__195;
static PyObject *__pyx_tuple__197;
static PyObject *__pyx_tuple__199;
static PyObject *__pyx_tuple__201;
static PyObject *__pyx_tuple__203;
static PyObject *__pyx_tuple__205;
static PyObject *__pyx_tuple__207;
static PyObject *__pyx_tuple__211;
static PyObject *__pyx_tuple__213;
static PyObject *__pyx_tuple__215;
static PyObject *__pyx_tuple__217;
static PyObject *__pyx_tuple__219;
static PyObject *__pyx_tuple__221;
static PyObject *__pyx_tuple__223;
static PyObject *__pyx_tuple__225;
static PyObject *__pyx_tuple__229;
static PyObject *__pyx_tuple__231;
static PyObject *__pyx_tuple__233;
static PyObject *__pyx_tuple__235;
static PyObject *__pyx_tuple__237;
static PyObject *__pyx_codeobj__131;
static PyObject *__pyx_codeobj__133;
static PyObject *__pyx_codeobj__135;
static PyObject *__pyx_codeobj__137;
static PyObject *__pyx_codeobj__140;
static PyObject *__pyx_codeobj__142;
static PyObject *__pyx_codeobj__144;
static PyObject *__pyx_codeobj__146;
static PyObject *__pyx_codeobj__148;
static PyObject *__pyx_codeobj__150;
static PyObject *__pyx_codeobj__152;
static PyObject *__pyx_codeobj__154;
static PyObject *__pyx_codeobj__156;
static PyObject *__pyx_codeobj__158;
static PyObject *__pyx_codeobj__160;
static PyObject *__pyx_codeobj__162;
static PyObject *__pyx_codeobj__164;
static PyObject *__pyx_codeobj__166;
static PyObject *__pyx_codeobj__168;
static PyObject *__pyx_codeobj__170;
static PyObject *__pyx_codeobj__172;
static PyObject *__pyx_codeobj__174;
static PyObject *__pyx_codeobj__176;
static PyObject *__pyx_codeobj__178;
static PyObject *__pyx_codeobj__180;
static PyObject *__pyx_codeobj__182;
static PyObject *__pyx_codeobj__184;
static PyObject *__pyx_codeobj__186;
static PyObject *__pyx_codeobj__188;
static PyObject *__pyx_codeobj__190;
static PyObject *__pyx_codeobj__192;
static PyObject *__pyx_codeobj__194;
static PyObject *__pyx_codeobj__196;
static PyObject *__pyx_codeobj__198;
static PyObject *__pyx_codeobj__200;
static PyObject *__pyx_codeobj__202;
static PyObject *__pyx_codeobj__204;
static PyObject *__pyx_codeobj__206;
static PyObject *__pyx_codeobj__208;
static PyObject *__pyx_codeobj__209;
static PyObject *__pyx_codeobj__210;
static PyObject *__pyx_codeobj__212;
static PyObject *__pyx_codeobj__214;
static PyObject *__pyx_codeobj__216;
static PyObject *__pyx_codeobj__218;
static PyObject *__pyx_codeobj__220;
static PyObject *__pyx_codeobj__222;
static PyObject *__pyx_codeobj__224;
static PyObject *__pyx_codeobj__226;
static PyObject *__pyx_codeobj__227;
static PyObject *__pyx_codeobj__228;
static PyObject *__pyx_codeobj__230;
static PyObject *__pyx_codeobj__232;
static PyObject *__pyx_codeobj__234;
static PyObject *__pyx_codeobj__236;
static PyObject *__pyx_codeobj__238;
/* Late includes */

/* "mpi4py/MPI/atimport.pxi":45
 * options.errors = 1
 * 
 * cdef int warnOpt(object name, object value) except -1:             # <<<<<<<<<<<<<<
 *     cdef object warn
 *     from warnings import warn
 */

static int __pyx_f_6mpi4py_3MPI_warnOpt(PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_warn = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("warnOpt", 0);

  /* "mpi4py/MPI/atimport.pxi":47
 * cdef int warnOpt(object name, object value) except -1:
 *     cdef object warn
 *     from warnings import warn             # <<<<<<<<<<<<<<
 *     warn("mpi4py.rc: '%s': unexpected value '%r'" % (name, value))
 * 
 */
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/atimport.pxi":48
 *     cdef object warn
 *     from warnings import warn
 *     warn("mpi4py.rc: '%s': unexpected value '%r'" % (name, value))             # <<<<<<<<<<<<<<
 * 
 * cdef int getOptions(Options* opts) except -1:
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_name);
  __Pyx_GIVEREF(__pyx_v_name);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_name);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_value);
  __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_mpi4py_rc_s_unexpected_value_r, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(__pyx_v_warn);
  __pyx_t_1 = __pyx_v_warn; __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/atimport.pxi":45
 * options.errors = 1
 * 
 * cdef int warnOpt(object name, object value) except -1:             # <<<<<<<<<<<<<<
 *     cdef object warn
 *     from warnings import warn
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.warnOpt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":50
 *     warn("mpi4py.rc: '%s': unexpected value '%r'" % (name, value))
 * 
 * cdef int getOptions(Options* opts) except -1:             # <<<<<<<<<<<<<<
 *     cdef object rc
 *     opts.initialize = 1
 */

static int __pyx_f_6mpi4py_3MPI_getOptions(__pyx_t_6mpi4py_3MPI_Options *__pyx_v_opts) {
  PyObject *__pyx_v_rc = 0;
  PyObject *__pyx_v_initialize = 0;
  PyObject *__pyx_v_threads = 0;
  PyObject *__pyx_v_thread_level = 0;
  PyObject *__pyx_v_finalize = 0;
  PyObject *__pyx_v_fast_reduce = 0;
  PyObject *__pyx_v_recv_mprobe = 0;
  PyObject *__pyx_v_errors = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  __Pyx_RefNannySetupContext("getOptions", 0);

  /* "mpi4py/MPI/atimport.pxi":52
 * cdef int getOptions(Options* opts) except -1:
 *     cdef object rc
 *     opts.initialize = 1             # <<<<<<<<<<<<<<
 *     opts.threads = 1
 *     opts.thread_level = MPI_THREAD_MULTIPLE
 */
  __pyx_v_opts->initialize = 1;

  /* "mpi4py/MPI/atimport.pxi":53
 *     cdef object rc
 *     opts.initialize = 1
 *     opts.threads = 1             # <<<<<<<<<<<<<<
 *     opts.thread_level = MPI_THREAD_MULTIPLE
 *     opts.finalize = 1
 */
  __pyx_v_opts->threads = 1;

  /* "mpi4py/MPI/atimport.pxi":54
 *     opts.initialize = 1
 *     opts.threads = 1
 *     opts.thread_level = MPI_THREAD_MULTIPLE             # <<<<<<<<<<<<<<
 *     opts.finalize = 1
 *     opts.fast_reduce = 1
 */
  __pyx_v_opts->thread_level = MPI_THREAD_MULTIPLE;

  /* "mpi4py/MPI/atimport.pxi":55
 *     opts.threads = 1
 *     opts.thread_level = MPI_THREAD_MULTIPLE
 *     opts.finalize = 1             # <<<<<<<<<<<<<<
 *     opts.fast_reduce = 1
 *     opts.recv_mprobe = 1
 */
  __pyx_v_opts->finalize = 1;

  /* "mpi4py/MPI/atimport.pxi":56
 *     opts.thread_level = MPI_THREAD_MULTIPLE
 *     opts.finalize = 1
 *     opts.fast_reduce = 1             # <<<<<<<<<<<<<<
 *     opts.recv_mprobe = 1
 *     opts.errors = 1
 */
  __pyx_v_opts->fast_reduce = 1;

  /* "mpi4py/MPI/atimport.pxi":57
 *     opts.finalize = 1
 *     opts.fast_reduce = 1
 *     opts.recv_mprobe = 1             # <<<<<<<<<<<<<<
 *     opts.errors = 1
 *     try: from mpi4py import rc
 */
  __pyx_v_opts->recv_mprobe = 1;

  /* "mpi4py/MPI/atimport.pxi":58
 *     opts.fast_reduce = 1
 *     opts.recv_mprobe = 1
 *     opts.errors = 1             # <<<<<<<<<<<<<<
 *     try: from mpi4py import rc
 *     except: return 0
 */
  __pyx_v_opts->errors = 1;

  /* "mpi4py/MPI/atimport.pxi":59
 *     opts.recv_mprobe = 1
 *     opts.errors = 1
 *     try: from mpi4py import rc             # <<<<<<<<<<<<<<
 *     except: return 0
 *     #
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
      __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 59, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_n_s_rc);
      __Pyx_GIVEREF(__pyx_n_s_rc);
      PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_rc);
      __pyx_t_5 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_4, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 59, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_rc); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 59, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_rc = __pyx_t_4;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/atimport.pxi":60
 *     opts.errors = 1
 *     try: from mpi4py import rc
 *     except: return 0             # <<<<<<<<<<<<<<
 *     #
 *     cdef object initialize = True
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.getOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(9, 60, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_r = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L6_except_return;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/atimport.pxi":59
 *     opts.recv_mprobe = 1
 *     opts.errors = 1
 *     try: from mpi4py import rc             # <<<<<<<<<<<<<<
 *     except: return 0
 *     #
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":62
 *     except: return 0
 *     #
 *     cdef object initialize = True             # <<<<<<<<<<<<<<
 *     cdef object threads = True
 *     cdef object thread_level = 'multiple'
 */
  __Pyx_INCREF(Py_True);
  __pyx_v_initialize = Py_True;

  /* "mpi4py/MPI/atimport.pxi":63
 *     #
 *     cdef object initialize = True
 *     cdef object threads = True             # <<<<<<<<<<<<<<
 *     cdef object thread_level = 'multiple'
 *     cdef object finalize = None
 */
  __Pyx_INCREF(Py_True);
  __pyx_v_threads = Py_True;

  /* "mpi4py/MPI/atimport.pxi":64
 *     cdef object initialize = True
 *     cdef object threads = True
 *     cdef object thread_level = 'multiple'             # <<<<<<<<<<<<<<
 *     cdef object finalize = None
 *     cdef object fast_reduce = True
 */
  __Pyx_INCREF(__pyx_n_s_multiple);
  __pyx_v_thread_level = __pyx_n_s_multiple;

  /* "mpi4py/MPI/atimport.pxi":65
 *     cdef object threads = True
 *     cdef object thread_level = 'multiple'
 *     cdef object finalize = None             # <<<<<<<<<<<<<<
 *     cdef object fast_reduce = True
 *     cdef object recv_mprobe = True
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_finalize = Py_None;

  /* "mpi4py/MPI/atimport.pxi":66
 *     cdef object thread_level = 'multiple'
 *     cdef object finalize = None
 *     cdef object fast_reduce = True             # <<<<<<<<<<<<<<
 *     cdef object recv_mprobe = True
 *     cdef object errors = 'exception'
 */
  __Pyx_INCREF(Py_True);
  __pyx_v_fast_reduce = Py_True;

  /* "mpi4py/MPI/atimport.pxi":67
 *     cdef object finalize = None
 *     cdef object fast_reduce = True
 *     cdef object recv_mprobe = True             # <<<<<<<<<<<<<<
 *     cdef object errors = 'exception'
 *     try: initialize = rc.initialize
 */
  __Pyx_INCREF(Py_True);
  __pyx_v_recv_mprobe = Py_True;

  /* "mpi4py/MPI/atimport.pxi":68
 *     cdef object fast_reduce = True
 *     cdef object recv_mprobe = True
 *     cdef object errors = 'exception'             # <<<<<<<<<<<<<<
 *     try: initialize = rc.initialize
 *     except: pass
 */
  __Pyx_INCREF(__pyx_n_s_exception);
  __pyx_v_errors = __pyx_n_s_exception;

  /* "mpi4py/MPI/atimport.pxi":69
 *     cdef object recv_mprobe = True
 *     cdef object errors = 'exception'
 *     try: initialize = rc.initialize             # <<<<<<<<<<<<<<
 *     except: pass
 *     try: threads = rc.threads
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_1);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_initialize); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 69, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_initialize, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L16_try_end;
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":70
 *     cdef object errors = 'exception'
 *     try: initialize = rc.initialize
 *     except: pass             # <<<<<<<<<<<<<<
 *     try: threads = rc.threads
 *     except: pass
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L12_exception_handled;
    }
    __pyx_L12_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    __pyx_L16_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":71
 *     try: initialize = rc.initialize
 *     except: pass
 *     try: threads = rc.threads             # <<<<<<<<<<<<<<
 *     except: pass
 *     try: threads = rc.threaded # backward
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_threads); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 71, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_threads, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L22_try_end;
    __pyx_L17_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":72
 *     except: pass
 *     try: threads = rc.threads
 *     except: pass             # <<<<<<<<<<<<<<
 *     try: threads = rc.threaded # backward
 *     except: pass               # compatibility
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L18_exception_handled;
    }
    __pyx_L18_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L22_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":73
 *     try: threads = rc.threads
 *     except: pass
 *     try: threads = rc.threaded # backward             # <<<<<<<<<<<<<<
 *     except: pass               # compatibility
 *     try: thread_level = rc.thread_level
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_1);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_threaded); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 73, __pyx_L23_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_threads, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L28_try_end;
    __pyx_L23_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":74
 *     except: pass
 *     try: threads = rc.threaded # backward
 *     except: pass               # compatibility             # <<<<<<<<<<<<<<
 *     try: thread_level = rc.thread_level
 *     except: pass
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L24_exception_handled;
    }
    __pyx_L24_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    __pyx_L28_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":75
 *     try: threads = rc.threaded # backward
 *     except: pass               # compatibility
 *     try: thread_level = rc.thread_level             # <<<<<<<<<<<<<<
 *     except: pass
 *     try: finalize = rc.finalize
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_thread_level); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 75, __pyx_L29_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_thread_level, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L34_try_end;
    __pyx_L29_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":76
 *     except: pass               # compatibility
 *     try: thread_level = rc.thread_level
 *     except: pass             # <<<<<<<<<<<<<<
 *     try: finalize = rc.finalize
 *     except: pass
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L30_exception_handled;
    }
    __pyx_L30_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L34_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":77
 *     try: thread_level = rc.thread_level
 *     except: pass
 *     try: finalize = rc.finalize             # <<<<<<<<<<<<<<
 *     except: pass
 *     try: fast_reduce = rc.fast_reduce
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_1);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_finalize); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 77, __pyx_L35_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_finalize, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L40_try_end;
    __pyx_L35_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":78
 *     except: pass
 *     try: finalize = rc.finalize
 *     except: pass             # <<<<<<<<<<<<<<
 *     try: fast_reduce = rc.fast_reduce
 *     except: pass
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L36_exception_handled;
    }
    __pyx_L36_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    __pyx_L40_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":79
 *     try: finalize = rc.finalize
 *     except: pass
 *     try: fast_reduce = rc.fast_reduce             # <<<<<<<<<<<<<<
 *     except: pass
 *     try: recv_mprobe = rc.recv_mprobe
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_fast_reduce); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 79, __pyx_L41_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_fast_reduce, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L46_try_end;
    __pyx_L41_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":80
 *     except: pass
 *     try: fast_reduce = rc.fast_reduce
 *     except: pass             # <<<<<<<<<<<<<<
 *     try: recv_mprobe = rc.recv_mprobe
 *     except: pass
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L42_exception_handled;
    }
    __pyx_L42_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L46_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":81
 *     try: fast_reduce = rc.fast_reduce
 *     except: pass
 *     try: recv_mprobe = rc.recv_mprobe             # <<<<<<<<<<<<<<
 *     except: pass
 *     try: errors = rc.errors
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_2, &__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_1);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_recv_mprobe); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 81, __pyx_L47_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_recv_mprobe, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L52_try_end;
    __pyx_L47_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":82
 *     except: pass
 *     try: recv_mprobe = rc.recv_mprobe
 *     except: pass             # <<<<<<<<<<<<<<
 *     try: errors = rc.errors
 *     except: pass
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L48_exception_handled;
    }
    __pyx_L48_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_2, __pyx_t_1);
    __pyx_L52_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":83
 *     try: recv_mprobe = rc.recv_mprobe
 *     except: pass
 *     try: errors = rc.errors             # <<<<<<<<<<<<<<
 *     except: pass
 *     #
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_rc, __pyx_n_s_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 83, __pyx_L53_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_errors, __pyx_t_6);
      __pyx_t_6 = 0;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L58_try_end;
    __pyx_L53_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/atimport.pxi":84
 *     except: pass
 *     try: errors = rc.errors
 *     except: pass             # <<<<<<<<<<<<<<
 *     #
 *     if initialize in (True, 'yes'):
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L54_exception_handled;
    }
    __pyx_L54_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L58_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":86
 *     except: pass
 *     #
 *     if initialize in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.initialize = 1
 *     elif initialize in (False, 'no'):
 */
  __Pyx_INCREF(__pyx_v_initialize);
  __pyx_t_6 = __pyx_v_initialize;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 86, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 86, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L60_bool_binop_done;
  }
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_yes, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 86, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_8;
  __pyx_L60_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":87
 *     #
 *     if initialize in (True, 'yes'):
 *         opts.initialize = 1             # <<<<<<<<<<<<<<
 *     elif initialize in (False, 'no'):
 *         opts.initialize = 0
 */
    __pyx_v_opts->initialize = 1;

    /* "mpi4py/MPI/atimport.pxi":86
 *     except: pass
 *     #
 *     if initialize in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.initialize = 1
 *     elif initialize in (False, 'no'):
 */
    goto __pyx_L59;
  }

  /* "mpi4py/MPI/atimport.pxi":88
 *     if initialize in (True, 'yes'):
 *         opts.initialize = 1
 *     elif initialize in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.initialize = 0
 *     else:
 */
  __Pyx_INCREF(__pyx_v_initialize);
  __pyx_t_6 = __pyx_v_initialize;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 88, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_8 = __pyx_t_7;
    goto __pyx_L62_bool_binop_done;
  }
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_no, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 88, __pyx_L1_error)
  __pyx_t_8 = __pyx_t_7;
  __pyx_L62_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = (__pyx_t_8 != 0);
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":89
 *         opts.initialize = 1
 *     elif initialize in (False, 'no'):
 *         opts.initialize = 0             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("initialize", initialize)
 */
    __pyx_v_opts->initialize = 0;

    /* "mpi4py/MPI/atimport.pxi":88
 *     if initialize in (True, 'yes'):
 *         opts.initialize = 1
 *     elif initialize in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.initialize = 0
 *     else:
 */
    goto __pyx_L59;
  }

  /* "mpi4py/MPI/atimport.pxi":91
 *         opts.initialize = 0
 *     else:
 *         warnOpt("initialize", initialize)             # <<<<<<<<<<<<<<
 *     #
 *     if threads in (True, 'yes'):
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_initialize, __pyx_v_initialize); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 91, __pyx_L1_error)
  }
  __pyx_L59:;

  /* "mpi4py/MPI/atimport.pxi":93
 *         warnOpt("initialize", initialize)
 *     #
 *     if threads in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.threads = 1
 *     elif threads in (False, 'no'):
 */
  __Pyx_INCREF(__pyx_v_threads);
  __pyx_t_6 = __pyx_v_threads;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 93, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L65_bool_binop_done;
  }
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_yes, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 93, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_8;
  __pyx_L65_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":94
 *     #
 *     if threads in (True, 'yes'):
 *         opts.threads = 1             # <<<<<<<<<<<<<<
 *     elif threads in (False, 'no'):
 *         opts.threads = 0
 */
    __pyx_v_opts->threads = 1;

    /* "mpi4py/MPI/atimport.pxi":93
 *         warnOpt("initialize", initialize)
 *     #
 *     if threads in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.threads = 1
 *     elif threads in (False, 'no'):
 */
    goto __pyx_L64;
  }

  /* "mpi4py/MPI/atimport.pxi":95
 *     if threads in (True, 'yes'):
 *         opts.threads = 1
 *     elif threads in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.threads = 0
 *     else:
 */
  __Pyx_INCREF(__pyx_v_threads);
  __pyx_t_6 = __pyx_v_threads;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 95, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_8 = __pyx_t_7;
    goto __pyx_L67_bool_binop_done;
  }
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_no, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 95, __pyx_L1_error)
  __pyx_t_8 = __pyx_t_7;
  __pyx_L67_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = (__pyx_t_8 != 0);
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":96
 *         opts.threads = 1
 *     elif threads in (False, 'no'):
 *         opts.threads = 0             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("threads", threads)
 */
    __pyx_v_opts->threads = 0;

    /* "mpi4py/MPI/atimport.pxi":95
 *     if threads in (True, 'yes'):
 *         opts.threads = 1
 *     elif threads in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.threads = 0
 *     else:
 */
    goto __pyx_L64;
  }

  /* "mpi4py/MPI/atimport.pxi":98
 *         opts.threads = 0
 *     else:
 *         warnOpt("threads", threads)             # <<<<<<<<<<<<<<
 *     #
 *     if thread_level == 'single':
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_threads, __pyx_v_threads); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 98, __pyx_L1_error)
  }
  __pyx_L64:;

  /* "mpi4py/MPI/atimport.pxi":100
 *         warnOpt("threads", threads)
 *     #
 *     if thread_level == 'single':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_SINGLE
 *     elif thread_level == 'funneled':
 */
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_thread_level, __pyx_n_s_single, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 100, __pyx_L1_error)
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":101
 *     #
 *     if thread_level == 'single':
 *         opts.thread_level = MPI_THREAD_SINGLE             # <<<<<<<<<<<<<<
 *     elif thread_level == 'funneled':
 *         opts.thread_level = MPI_THREAD_FUNNELED
 */
    __pyx_v_opts->thread_level = MPI_THREAD_SINGLE;

    /* "mpi4py/MPI/atimport.pxi":100
 *         warnOpt("threads", threads)
 *     #
 *     if thread_level == 'single':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_SINGLE
 *     elif thread_level == 'funneled':
 */
    goto __pyx_L69;
  }

  /* "mpi4py/MPI/atimport.pxi":102
 *     if thread_level == 'single':
 *         opts.thread_level = MPI_THREAD_SINGLE
 *     elif thread_level == 'funneled':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_FUNNELED
 *     elif thread_level == 'serialized':
 */
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_thread_level, __pyx_n_s_funneled, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 102, __pyx_L1_error)
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":103
 *         opts.thread_level = MPI_THREAD_SINGLE
 *     elif thread_level == 'funneled':
 *         opts.thread_level = MPI_THREAD_FUNNELED             # <<<<<<<<<<<<<<
 *     elif thread_level == 'serialized':
 *         opts.thread_level = MPI_THREAD_SERIALIZED
 */
    __pyx_v_opts->thread_level = MPI_THREAD_FUNNELED;

    /* "mpi4py/MPI/atimport.pxi":102
 *     if thread_level == 'single':
 *         opts.thread_level = MPI_THREAD_SINGLE
 *     elif thread_level == 'funneled':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_FUNNELED
 *     elif thread_level == 'serialized':
 */
    goto __pyx_L69;
  }

  /* "mpi4py/MPI/atimport.pxi":104
 *     elif thread_level == 'funneled':
 *         opts.thread_level = MPI_THREAD_FUNNELED
 *     elif thread_level == 'serialized':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_SERIALIZED
 *     elif thread_level == 'multiple':
 */
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_thread_level, __pyx_n_s_serialized, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 104, __pyx_L1_error)
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":105
 *         opts.thread_level = MPI_THREAD_FUNNELED
 *     elif thread_level == 'serialized':
 *         opts.thread_level = MPI_THREAD_SERIALIZED             # <<<<<<<<<<<<<<
 *     elif thread_level == 'multiple':
 *         opts.thread_level = MPI_THREAD_MULTIPLE
 */
    __pyx_v_opts->thread_level = MPI_THREAD_SERIALIZED;

    /* "mpi4py/MPI/atimport.pxi":104
 *     elif thread_level == 'funneled':
 *         opts.thread_level = MPI_THREAD_FUNNELED
 *     elif thread_level == 'serialized':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_SERIALIZED
 *     elif thread_level == 'multiple':
 */
    goto __pyx_L69;
  }

  /* "mpi4py/MPI/atimport.pxi":106
 *     elif thread_level == 'serialized':
 *         opts.thread_level = MPI_THREAD_SERIALIZED
 *     elif thread_level == 'multiple':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_MULTIPLE
 *     else:
 */
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_v_thread_level, __pyx_n_s_multiple, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 106, __pyx_L1_error)
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":107
 *         opts.thread_level = MPI_THREAD_SERIALIZED
 *     elif thread_level == 'multiple':
 *         opts.thread_level = MPI_THREAD_MULTIPLE             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("thread_level", thread_level)
 */
    __pyx_v_opts->thread_level = MPI_THREAD_MULTIPLE;

    /* "mpi4py/MPI/atimport.pxi":106
 *     elif thread_level == 'serialized':
 *         opts.thread_level = MPI_THREAD_SERIALIZED
 *     elif thread_level == 'multiple':             # <<<<<<<<<<<<<<
 *         opts.thread_level = MPI_THREAD_MULTIPLE
 *     else:
 */
    goto __pyx_L69;
  }

  /* "mpi4py/MPI/atimport.pxi":109
 *         opts.thread_level = MPI_THREAD_MULTIPLE
 *     else:
 *         warnOpt("thread_level", thread_level)             # <<<<<<<<<<<<<<
 *     #
 *     if finalize is None:
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_thread_level, __pyx_v_thread_level); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 109, __pyx_L1_error)
  }
  __pyx_L69:;

  /* "mpi4py/MPI/atimport.pxi":111
 *         warnOpt("thread_level", thread_level)
 *     #
 *     if finalize is None:             # <<<<<<<<<<<<<<
 *         opts.finalize = opts.initialize
 *     elif finalize in (True, 'yes'):
 */
  __pyx_t_7 = (__pyx_v_finalize == Py_None);
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":112
 *     #
 *     if finalize is None:
 *         opts.finalize = opts.initialize             # <<<<<<<<<<<<<<
 *     elif finalize in (True, 'yes'):
 *         opts.finalize = 1
 */
    __pyx_t_9 = __pyx_v_opts->initialize;
    __pyx_v_opts->finalize = __pyx_t_9;

    /* "mpi4py/MPI/atimport.pxi":111
 *         warnOpt("thread_level", thread_level)
 *     #
 *     if finalize is None:             # <<<<<<<<<<<<<<
 *         opts.finalize = opts.initialize
 *     elif finalize in (True, 'yes'):
 */
    goto __pyx_L70;
  }

  /* "mpi4py/MPI/atimport.pxi":113
 *     if finalize is None:
 *         opts.finalize = opts.initialize
 *     elif finalize in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.finalize = 1
 *     elif finalize in (False, 'no'):
 */
  __Pyx_INCREF(__pyx_v_finalize);
  __pyx_t_6 = __pyx_v_finalize;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 113, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_8 = __pyx_t_7;
    goto __pyx_L71_bool_binop_done;
  }
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_yes, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 113, __pyx_L1_error)
  __pyx_t_8 = __pyx_t_7;
  __pyx_L71_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = (__pyx_t_8 != 0);
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":114
 *         opts.finalize = opts.initialize
 *     elif finalize in (True, 'yes'):
 *         opts.finalize = 1             # <<<<<<<<<<<<<<
 *     elif finalize in (False, 'no'):
 *         opts.finalize = 0
 */
    __pyx_v_opts->finalize = 1;

    /* "mpi4py/MPI/atimport.pxi":113
 *     if finalize is None:
 *         opts.finalize = opts.initialize
 *     elif finalize in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.finalize = 1
 *     elif finalize in (False, 'no'):
 */
    goto __pyx_L70;
  }

  /* "mpi4py/MPI/atimport.pxi":115
 *     elif finalize in (True, 'yes'):
 *         opts.finalize = 1
 *     elif finalize in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.finalize = 0
 *     else:
 */
  __Pyx_INCREF(__pyx_v_finalize);
  __pyx_t_6 = __pyx_v_finalize;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 115, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L73_bool_binop_done;
  }
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_no, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 115, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_8;
  __pyx_L73_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":116
 *         opts.finalize = 1
 *     elif finalize in (False, 'no'):
 *         opts.finalize = 0             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("finalize", finalize)
 */
    __pyx_v_opts->finalize = 0;

    /* "mpi4py/MPI/atimport.pxi":115
 *     elif finalize in (True, 'yes'):
 *         opts.finalize = 1
 *     elif finalize in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.finalize = 0
 *     else:
 */
    goto __pyx_L70;
  }

  /* "mpi4py/MPI/atimport.pxi":118
 *         opts.finalize = 0
 *     else:
 *         warnOpt("finalize", finalize)             # <<<<<<<<<<<<<<
 *     #
 *     if fast_reduce in (True, 'yes'):
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_finalize, __pyx_v_finalize); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 118, __pyx_L1_error)
  }
  __pyx_L70:;

  /* "mpi4py/MPI/atimport.pxi":120
 *         warnOpt("finalize", finalize)
 *     #
 *     if fast_reduce in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.fast_reduce = 1
 *     elif fast_reduce in (False, 'no'):
 */
  __Pyx_INCREF(__pyx_v_fast_reduce);
  __pyx_t_6 = __pyx_v_fast_reduce;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 120, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_8 = __pyx_t_7;
    goto __pyx_L76_bool_binop_done;
  }
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_yes, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 120, __pyx_L1_error)
  __pyx_t_8 = __pyx_t_7;
  __pyx_L76_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = (__pyx_t_8 != 0);
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":121
 *     #
 *     if fast_reduce in (True, 'yes'):
 *         opts.fast_reduce = 1             # <<<<<<<<<<<<<<
 *     elif fast_reduce in (False, 'no'):
 *         opts.fast_reduce = 0
 */
    __pyx_v_opts->fast_reduce = 1;

    /* "mpi4py/MPI/atimport.pxi":120
 *         warnOpt("finalize", finalize)
 *     #
 *     if fast_reduce in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.fast_reduce = 1
 *     elif fast_reduce in (False, 'no'):
 */
    goto __pyx_L75;
  }

  /* "mpi4py/MPI/atimport.pxi":122
 *     if fast_reduce in (True, 'yes'):
 *         opts.fast_reduce = 1
 *     elif fast_reduce in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.fast_reduce = 0
 *     else:
 */
  __Pyx_INCREF(__pyx_v_fast_reduce);
  __pyx_t_6 = __pyx_v_fast_reduce;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 122, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L78_bool_binop_done;
  }
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_no, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 122, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_8;
  __pyx_L78_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":123
 *         opts.fast_reduce = 1
 *     elif fast_reduce in (False, 'no'):
 *         opts.fast_reduce = 0             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("fast_reduce", fast_reduce)
 */
    __pyx_v_opts->fast_reduce = 0;

    /* "mpi4py/MPI/atimport.pxi":122
 *     if fast_reduce in (True, 'yes'):
 *         opts.fast_reduce = 1
 *     elif fast_reduce in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.fast_reduce = 0
 *     else:
 */
    goto __pyx_L75;
  }

  /* "mpi4py/MPI/atimport.pxi":125
 *         opts.fast_reduce = 0
 *     else:
 *         warnOpt("fast_reduce", fast_reduce)             # <<<<<<<<<<<<<<
 *     #
 *     if recv_mprobe in (True, 'yes'):
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_fast_reduce, __pyx_v_fast_reduce); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 125, __pyx_L1_error)
  }
  __pyx_L75:;

  /* "mpi4py/MPI/atimport.pxi":127
 *         warnOpt("fast_reduce", fast_reduce)
 *     #
 *     if recv_mprobe in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.recv_mprobe = 1 and USE_MATCHED_RECV
 *     elif recv_mprobe in (False, 'no'):
 */
  __Pyx_INCREF(__pyx_v_recv_mprobe);
  __pyx_t_6 = __pyx_v_recv_mprobe;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 127, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_8 = __pyx_t_7;
    goto __pyx_L81_bool_binop_done;
  }
  __pyx_t_7 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_yes, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(9, 127, __pyx_L1_error)
  __pyx_t_8 = __pyx_t_7;
  __pyx_L81_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = (__pyx_t_8 != 0);
  if (__pyx_t_7) {

    /* "mpi4py/MPI/atimport.pxi":128
 *     #
 *     if recv_mprobe in (True, 'yes'):
 *         opts.recv_mprobe = 1 and USE_MATCHED_RECV             # <<<<<<<<<<<<<<
 *     elif recv_mprobe in (False, 'no'):
 *         opts.recv_mprobe = 0
 */
    __pyx_v_opts->recv_mprobe = PyMPI_USE_MATCHED_RECV;

    /* "mpi4py/MPI/atimport.pxi":127
 *         warnOpt("fast_reduce", fast_reduce)
 *     #
 *     if recv_mprobe in (True, 'yes'):             # <<<<<<<<<<<<<<
 *         opts.recv_mprobe = 1 and USE_MATCHED_RECV
 *     elif recv_mprobe in (False, 'no'):
 */
    goto __pyx_L80;
  }

  /* "mpi4py/MPI/atimport.pxi":129
 *     if recv_mprobe in (True, 'yes'):
 *         opts.recv_mprobe = 1 and USE_MATCHED_RECV
 *     elif recv_mprobe in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.recv_mprobe = 0
 *     else:
 */
  __Pyx_INCREF(__pyx_v_recv_mprobe);
  __pyx_t_6 = __pyx_v_recv_mprobe;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, Py_False, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 129, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L83_bool_binop_done;
  }
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_no, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 129, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_8;
  __pyx_L83_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":130
 *         opts.recv_mprobe = 1 and USE_MATCHED_RECV
 *     elif recv_mprobe in (False, 'no'):
 *         opts.recv_mprobe = 0             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("recv_mprobe", recv_mprobe)
 */
    __pyx_v_opts->recv_mprobe = 0;

    /* "mpi4py/MPI/atimport.pxi":129
 *     if recv_mprobe in (True, 'yes'):
 *         opts.recv_mprobe = 1 and USE_MATCHED_RECV
 *     elif recv_mprobe in (False, 'no'):             # <<<<<<<<<<<<<<
 *         opts.recv_mprobe = 0
 *     else:
 */
    goto __pyx_L80;
  }

  /* "mpi4py/MPI/atimport.pxi":132
 *         opts.recv_mprobe = 0
 *     else:
 *         warnOpt("recv_mprobe", recv_mprobe)             # <<<<<<<<<<<<<<
 *     #
 *     if errors == 'default':
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_recv_mprobe, __pyx_v_recv_mprobe); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 132, __pyx_L1_error)
  }
  __pyx_L80:;

  /* "mpi4py/MPI/atimport.pxi":134
 *         warnOpt("recv_mprobe", recv_mprobe)
 *     #
 *     if errors == 'default':             # <<<<<<<<<<<<<<
 *         opts.errors = 0
 *     elif errors == 'exception':
 */
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_errors, __pyx_n_s_default, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 134, __pyx_L1_error)
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":135
 *     #
 *     if errors == 'default':
 *         opts.errors = 0             # <<<<<<<<<<<<<<
 *     elif errors == 'exception':
 *         opts.errors = 1
 */
    __pyx_v_opts->errors = 0;

    /* "mpi4py/MPI/atimport.pxi":134
 *         warnOpt("recv_mprobe", recv_mprobe)
 *     #
 *     if errors == 'default':             # <<<<<<<<<<<<<<
 *         opts.errors = 0
 *     elif errors == 'exception':
 */
    goto __pyx_L85;
  }

  /* "mpi4py/MPI/atimport.pxi":136
 *     if errors == 'default':
 *         opts.errors = 0
 *     elif errors == 'exception':             # <<<<<<<<<<<<<<
 *         opts.errors = 1
 *     elif errors == 'fatal':
 */
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_errors, __pyx_n_s_exception, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 136, __pyx_L1_error)
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":137
 *         opts.errors = 0
 *     elif errors == 'exception':
 *         opts.errors = 1             # <<<<<<<<<<<<<<
 *     elif errors == 'fatal':
 *         opts.errors = 2
 */
    __pyx_v_opts->errors = 1;

    /* "mpi4py/MPI/atimport.pxi":136
 *     if errors == 'default':
 *         opts.errors = 0
 *     elif errors == 'exception':             # <<<<<<<<<<<<<<
 *         opts.errors = 1
 *     elif errors == 'fatal':
 */
    goto __pyx_L85;
  }

  /* "mpi4py/MPI/atimport.pxi":138
 *     elif errors == 'exception':
 *         opts.errors = 1
 *     elif errors == 'fatal':             # <<<<<<<<<<<<<<
 *         opts.errors = 2
 *     else:
 */
  __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_errors, __pyx_n_s_fatal, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 138, __pyx_L1_error)
  if (__pyx_t_8) {

    /* "mpi4py/MPI/atimport.pxi":139
 *         opts.errors = 1
 *     elif errors == 'fatal':
 *         opts.errors = 2             # <<<<<<<<<<<<<<
 *     else:
 *         warnOpt("errors", errors)
 */
    __pyx_v_opts->errors = 2;

    /* "mpi4py/MPI/atimport.pxi":138
 *     elif errors == 'exception':
 *         opts.errors = 1
 *     elif errors == 'fatal':             # <<<<<<<<<<<<<<
 *         opts.errors = 2
 *     else:
 */
    goto __pyx_L85;
  }

  /* "mpi4py/MPI/atimport.pxi":141
 *         opts.errors = 2
 *     else:
 *         warnOpt("errors", errors)             # <<<<<<<<<<<<<<
 *     #
 *     return 0
 */
  /*else*/ {
    __pyx_t_9 = __pyx_f_6mpi4py_3MPI_warnOpt(__pyx_n_s_errors, __pyx_v_errors); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(9, 141, __pyx_L1_error)
  }
  __pyx_L85:;

  /* "mpi4py/MPI/atimport.pxi":143
 *         warnOpt("errors", errors)
 *     #
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":50
 *     warn("mpi4py.rc: '%s': unexpected value '%r'" % (name, value))
 * 
 * cdef int getOptions(Options* opts) except -1:             # <<<<<<<<<<<<<<
 *     cdef object rc
 *     opts.initialize = 1
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.getOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rc);
  __Pyx_XDECREF(__pyx_v_initialize);
  __Pyx_XDECREF(__pyx_v_threads);
  __Pyx_XDECREF(__pyx_v_thread_level);
  __Pyx_XDECREF(__pyx_v_finalize);
  __Pyx_XDECREF(__pyx_v_fast_reduce);
  __Pyx_XDECREF(__pyx_v_recv_mprobe);
  __Pyx_XDECREF(__pyx_v_errors);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":150
 *     int PyMPI_Commctx_finalize() nogil
 * 
 * cdef int bootstrap() except -1:             # <<<<<<<<<<<<<<
 *     # Get options from 'mpi4py.rc' module
 *     getOptions(&options)
 */

static int __pyx_f_6mpi4py_3MPI_bootstrap(void) {
  int __pyx_v_initialized;
  int __pyx_v_ierr;
  int __pyx_v_required;
  int __pyx_v_provided;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("bootstrap", 0);

  /* "mpi4py/MPI/atimport.pxi":152
 * cdef int bootstrap() except -1:
 *     # Get options from 'mpi4py.rc' module
 *     getOptions(&options)             # <<<<<<<<<<<<<<
 *     # Cleanup at (the very end of) Python exit
 *     if Py_AtExit(atexit) < 0:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_getOptions((&__pyx_v_6mpi4py_3MPI_options)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(9, 152, __pyx_L1_error)

  /* "mpi4py/MPI/atimport.pxi":154
 *     getOptions(&options)
 *     # Cleanup at (the very end of) Python exit
 *     if Py_AtExit(atexit) < 0:             # <<<<<<<<<<<<<<
 *         PySys_WriteStderr(b"warning: could not register "
 *                           b"cleanup with Py_AtExit()%s", b"\n")
 */
  __pyx_t_2 = ((Py_AtExit(__pyx_f_6mpi4py_3MPI_atexit) < 0) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/atimport.pxi":155
 *     # Cleanup at (the very end of) Python exit
 *     if Py_AtExit(atexit) < 0:
 *         PySys_WriteStderr(b"warning: could not register "             # <<<<<<<<<<<<<<
 *                           b"cleanup with Py_AtExit()%s", b"\n")
 *     # Do we have to initialize MPI?
 */
    PySys_WriteStderr(((char *)"warning: could not register cleanup with Py_AtExit()%s"), ((char *)"\n"));

    /* "mpi4py/MPI/atimport.pxi":154
 *     getOptions(&options)
 *     # Cleanup at (the very end of) Python exit
 *     if Py_AtExit(atexit) < 0:             # <<<<<<<<<<<<<<
 *         PySys_WriteStderr(b"warning: could not register "
 *                           b"cleanup with Py_AtExit()%s", b"\n")
 */
  }

  /* "mpi4py/MPI/atimport.pxi":158
 *                           b"cleanup with Py_AtExit()%s", b"\n")
 *     # Do we have to initialize MPI?
 *     cdef int initialized = 1             # <<<<<<<<<<<<<<
 *     <void>MPI_Initialized(&initialized)
 *     if initialized:
 */
  __pyx_v_initialized = 1;

  /* "mpi4py/MPI/atimport.pxi":159
 *     # Do we have to initialize MPI?
 *     cdef int initialized = 1
 *     <void>MPI_Initialized(&initialized)             # <<<<<<<<<<<<<<
 *     if initialized:
 *         options.finalize = 0
 */
  ((void)MPI_Initialized((&__pyx_v_initialized)));

  /* "mpi4py/MPI/atimport.pxi":160
 *     cdef int initialized = 1
 *     <void>MPI_Initialized(&initialized)
 *     if initialized:             # <<<<<<<<<<<<<<
 *         options.finalize = 0
 *         return 0
 */
  __pyx_t_2 = (__pyx_v_initialized != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/atimport.pxi":161
 *     <void>MPI_Initialized(&initialized)
 *     if initialized:
 *         options.finalize = 0             # <<<<<<<<<<<<<<
 *         return 0
 *     if not options.initialize:
 */
    __pyx_v_6mpi4py_3MPI_options.finalize = 0;

    /* "mpi4py/MPI/atimport.pxi":162
 *     if initialized:
 *         options.finalize = 0
 *         return 0             # <<<<<<<<<<<<<<
 *     if not options.initialize:
 *         return 0
 */
    __pyx_r = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/atimport.pxi":160
 *     cdef int initialized = 1
 *     <void>MPI_Initialized(&initialized)
 *     if initialized:             # <<<<<<<<<<<<<<
 *         options.finalize = 0
 *         return 0
 */
  }

  /* "mpi4py/MPI/atimport.pxi":163
 *         options.finalize = 0
 *         return 0
 *     if not options.initialize:             # <<<<<<<<<<<<<<
 *         return 0
 *     # MPI initialization
 */
  __pyx_t_2 = ((!(__pyx_v_6mpi4py_3MPI_options.initialize != 0)) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/atimport.pxi":164
 *         return 0
 *     if not options.initialize:
 *         return 0             # <<<<<<<<<<<<<<
 *     # MPI initialization
 *     cdef int ierr = MPI_SUCCESS
 */
    __pyx_r = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/atimport.pxi":163
 *         options.finalize = 0
 *         return 0
 *     if not options.initialize:             # <<<<<<<<<<<<<<
 *         return 0
 *     # MPI initialization
 */
  }

  /* "mpi4py/MPI/atimport.pxi":166
 *         return 0
 *     # MPI initialization
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef int required = MPI_THREAD_SINGLE
 *     cdef int provided = MPI_THREAD_SINGLE
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/atimport.pxi":167
 *     # MPI initialization
 *     cdef int ierr = MPI_SUCCESS
 *     cdef int required = MPI_THREAD_SINGLE             # <<<<<<<<<<<<<<
 *     cdef int provided = MPI_THREAD_SINGLE
 *     if options.threads:
 */
  __pyx_v_required = MPI_THREAD_SINGLE;

  /* "mpi4py/MPI/atimport.pxi":168
 *     cdef int ierr = MPI_SUCCESS
 *     cdef int required = MPI_THREAD_SINGLE
 *     cdef int provided = MPI_THREAD_SINGLE             # <<<<<<<<<<<<<<
 *     if options.threads:
 *         required = options.thread_level
 */
  __pyx_v_provided = MPI_THREAD_SINGLE;

  /* "mpi4py/MPI/atimport.pxi":169
 *     cdef int required = MPI_THREAD_SINGLE
 *     cdef int provided = MPI_THREAD_SINGLE
 *     if options.threads:             # <<<<<<<<<<<<<<
 *         required = options.thread_level
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)
 */
  __pyx_t_2 = (__pyx_v_6mpi4py_3MPI_options.threads != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/atimport.pxi":170
 *     cdef int provided = MPI_THREAD_SINGLE
 *     if options.threads:
 *         required = options.thread_level             # <<<<<<<<<<<<<<
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_options.thread_level;
    __pyx_v_required = __pyx_t_1;

    /* "mpi4py/MPI/atimport.pxi":171
 *     if options.threads:
 *         required = options.thread_level
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)             # <<<<<<<<<<<<<<
 *         if ierr != MPI_SUCCESS: raise RuntimeError(
 *             "MPI_Init_thread() failed [error code: %d]" % ierr)
 */
    __pyx_v_ierr = MPI_Init_thread(NULL, NULL, __pyx_v_required, (&__pyx_v_provided));

    /* "mpi4py/MPI/atimport.pxi":172
 *         required = options.thread_level
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(             # <<<<<<<<<<<<<<
 *             "MPI_Init_thread() failed [error code: %d]" % ierr)
 *     else:
 */
    __pyx_t_2 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
    if (unlikely(__pyx_t_2)) {

      /* "mpi4py/MPI/atimport.pxi":173
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(
 *             "MPI_Init_thread() failed [error code: %d]" % ierr)             # <<<<<<<<<<<<<<
 *     else:
 *         ierr = MPI_Init(NULL, NULL)
 */
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 173, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_MPI_Init_thread_failed_error_cod, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 173, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "mpi4py/MPI/atimport.pxi":172
 *         required = options.thread_level
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(             # <<<<<<<<<<<<<<
 *             "MPI_Init_thread() failed [error code: %d]" % ierr)
 *     else:
 */
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(9, 172, __pyx_L1_error)
    }

    /* "mpi4py/MPI/atimport.pxi":169
 *     cdef int required = MPI_THREAD_SINGLE
 *     cdef int provided = MPI_THREAD_SINGLE
 *     if options.threads:             # <<<<<<<<<<<<<<
 *         required = options.thread_level
 *         ierr = MPI_Init_thread(NULL, NULL, required, &provided)
 */
    goto __pyx_L6;
  }

  /* "mpi4py/MPI/atimport.pxi":175
 *             "MPI_Init_thread() failed [error code: %d]" % ierr)
 *     else:
 *         ierr = MPI_Init(NULL, NULL)             # <<<<<<<<<<<<<<
 *         if ierr != MPI_SUCCESS: raise RuntimeError(
 *             "MPI_Init() failed [error code: %d]" % ierr)
 */
  /*else*/ {
    __pyx_v_ierr = MPI_Init(NULL, NULL);

    /* "mpi4py/MPI/atimport.pxi":176
 *     else:
 *         ierr = MPI_Init(NULL, NULL)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(             # <<<<<<<<<<<<<<
 *             "MPI_Init() failed [error code: %d]" % ierr)
 *     return 0
 */
    __pyx_t_2 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
    if (unlikely(__pyx_t_2)) {

      /* "mpi4py/MPI/atimport.pxi":177
 *         ierr = MPI_Init(NULL, NULL)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(
 *             "MPI_Init() failed [error code: %d]" % ierr)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_MPI_Init_failed_error_code_d, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "mpi4py/MPI/atimport.pxi":176
 *     else:
 *         ierr = MPI_Init(NULL, NULL)
 *         if ierr != MPI_SUCCESS: raise RuntimeError(             # <<<<<<<<<<<<<<
 *             "MPI_Init() failed [error code: %d]" % ierr)
 *     return 0
 */
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(9, 176, __pyx_L1_error)
    }
  }
  __pyx_L6:;

  /* "mpi4py/MPI/atimport.pxi":178
 *         if ierr != MPI_SUCCESS: raise RuntimeError(
 *             "MPI_Init() failed [error code: %d]" % ierr)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int mpi_active() nogil:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":150
 *     int PyMPI_Commctx_finalize() nogil
 * 
 * cdef int bootstrap() except -1:             # <<<<<<<<<<<<<<
 *     # Get options from 'mpi4py.rc' module
 *     getOptions(&options)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.bootstrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":180
 *     return 0
 * 
 * cdef inline int mpi_active() nogil:             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     # MPI initialized ?
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_mpi_active(void) {
  int __pyx_v_ierr;
  int __pyx_v_initialized;
  int __pyx_v_finalized;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/atimport.pxi":181
 * 
 * cdef inline int mpi_active() nogil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     # MPI initialized ?
 *     cdef int initialized = 0
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/atimport.pxi":183
 *     cdef int ierr = MPI_SUCCESS
 *     # MPI initialized ?
 *     cdef int initialized = 0             # <<<<<<<<<<<<<<
 *     ierr = MPI_Initialized(&initialized)
 *     if not initialized or ierr != MPI_SUCCESS: return 0
 */
  __pyx_v_initialized = 0;

  /* "mpi4py/MPI/atimport.pxi":184
 *     # MPI initialized ?
 *     cdef int initialized = 0
 *     ierr = MPI_Initialized(&initialized)             # <<<<<<<<<<<<<<
 *     if not initialized or ierr != MPI_SUCCESS: return 0
 *     # MPI finalized ?
 */
  __pyx_v_ierr = MPI_Initialized((&__pyx_v_initialized));

  /* "mpi4py/MPI/atimport.pxi":185
 *     cdef int initialized = 0
 *     ierr = MPI_Initialized(&initialized)
 *     if not initialized or ierr != MPI_SUCCESS: return 0             # <<<<<<<<<<<<<<
 *     # MPI finalized ?
 *     cdef int finalized = 1
 */
  __pyx_t_2 = ((!(__pyx_v_initialized != 0)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":187
 *     if not initialized or ierr != MPI_SUCCESS: return 0
 *     # MPI finalized ?
 *     cdef int finalized = 1             # <<<<<<<<<<<<<<
 *     ierr = MPI_Finalized(&finalized)
 *     if finalized or ierr != MPI_SUCCESS: return 0
 */
  __pyx_v_finalized = 1;

  /* "mpi4py/MPI/atimport.pxi":188
 *     # MPI finalized ?
 *     cdef int finalized = 1
 *     ierr = MPI_Finalized(&finalized)             # <<<<<<<<<<<<<<
 *     if finalized or ierr != MPI_SUCCESS: return 0
 *     # MPI should be active ...
 */
  __pyx_v_ierr = MPI_Finalized((&__pyx_v_finalized));

  /* "mpi4py/MPI/atimport.pxi":189
 *     cdef int finalized = 1
 *     ierr = MPI_Finalized(&finalized)
 *     if finalized or ierr != MPI_SUCCESS: return 0             # <<<<<<<<<<<<<<
 *     # MPI should be active ...
 *     return 1
 */
  __pyx_t_2 = (__pyx_v_finalized != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":191
 *     if finalized or ierr != MPI_SUCCESS: return 0
 *     # MPI should be active ...
 *     return 1             # <<<<<<<<<<<<<<
 * 
 * cdef int initialize() nogil except -1:
 */
  __pyx_r = 1;
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":180
 *     return 0
 * 
 * cdef inline int mpi_active() nogil:             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     # MPI initialized ?
 */

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":193
 *     return 1
 * 
 * cdef int initialize() nogil except -1:             # <<<<<<<<<<<<<<
 *     if not mpi_active(): return 0
 *     comm_set_eh(MPI_COMM_SELF)
 */

static int __pyx_f_6mpi4py_3MPI_initialize(void) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/atimport.pxi":194
 * 
 * cdef int initialize() nogil except -1:
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     comm_set_eh(MPI_COMM_SELF)
 *     comm_set_eh(MPI_COMM_WORLD)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":195
 * cdef int initialize() nogil except -1:
 *     if not mpi_active(): return 0
 *     comm_set_eh(MPI_COMM_SELF)             # <<<<<<<<<<<<<<
 *     comm_set_eh(MPI_COMM_WORLD)
 *     return 0
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_comm_set_eh(MPI_COMM_SELF); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(9, 195, __pyx_L1_error)

  /* "mpi4py/MPI/atimport.pxi":196
 *     if not mpi_active(): return 0
 *     comm_set_eh(MPI_COMM_SELF)
 *     comm_set_eh(MPI_COMM_WORLD)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_comm_set_eh(MPI_COMM_WORLD); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(9, 196, __pyx_L1_error)

  /* "mpi4py/MPI/atimport.pxi":197
 *     comm_set_eh(MPI_COMM_SELF)
 *     comm_set_eh(MPI_COMM_WORLD)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef void finalize() nogil:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":193
 *     return 1
 * 
 * cdef int initialize() nogil except -1:             # <<<<<<<<<<<<<<
 *     if not mpi_active(): return 0
 *     comm_set_eh(MPI_COMM_SELF)
 */

  /* function exit code */
  __pyx_L1_error:;
  {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    __Pyx_AddTraceback("mpi4py.MPI.initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
  }
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":199
 *     return 0
 * 
 * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
 *     if not mpi_active(): return
 *     <void>PyMPI_Commctx_finalize()
 */

static void __pyx_f_6mpi4py_3MPI_finalize(void) {
  int __pyx_t_1;

  /* "mpi4py/MPI/atimport.pxi":200
 * 
 * cdef void finalize() nogil:
 *     if not mpi_active(): return             # <<<<<<<<<<<<<<
 *     <void>PyMPI_Commctx_finalize()
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":201
 * cdef void finalize() nogil:
 *     if not mpi_active(): return
 *     <void>PyMPI_Commctx_finalize()             # <<<<<<<<<<<<<<
 * 
 * cdef int abort_status = 0
 */
  ((void)PyMPI_Commctx_finalize());

  /* "mpi4py/MPI/atimport.pxi":199
 *     return 0
 * 
 * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
 *     if not mpi_active(): return
 *     <void>PyMPI_Commctx_finalize()
 */

  /* function exit code */
  __pyx_L0:;
}

/* "mpi4py/MPI/atimport.pxi":205
 * cdef int abort_status = 0
 * 
 * cdef void atexit() nogil:             # <<<<<<<<<<<<<<
 *     if not mpi_active(): return
 *     if abort_status:
 */

static void __pyx_f_6mpi4py_3MPI_atexit(void) {
  int __pyx_t_1;

  /* "mpi4py/MPI/atimport.pxi":206
 * 
 * cdef void atexit() nogil:
 *     if not mpi_active(): return             # <<<<<<<<<<<<<<
 *     if abort_status:
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":207
 * cdef void atexit() nogil:
 *     if not mpi_active(): return
 *     if abort_status:             # <<<<<<<<<<<<<<
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)
 *     finalize()
 */
  __pyx_t_1 = (__pyx_v_6mpi4py_3MPI_abort_status != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/atimport.pxi":208
 *     if not mpi_active(): return
 *     if abort_status:
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)             # <<<<<<<<<<<<<<
 *     finalize()
 *     if options.finalize:
 */
    ((void)MPI_Abort(MPI_COMM_WORLD, __pyx_v_6mpi4py_3MPI_abort_status));

    /* "mpi4py/MPI/atimport.pxi":207
 * cdef void atexit() nogil:
 *     if not mpi_active(): return
 *     if abort_status:             # <<<<<<<<<<<<<<
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)
 *     finalize()
 */
  }

  /* "mpi4py/MPI/atimport.pxi":209
 *     if abort_status:
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)
 *     finalize()             # <<<<<<<<<<<<<<
 *     if options.finalize:
 *         <void>MPI_Finalize()
 */
  __pyx_f_6mpi4py_3MPI_finalize();

  /* "mpi4py/MPI/atimport.pxi":210
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)
 *     finalize()
 *     if options.finalize:             # <<<<<<<<<<<<<<
 *         <void>MPI_Finalize()
 * 
 */
  __pyx_t_1 = (__pyx_v_6mpi4py_3MPI_options.finalize != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/atimport.pxi":211
 *     finalize()
 *     if options.finalize:
 *         <void>MPI_Finalize()             # <<<<<<<<<<<<<<
 * 
 * def _set_abort_status(object status):
 */
    ((void)MPI_Finalize());

    /* "mpi4py/MPI/atimport.pxi":210
 *         <void>MPI_Abort(MPI_COMM_WORLD, abort_status)
 *     finalize()
 *     if options.finalize:             # <<<<<<<<<<<<<<
 *         <void>MPI_Finalize()
 * 
 */
  }

  /* "mpi4py/MPI/atimport.pxi":205
 * cdef int abort_status = 0
 * 
 * cdef void atexit() nogil:             # <<<<<<<<<<<<<<
 *     if not mpi_active(): return
 *     if abort_status:
 */

  /* function exit code */
  __pyx_L0:;
}

/* "mpi4py/MPI/atimport.pxi":213
 *         <void>MPI_Finalize()
 * 
 * def _set_abort_status(object status):             # <<<<<<<<<<<<<<
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_1_set_abort_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI__set_abort_status[] = "_set_abort_status(status)\nHelper for ``python -m mpi4py.run ...``";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_1_set_abort_status = {"_set_abort_status", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_1_set_abort_status, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI__set_abort_status};
static PyObject *__pyx_pw_6mpi4py_3MPI_1_set_abort_status(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_set_abort_status (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_set_abort_status") < 0)) __PYX_ERR(9, 213, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_status = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_set_abort_status", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 213, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._set_abort_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI__set_abort_status(__pyx_self, __pyx_v_status);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI__set_abort_status(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_status) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  __Pyx_RefNannySetupContext("_set_abort_status", 0);

  /* "mpi4py/MPI/atimport.pxi":216
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 *     try:             # <<<<<<<<<<<<<<
 *         abort_status = status
 *     except:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/atimport.pxi":217
 *     global abort_status
 *     try:
 *         abort_status = status             # <<<<<<<<<<<<<<
 *     except:
 *         abort_status = 1 if status else 0
 */
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_status); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(9, 217, __pyx_L3_error)
      __pyx_v_6mpi4py_3MPI_abort_status = __pyx_t_4;

      /* "mpi4py/MPI/atimport.pxi":216
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 *     try:             # <<<<<<<<<<<<<<
 *         abort_status = status
 *     except:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/atimport.pxi":218
 *     try:
 *         abort_status = status
 *     except:             # <<<<<<<<<<<<<<
 *         abort_status = 1 if status else 0
 * 
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI._set_abort_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(9, 218, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);

      /* "mpi4py/MPI/atimport.pxi":219
 *         abort_status = status
 *     except:
 *         abort_status = 1 if status else 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
      __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_status); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(9, 219, __pyx_L5_except_error)
      if (__pyx_t_8) {
        __pyx_t_4 = 1;
      } else {
        __pyx_t_4 = 0;
      }
      __pyx_v_6mpi4py_3MPI_abort_status = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/atimport.pxi":216
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 *     try:             # <<<<<<<<<<<<<<
 *         abort_status = status
 *     except:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":213
 *         <void>MPI_Finalize()
 * 
 * def _set_abort_status(object status):             # <<<<<<<<<<<<<<
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI._set_abort_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":235
 * cdef object MPIException = <object>PyExc_RuntimeError
 * 
 * cdef int PyMPI_Raise(int ierr) except -1 with gil:             # <<<<<<<<<<<<<<
 *     if ierr == PyMPI_ERR_UNAVAILABLE:
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 */

static int __pyx_f_6mpi4py_3MPI_PyMPI_Raise(int __pyx_v_ierr) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("PyMPI_Raise", 0);

  /* "mpi4py/MPI/atimport.pxi":236
 * 
 * cdef int PyMPI_Raise(int ierr) except -1 with gil:
 *     if ierr == PyMPI_ERR_UNAVAILABLE:             # <<<<<<<<<<<<<<
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 *         return 0
 */
  __pyx_t_1 = ((__pyx_v_ierr == PyMPI_ERR_UNAVAILABLE) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/atimport.pxi":237
 * cdef int PyMPI_Raise(int ierr) except -1 with gil:
 *     if ierr == PyMPI_ERR_UNAVAILABLE:
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)             # <<<<<<<<<<<<<<
 *         return 0
 *     if (<void*>MPIException) != NULL:
 */
    __pyx_t_2 = ((PyObject *)PyExc_NotImplementedError);
    __Pyx_INCREF(__pyx_t_2);
    PyErr_SetObject(__pyx_t_2, Py_None);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "mpi4py/MPI/atimport.pxi":238
 *     if ierr == PyMPI_ERR_UNAVAILABLE:
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 *         return 0             # <<<<<<<<<<<<<<
 *     if (<void*>MPIException) != NULL:
 *         PyErr_SetObject(MPIException, <long>ierr)
 */
    __pyx_r = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/atimport.pxi":236
 * 
 * cdef int PyMPI_Raise(int ierr) except -1 with gil:
 *     if ierr == PyMPI_ERR_UNAVAILABLE:             # <<<<<<<<<<<<<<
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 *         return 0
 */
  }

  /* "mpi4py/MPI/atimport.pxi":239
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 *         return 0
 *     if (<void*>MPIException) != NULL:             # <<<<<<<<<<<<<<
 *         PyErr_SetObject(MPIException, <long>ierr)
 *     else:
 */
  __pyx_t_1 = ((((void *)__pyx_v_6mpi4py_3MPI_MPIException) != NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/atimport.pxi":240
 *         return 0
 *     if (<void*>MPIException) != NULL:
 *         PyErr_SetObject(MPIException, <long>ierr)             # <<<<<<<<<<<<<<
 *     else:
 *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
 */
    __pyx_t_2 = __pyx_v_6mpi4py_3MPI_MPIException;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    PyErr_SetObject(__pyx_t_2, __pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/atimport.pxi":239
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 *         return 0
 *     if (<void*>MPIException) != NULL:             # <<<<<<<<<<<<<<
 *         PyErr_SetObject(MPIException, <long>ierr)
 *     else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/atimport.pxi":242
 *         PyErr_SetObject(MPIException, <long>ierr)
 *     else:
 *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  /*else*/ {
    __pyx_t_3 = ((PyObject *)PyExc_RuntimeError);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 242, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    PyErr_SetObject(__pyx_t_3, __pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/atimport.pxi":243
 *     else:
 *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int CHKERR(int ierr) nogil except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":235
 * cdef object MPIException = <object>PyExc_RuntimeError
 * 
 * cdef int PyMPI_Raise(int ierr) except -1 with gil:             # <<<<<<<<<<<<<<
 *     if ierr == PyMPI_ERR_UNAVAILABLE:
 *         PyErr_SetObject(<object>PyExc_NotImplementedError, None)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Raise", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":245
 *     return 0
 * 
 * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ierr == MPI_SUCCESS: return 0
 *     PyMPI_Raise(ierr)
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_CHKERR(int __pyx_v_ierr) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/atimport.pxi":246
 * 
 * cdef inline int CHKERR(int ierr) nogil except -1:
 *     if ierr == MPI_SUCCESS: return 0             # <<<<<<<<<<<<<<
 *     PyMPI_Raise(ierr)
 *     return -1
 */
  __pyx_t_1 = ((__pyx_v_ierr == MPI_SUCCESS) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":247
 * cdef inline int CHKERR(int ierr) nogil except -1:
 *     if ierr == MPI_SUCCESS: return 0
 *     PyMPI_Raise(ierr)             # <<<<<<<<<<<<<<
 *     return -1
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_Raise(__pyx_v_ierr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(9, 247, __pyx_L1_error)

  /* "mpi4py/MPI/atimport.pxi":248
 *     if ierr == MPI_SUCCESS: return 0
 *     PyMPI_Raise(ierr)
 *     return -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline void print_traceback():
 */
  __pyx_r = -1;
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":245
 *     return 0
 * 
 * cdef inline int CHKERR(int ierr) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ierr == MPI_SUCCESS: return 0
 *     PyMPI_Raise(ierr)
 */

  /* function exit code */
  __pyx_L1_error:;
  {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    __Pyx_AddTraceback("mpi4py.MPI.CHKERR", __pyx_clineno, __pyx_lineno, __pyx_filename);
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
  }
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/atimport.pxi":250
 *     return -1
 * 
 * cdef inline void print_traceback():             # <<<<<<<<<<<<<<
 *     cdef object sys, traceback
 *     import sys, traceback
 */

static CYTHON_INLINE void __pyx_f_6mpi4py_3MPI_print_traceback(void) {
  PyObject *__pyx_v_sys = 0;
  PyObject *__pyx_v_traceback = 0;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("print_traceback", 0);

  /* "mpi4py/MPI/atimport.pxi":252
 * cdef inline void print_traceback():
 *     cdef object sys, traceback
 *     import sys, traceback             # <<<<<<<<<<<<<<
 *     traceback.print_exc()
 *     try: sys.stderr.flush()
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_sys = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_traceback, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_traceback = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/atimport.pxi":253
 *     cdef object sys, traceback
 *     import sys, traceback
 *     traceback.print_exc()             # <<<<<<<<<<<<<<
 *     try: sys.stderr.flush()
 *     except: pass
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_traceback, __pyx_n_s_print_exc); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/atimport.pxi":254
 *     import sys, traceback
 *     traceback.print_exc()
 *     try: sys.stderr.flush()             # <<<<<<<<<<<<<<
 *     except: pass
 * 
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    /*try:*/ {
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_sys, __pyx_n_s_stderr); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 254, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_flush); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 254, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 254, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/atimport.pxi":255
 *     traceback.print_exc()
 *     try: sys.stderr.flush()
 *     except: pass             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/atimport.pxi":250
 *     return -1
 * 
 * cdef inline void print_traceback():             # <<<<<<<<<<<<<<
 *     cdef object sys, traceback
 *     import sys, traceback
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("mpi4py.MPI.print_traceback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sys);
  __Pyx_XDECREF(__pyx_v_traceback);
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/atimport.pxi":266
 * cdef object _pypy_sentinel = None
 * 
 * cdef inline int Py_IsInitialized() nogil:             # <<<<<<<<<<<<<<
 *     if PYPY and (<void*>_pypy_sentinel) == NULL: return 0
 *     return _Py_IsInitialized()
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_Py_IsInitialized(void) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/atimport.pxi":267
 * 
 * cdef inline int Py_IsInitialized() nogil:
 *     if PYPY and (<void*>_pypy_sentinel) == NULL: return 0             # <<<<<<<<<<<<<<
 *     return _Py_IsInitialized()
 * 
 */
  if (PyMPI_RUNTIME_PYPY) {
  } else {
    __pyx_t_1 = PyMPI_RUNTIME_PYPY;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((((void *)__pyx_v_6mpi4py_3MPI__pypy_sentinel) == NULL) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/atimport.pxi":268
 * cdef inline int Py_IsInitialized() nogil:
 *     if PYPY and (<void*>_pypy_sentinel) == NULL: return 0
 *     return _Py_IsInitialized()             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = Py_IsInitialized();
  goto __pyx_L0;

  /* "mpi4py/MPI/atimport.pxi":266
 * cdef object _pypy_sentinel = None
 * 
 * cdef inline int Py_IsInitialized() nogil:             # <<<<<<<<<<<<<<
 *     if PYPY and (<void*>_pypy_sentinel) == NULL: return 0
 *     return _Py_IsInitialized()
 */

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/asstring.pxi":15
 * #------------------------------------------------------------------------------
 * 
 * cdef inline object asmpistr(object ob, char *s[]):             # <<<<<<<<<<<<<<
 *     if PyUnicode_Check(ob):
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asmpistr(PyObject *__pyx_v_ob, char **__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("asmpistr", 0);
  __Pyx_INCREF(__pyx_v_ob);

  /* "mpi4py/MPI/asstring.pxi":16
 * 
 * cdef inline object asmpistr(object ob, char *s[]):
 *     if PyUnicode_Check(ob):             # <<<<<<<<<<<<<<
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);
 *         else:   ob = PyUnicode_AsASCIIString(ob);
 */
  __pyx_t_1 = (PyUnicode_Check(__pyx_v_ob) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asstring.pxi":17
 * cdef inline object asmpistr(object ob, char *s[]):
 *     if PyUnicode_Check(ob):
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);             # <<<<<<<<<<<<<<
 *         else:   ob = PyUnicode_AsASCIIString(ob);
 *     PyBytes_AsStringAndSize(ob, s, NULL)
 */
    if ((PY_MAJOR_VERSION>=3)) {
      __pyx_t_2 = PyUnicode_AsUTF8String(__pyx_v_ob); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 17, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_ob, __pyx_t_2);
      __pyx_t_2 = 0;
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/asstring.pxi":18
 *     if PyUnicode_Check(ob):
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);
 *         else:   ob = PyUnicode_AsASCIIString(ob);             # <<<<<<<<<<<<<<
 *     PyBytes_AsStringAndSize(ob, s, NULL)
 *     return ob
 */
    /*else*/ {
      __pyx_t_2 = PyUnicode_AsASCIIString(__pyx_v_ob); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 18, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_ob, __pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L4:;

    /* "mpi4py/MPI/asstring.pxi":16
 * 
 * cdef inline object asmpistr(object ob, char *s[]):
 *     if PyUnicode_Check(ob):             # <<<<<<<<<<<<<<
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);
 *         else:   ob = PyUnicode_AsASCIIString(ob);
 */
  }

  /* "mpi4py/MPI/asstring.pxi":19
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);
 *         else:   ob = PyUnicode_AsASCIIString(ob);
 *     PyBytes_AsStringAndSize(ob, s, NULL)             # <<<<<<<<<<<<<<
 *     return ob
 * 
 */
  __pyx_t_3 = PyBytes_AsStringAndSize(__pyx_v_ob, __pyx_v_s, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(10, 19, __pyx_L1_error)

  /* "mpi4py/MPI/asstring.pxi":20
 *         else:   ob = PyUnicode_AsASCIIString(ob);
 *     PyBytes_AsStringAndSize(ob, s, NULL)
 *     return ob             # <<<<<<<<<<<<<<
 * 
 * cdef inline object tompistr(const char s[], int n):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  /* "mpi4py/MPI/asstring.pxi":15
 * #------------------------------------------------------------------------------
 * 
 * cdef inline object asmpistr(object ob, char *s[]):             # <<<<<<<<<<<<<<
 *     if PyUnicode_Check(ob):
 *         if PY3: ob = PyUnicode_AsUTF8String(ob);
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.asmpistr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asstring.pxi":22
 *     return ob
 * 
 * cdef inline object tompistr(const char s[], int n):             # <<<<<<<<<<<<<<
 *     if PY3: return PyUnicode_FromStringAndSize(s, n)
 *     else:   return PyBytes_FromStringAndSize(s, n)
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_tompistr(char const *__pyx_v_s, int __pyx_v_n) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("tompistr", 0);

  /* "mpi4py/MPI/asstring.pxi":23
 * 
 * cdef inline object tompistr(const char s[], int n):
 *     if PY3: return PyUnicode_FromStringAndSize(s, n)             # <<<<<<<<<<<<<<
 *     else:   return PyBytes_FromStringAndSize(s, n)
 * 
 */
  if ((PY_MAJOR_VERSION>=3)) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyUnicode_FromStringAndSize(__pyx_v_s, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asstring.pxi":24
 * cdef inline object tompistr(const char s[], int n):
 *     if PY3: return PyUnicode_FromStringAndSize(s, n)
 *     else:   return PyBytes_FromStringAndSize(s, n)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object mpistr(const char s[]):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_s, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asstring.pxi":22
 *     return ob
 * 
 * cdef inline object tompistr(const char s[], int n):             # <<<<<<<<<<<<<<
 *     if PY3: return PyUnicode_FromStringAndSize(s, n)
 *     else:   return PyBytes_FromStringAndSize(s, n)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.tompistr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asstring.pxi":26
 *     else:   return PyBytes_FromStringAndSize(s, n)
 * 
 * cdef inline object mpistr(const char s[]):             # <<<<<<<<<<<<<<
 *     if PY3: return PyUnicode_FromString(s)
 *     else:   return PyBytes_FromString(s)
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_mpistr(char const *__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("mpistr", 0);

  /* "mpi4py/MPI/asstring.pxi":27
 * 
 * cdef inline object mpistr(const char s[]):
 *     if PY3: return PyUnicode_FromString(s)             # <<<<<<<<<<<<<<
 *     else:   return PyBytes_FromString(s)
 * 
 */
  if ((PY_MAJOR_VERSION>=3)) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyUnicode_FromString(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 27, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asstring.pxi":28
 * cdef inline object mpistr(const char s[]):
 *     if PY3: return PyUnicode_FromString(s)
 *     else:   return PyBytes_FromString(s)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object pystr(const char s[]):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyBytes_FromString(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 28, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asstring.pxi":26
 *     else:   return PyBytes_FromStringAndSize(s, n)
 * 
 * cdef inline object mpistr(const char s[]):             # <<<<<<<<<<<<<<
 *     if PY3: return PyUnicode_FromString(s)
 *     else:   return PyBytes_FromString(s)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.mpistr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asstring.pxi":30
 *     else:   return PyBytes_FromString(s)
 * 
 * cdef inline object pystr(const char s[]):             # <<<<<<<<<<<<<<
 *     if PY3: return PyUnicode_FromString(s)
 *     else:   return PyBytes_FromString(s)
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_pystr(char const *__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("pystr", 0);

  /* "mpi4py/MPI/asstring.pxi":31
 * 
 * cdef inline object pystr(const char s[]):
 *     if PY3: return PyUnicode_FromString(s)             # <<<<<<<<<<<<<<
 *     else:   return PyBytes_FromString(s)
 * 
 */
  if ((PY_MAJOR_VERSION>=3)) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyUnicode_FromString(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 31, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asstring.pxi":32
 * cdef inline object pystr(const char s[]):
 *     if PY3: return PyUnicode_FromString(s)
 *     else:   return PyBytes_FromString(s)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyBytes_FromString(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 32, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asstring.pxi":30
 *     else:   return PyBytes_FromString(s)
 * 
 * cdef inline object pystr(const char s[]):             # <<<<<<<<<<<<<<
 *     if PY3: return PyUnicode_FromString(s)
 *     else:   return PyBytes_FromString(s)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.pystr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":81
 *                 pass
 * 
 * cdef int PyPy_GetBuffer(object obj, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
 *     cdef object addr
 *     cdef void *buf = NULL
 */

static int __pyx_f_6mpi4py_3MPI_PyPy_GetBuffer(PyObject *__pyx_v_obj, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  PyObject *__pyx_v_addr = 0;
  void *__pyx_v_buf;
  Py_ssize_t __pyx_v_size;
  int __pyx_v_readonly;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  char *__pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *(*__pyx_t_13)(PyObject *);
  int __pyx_t_14;
  __Pyx_RefNannySetupContext("PyPy_GetBuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":83
 * cdef int PyPy_GetBuffer(object obj, Py_buffer *view, int flags) except -1:
 *     cdef object addr
 *     cdef void *buf = NULL             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t size = 0
 *     cdef bint readonly = 0
 */
  __pyx_v_buf = NULL;

  /* "mpi4py/MPI/asbuffer.pxi":84
 *     cdef object addr
 *     cdef void *buf = NULL
 *     cdef Py_ssize_t size = 0             # <<<<<<<<<<<<<<
 *     cdef bint readonly = 0
 *     try:
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/asbuffer.pxi":85
 *     cdef void *buf = NULL
 *     cdef Py_ssize_t size = 0
 *     cdef bint readonly = 0             # <<<<<<<<<<<<<<
 *     try:
 *         if not isinstance(obj, bytes):
 */
  __pyx_v_readonly = 0;

  /* "mpi4py/MPI/asbuffer.pxi":86
 *     cdef Py_ssize_t size = 0
 *     cdef bint readonly = 0
 *     try:             # <<<<<<<<<<<<<<
 *         if not isinstance(obj, bytes):
 *             if PyObject_CheckBuffer(obj):
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/asbuffer.pxi":87
 *     cdef bint readonly = 0
 *     try:
 *         if not isinstance(obj, bytes):             # <<<<<<<<<<<<<<
 *             if PyObject_CheckBuffer(obj):
 *                 return PyObject_GetBuffer(obj, view, flags)
 */
      __pyx_t_4 = PyBytes_Check(__pyx_v_obj); 
      __pyx_t_5 = ((!(__pyx_t_4 != 0)) != 0);
      if (__pyx_t_5) {

        /* "mpi4py/MPI/asbuffer.pxi":88
 *     try:
 *         if not isinstance(obj, bytes):
 *             if PyObject_CheckBuffer(obj):             # <<<<<<<<<<<<<<
 *                 return PyObject_GetBuffer(obj, view, flags)
 *     except SystemError:
 */
        __pyx_t_5 = (PyObject_CheckBuffer(__pyx_v_obj) != 0);
        if (__pyx_t_5) {

          /* "mpi4py/MPI/asbuffer.pxi":89
 *         if not isinstance(obj, bytes):
 *             if PyObject_CheckBuffer(obj):
 *                 return PyObject_GetBuffer(obj, view, flags)             # <<<<<<<<<<<<<<
 *     except SystemError:
 *         pass
 */
          __pyx_t_6 = PyObject_GetBuffer(__pyx_v_obj, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 89, __pyx_L3_error)
          __pyx_r = __pyx_t_6;
          goto __pyx_L7_try_return;

          /* "mpi4py/MPI/asbuffer.pxi":88
 *     try:
 *         if not isinstance(obj, bytes):
 *             if PyObject_CheckBuffer(obj):             # <<<<<<<<<<<<<<
 *                 return PyObject_GetBuffer(obj, view, flags)
 *     except SystemError:
 */
        }

        /* "mpi4py/MPI/asbuffer.pxi":87
 *     cdef bint readonly = 0
 *     try:
 *         if not isinstance(obj, bytes):             # <<<<<<<<<<<<<<
 *             if PyObject_CheckBuffer(obj):
 *                 return PyObject_GetBuffer(obj, view, flags)
 */
      }

      /* "mpi4py/MPI/asbuffer.pxi":86
 *     cdef Py_ssize_t size = 0
 *     cdef bint readonly = 0
 *     try:             # <<<<<<<<<<<<<<
 *         if not isinstance(obj, bytes):
 *             if PyObject_CheckBuffer(obj):
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/asbuffer.pxi":90
 *             if PyObject_CheckBuffer(obj):
 *                 return PyObject_GetBuffer(obj, view, flags)
 *     except SystemError:             # <<<<<<<<<<<<<<
 *         pass
 *     except TypeError:
 */
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_SystemError);
    if (__pyx_t_6) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/asbuffer.pxi":92
 *     except SystemError:
 *         pass
 *     except TypeError:             # <<<<<<<<<<<<<<
 *         pass
 *     if isinstance(obj, bytes):
 */
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_6) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/asbuffer.pxi":86
 *     cdef Py_ssize_t size = 0
 *     cdef bint readonly = 0
 *     try:             # <<<<<<<<<<<<<<
 *         if not isinstance(obj, bytes):
 *             if PyObject_CheckBuffer(obj):
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/asbuffer.pxi":94
 *     except TypeError:
 *         pass
 *     if isinstance(obj, bytes):             # <<<<<<<<<<<<<<
 *         buf  = PyBytes_AsString(obj)
 *         size = PyBytes_Size(obj)
 */
  __pyx_t_5 = PyBytes_Check(__pyx_v_obj); 
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/asbuffer.pxi":95
 *         pass
 *     if isinstance(obj, bytes):
 *         buf  = PyBytes_AsString(obj)             # <<<<<<<<<<<<<<
 *         size = PyBytes_Size(obj)
 *         readonly = 1
 */
    __pyx_t_7 = PyBytes_AsString(__pyx_v_obj); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(0, 95, __pyx_L1_error)
    __pyx_v_buf = __pyx_t_7;

    /* "mpi4py/MPI/asbuffer.pxi":96
 *     if isinstance(obj, bytes):
 *         buf  = PyBytes_AsString(obj)
 *         size = PyBytes_Size(obj)             # <<<<<<<<<<<<<<
 *         readonly = 1
 *     elif isinstance(obj, bytearray):
 */
    __pyx_t_8 = PyBytes_Size(__pyx_v_obj); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 96, __pyx_L1_error)
    __pyx_v_size = __pyx_t_8;

    /* "mpi4py/MPI/asbuffer.pxi":97
 *         buf  = PyBytes_AsString(obj)
 *         size = PyBytes_Size(obj)
 *         readonly = 1             # <<<<<<<<<<<<<<
 *     elif isinstance(obj, bytearray):
 *         buf  = PyByteArray_AsString(obj)
 */
    __pyx_v_readonly = 1;

    /* "mpi4py/MPI/asbuffer.pxi":94
 *     except TypeError:
 *         pass
 *     if isinstance(obj, bytes):             # <<<<<<<<<<<<<<
 *         buf  = PyBytes_AsString(obj)
 *         size = PyBytes_Size(obj)
 */
    goto __pyx_L11;
  }

  /* "mpi4py/MPI/asbuffer.pxi":98
 *         size = PyBytes_Size(obj)
 *         readonly = 1
 *     elif isinstance(obj, bytearray):             # <<<<<<<<<<<<<<
 *         buf  = PyByteArray_AsString(obj)
 *         size = PyByteArray_Size(obj)
 */
  __pyx_t_4 = PyByteArray_Check(__pyx_v_obj); 
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "mpi4py/MPI/asbuffer.pxi":99
 *         readonly = 1
 *     elif isinstance(obj, bytearray):
 *         buf  = PyByteArray_AsString(obj)             # <<<<<<<<<<<<<<
 *         size = PyByteArray_Size(obj)
 *         readonly = 0
 */
    __pyx_t_7 = PyByteArray_AsString(__pyx_v_obj); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(0, 99, __pyx_L1_error)
    __pyx_v_buf = __pyx_t_7;

    /* "mpi4py/MPI/asbuffer.pxi":100
 *     elif isinstance(obj, bytearray):
 *         buf  = PyByteArray_AsString(obj)
 *         size = PyByteArray_Size(obj)             # <<<<<<<<<<<<<<
 *         readonly = 0
 *     elif isinstance(obj, array_array):
 */
    __pyx_t_8 = PyByteArray_Size(__pyx_v_obj); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 100, __pyx_L1_error)
    __pyx_v_size = __pyx_t_8;

    /* "mpi4py/MPI/asbuffer.pxi":101
 *         buf  = PyByteArray_AsString(obj)
 *         size = PyByteArray_Size(obj)
 *         readonly = 0             # <<<<<<<<<<<<<<
 *     elif isinstance(obj, array_array):
 *         addr, size = obj.buffer_info()
 */
    __pyx_v_readonly = 0;

    /* "mpi4py/MPI/asbuffer.pxi":98
 *         size = PyBytes_Size(obj)
 *         readonly = 1
 *     elif isinstance(obj, bytearray):             # <<<<<<<<<<<<<<
 *         buf  = PyByteArray_AsString(obj)
 *         size = PyByteArray_Size(obj)
 */
    goto __pyx_L11;
  }

  /* "mpi4py/MPI/asbuffer.pxi":102
 *         size = PyByteArray_Size(obj)
 *         readonly = 0
 *     elif isinstance(obj, array_array):             # <<<<<<<<<<<<<<
 *         addr, size = obj.buffer_info()
 *         buf = PyLong_AsVoidPtr(addr)
 */
  __pyx_t_9 = ((PyObject *)__pyx_v_6mpi4py_3MPI_array_array);
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_t_9); 
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/asbuffer.pxi":103
 *         readonly = 0
 *     elif isinstance(obj, array_array):
 *         addr, size = obj.buffer_info()             # <<<<<<<<<<<<<<
 *         buf = PyLong_AsVoidPtr(addr)
 *         size *= obj.itemsize
 */
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_buffer_info); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
      PyObject* sequence = __pyx_t_9;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 103, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_10 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_11);
      #else
      __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 103, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 103, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      #endif
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_12 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 103, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
      index = 0; __pyx_t_10 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_10)) goto __pyx_L12_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_10);
      index = 1; __pyx_t_11 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_11)) goto __pyx_L12_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 103, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L13_unpacking_done;
      __pyx_L12_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 103, __pyx_L1_error)
      __pyx_L13_unpacking_done:;
    }
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_11); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_addr = __pyx_t_10;
    __pyx_t_10 = 0;
    __pyx_v_size = __pyx_t_8;

    /* "mpi4py/MPI/asbuffer.pxi":104
 *     elif isinstance(obj, array_array):
 *         addr, size = obj.buffer_info()
 *         buf = PyLong_AsVoidPtr(addr)             # <<<<<<<<<<<<<<
 *         size *= obj.itemsize
 *         readonly = 0
 */
    __pyx_v_buf = PyLong_AsVoidPtr(__pyx_v_addr);

    /* "mpi4py/MPI/asbuffer.pxi":105
 *         addr, size = obj.buffer_info()
 *         buf = PyLong_AsVoidPtr(addr)
 *         size *= obj.itemsize             # <<<<<<<<<<<<<<
 *         readonly = 0
 *     elif pypy_have_numpy and isinstance(obj, numpy_array):
 */
    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = PyNumber_InPlaceMultiply(__pyx_t_9, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_10); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_v_size = __pyx_t_8;

    /* "mpi4py/MPI/asbuffer.pxi":106
 *         buf = PyLong_AsVoidPtr(addr)
 *         size *= obj.itemsize
 *         readonly = 0             # <<<<<<<<<<<<<<
 *     elif pypy_have_numpy and isinstance(obj, numpy_array):
 *         addr, readonly = obj.__array_interface__['data']
 */
    __pyx_v_readonly = 0;

    /* "mpi4py/MPI/asbuffer.pxi":102
 *         size = PyByteArray_Size(obj)
 *         readonly = 0
 *     elif isinstance(obj, array_array):             # <<<<<<<<<<<<<<
 *         addr, size = obj.buffer_info()
 *         buf = PyLong_AsVoidPtr(addr)
 */
    goto __pyx_L11;
  }

  /* "mpi4py/MPI/asbuffer.pxi":107
 *         size *= obj.itemsize
 *         readonly = 0
 *     elif pypy_have_numpy and isinstance(obj, numpy_array):             # <<<<<<<<<<<<<<
 *         addr, readonly = obj.__array_interface__['data']
 *         buf = PyLong_AsVoidPtr(addr)
 */
  __pyx_t_5 = (__pyx_v_6mpi4py_3MPI_pypy_have_numpy != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_10 = ((PyObject *)__pyx_v_6mpi4py_3MPI_numpy_array);
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_5 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_t_10); 
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_14 = (__pyx_t_5 != 0);
  __pyx_t_4 = __pyx_t_14;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_4) {

    /* "mpi4py/MPI/asbuffer.pxi":108
 *         readonly = 0
 *     elif pypy_have_numpy and isinstance(obj, numpy_array):
 *         addr, readonly = obj.__array_interface__['data']             # <<<<<<<<<<<<<<
 *         buf = PyLong_AsVoidPtr(addr)
 *         size = obj.nbytes
 */
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_array_interface); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyObject_Dict_GetItem(__pyx_t_10, __pyx_n_s_data); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) {
      PyObject* sequence = __pyx_t_11;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 108, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_10 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_9);
      #else
      __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      #endif
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_12 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 108, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_12)->tp_iternext;
      index = 0; __pyx_t_10 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_10)) goto __pyx_L16_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_10);
      index = 1; __pyx_t_9 = __pyx_t_13(__pyx_t_12); if (unlikely(!__pyx_t_9)) goto __pyx_L16_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_9);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_12), 2) < 0) __PYX_ERR(0, 108, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      goto __pyx_L17_unpacking_done;
      __pyx_L16_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 108, __pyx_L1_error)
      __pyx_L17_unpacking_done:;
    }
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 108, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_addr = __pyx_t_10;
    __pyx_t_10 = 0;
    __pyx_v_readonly = __pyx_t_4;

    /* "mpi4py/MPI/asbuffer.pxi":109
 *     elif pypy_have_numpy and isinstance(obj, numpy_array):
 *         addr, readonly = obj.__array_interface__['data']
 *         buf = PyLong_AsVoidPtr(addr)             # <<<<<<<<<<<<<<
 *         size = obj.nbytes
 *     else:
 */
    __pyx_v_buf = PyLong_AsVoidPtr(__pyx_v_addr);

    /* "mpi4py/MPI/asbuffer.pxi":110
 *         addr, readonly = obj.__array_interface__['data']
 *         buf = PyLong_AsVoidPtr(addr)
 *         size = obj.nbytes             # <<<<<<<<<<<<<<
 *     else:
 *         readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE
 */
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_obj, __pyx_n_s_nbytes); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 110, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_t_11); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 110, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_size = __pyx_t_8;

    /* "mpi4py/MPI/asbuffer.pxi":107
 *         size *= obj.itemsize
 *         readonly = 0
 *     elif pypy_have_numpy and isinstance(obj, numpy_array):             # <<<<<<<<<<<<<<
 *         addr, readonly = obj.__array_interface__['data']
 *         buf = PyLong_AsVoidPtr(addr)
 */
    goto __pyx_L11;
  }

  /* "mpi4py/MPI/asbuffer.pxi":112
 *         size = obj.nbytes
 *     else:
 *         readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE             # <<<<<<<<<<<<<<
 *         _Py2_AsBuffer(obj, readonly, &buf, &size)
 *     if buf == NULL and size == 0: buf = emptybuffer
 */
  /*else*/ {
    __pyx_v_readonly = ((__pyx_v_flags & PyBUF_WRITABLE) != PyBUF_WRITABLE);

    /* "mpi4py/MPI/asbuffer.pxi":113
 *     else:
 *         readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE
 *         _Py2_AsBuffer(obj, readonly, &buf, &size)             # <<<<<<<<<<<<<<
 *     if buf == NULL and size == 0: buf = emptybuffer
 *     PyBuffer_FillInfo(view, obj, buf, size, readonly, flags)
 */
    __pyx_t_6 = _Py2_AsBuffer(__pyx_v_obj, __pyx_v_readonly, (&__pyx_v_buf), (&__pyx_v_size)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 113, __pyx_L1_error)
  }
  __pyx_L11:;

  /* "mpi4py/MPI/asbuffer.pxi":114
 *         readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE
 *         _Py2_AsBuffer(obj, readonly, &buf, &size)
 *     if buf == NULL and size == 0: buf = emptybuffer             # <<<<<<<<<<<<<<
 *     PyBuffer_FillInfo(view, obj, buf, size, readonly, flags)
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT
 */
  __pyx_t_14 = ((__pyx_v_buf == NULL) != 0);
  if (__pyx_t_14) {
  } else {
    __pyx_t_4 = __pyx_t_14;
    goto __pyx_L19_bool_binop_done;
  }
  __pyx_t_14 = ((__pyx_v_size == 0) != 0);
  __pyx_t_4 = __pyx_t_14;
  __pyx_L19_bool_binop_done:;
  if (__pyx_t_4) {
    __pyx_v_buf = ((void*)"");
  }

  /* "mpi4py/MPI/asbuffer.pxi":115
 *         _Py2_AsBuffer(obj, readonly, &buf, &size)
 *     if buf == NULL and size == 0: buf = emptybuffer
 *     PyBuffer_FillInfo(view, obj, buf, size, readonly, flags)             # <<<<<<<<<<<<<<
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT
 *     return 0
 */
  __pyx_t_6 = PyBuffer_FillInfo(__pyx_v_view, __pyx_v_obj, __pyx_v_buf, __pyx_v_size, __pyx_v_readonly, __pyx_v_flags); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 115, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":116
 *     if buf == NULL and size == 0: buf = emptybuffer
 *     PyBuffer_FillInfo(view, obj, buf, size, readonly, flags)
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_4 = (((__pyx_v_flags & PyBUF_FORMAT) == PyBUF_FORMAT) != 0);
  if (__pyx_t_4) {
    __pyx_v_view->format = __pyx_v_6mpi4py_3MPI_BYTE_FMT;
  }

  /* "mpi4py/MPI/asbuffer.pxi":117
 *     PyBuffer_FillInfo(view, obj, buf, size, readonly, flags)
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":81
 *                 pass
 * 
 * cdef int PyPy_GetBuffer(object obj, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
 *     cdef object addr
 *     cdef void *buf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("mpi4py.MPI.PyPy_GetBuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_addr);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":121
 * #------------------------------------------------------------------------------
 * 
 * cdef int Py27_GetBuffer(object obj, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
 *     # Python 3 buffer interface (PEP 3118)
 *     if PyObject_CheckBuffer(obj):
 */

static int __pyx_f_6mpi4py_3MPI_Py27_GetBuffer(PyObject *__pyx_v_obj, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Py27_GetBuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":123
 * cdef int Py27_GetBuffer(object obj, Py_buffer *view, int flags) except -1:
 *     # Python 3 buffer interface (PEP 3118)
 *     if PyObject_CheckBuffer(obj):             # <<<<<<<<<<<<<<
 *         return PyObject_GetBuffer(obj, view, flags)
 *     # Python 2 buffer interface (legacy)
 */
  __pyx_t_1 = (PyObject_CheckBuffer(__pyx_v_obj) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asbuffer.pxi":124
 *     # Python 3 buffer interface (PEP 3118)
 *     if PyObject_CheckBuffer(obj):
 *         return PyObject_GetBuffer(obj, view, flags)             # <<<<<<<<<<<<<<
 *     # Python 2 buffer interface (legacy)
 *     view.readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE
 */
    __pyx_t_2 = PyObject_GetBuffer(__pyx_v_obj, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 124, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "mpi4py/MPI/asbuffer.pxi":123
 * cdef int Py27_GetBuffer(object obj, Py_buffer *view, int flags) except -1:
 *     # Python 3 buffer interface (PEP 3118)
 *     if PyObject_CheckBuffer(obj):             # <<<<<<<<<<<<<<
 *         return PyObject_GetBuffer(obj, view, flags)
 *     # Python 2 buffer interface (legacy)
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":126
 *         return PyObject_GetBuffer(obj, view, flags)
 *     # Python 2 buffer interface (legacy)
 *     view.readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE             # <<<<<<<<<<<<<<
 *     _Py2_AsBuffer(obj, view.readonly, &view.buf, &view.len)
 *     if view.buf == NULL and view.len == 0: view.buf = emptybuffer
 */
  __pyx_v_view->readonly = ((__pyx_v_flags & PyBUF_WRITABLE) != PyBUF_WRITABLE);

  /* "mpi4py/MPI/asbuffer.pxi":127
 *     # Python 2 buffer interface (legacy)
 *     view.readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE
 *     _Py2_AsBuffer(obj, view.readonly, &view.buf, &view.len)             # <<<<<<<<<<<<<<
 *     if view.buf == NULL and view.len == 0: view.buf = emptybuffer
 *     PyBuffer_FillInfo(view, obj, view.buf, view.len, view.readonly, flags)
 */
  __pyx_t_2 = _Py2_AsBuffer(__pyx_v_obj, __pyx_v_view->readonly, (&__pyx_v_view->buf), (&__pyx_v_view->len)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 127, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":128
 *     view.readonly = (flags & PyBUF_WRITABLE) != PyBUF_WRITABLE
 *     _Py2_AsBuffer(obj, view.readonly, &view.buf, &view.len)
 *     if view.buf == NULL and view.len == 0: view.buf = emptybuffer             # <<<<<<<<<<<<<<
 *     PyBuffer_FillInfo(view, obj, view.buf, view.len, view.readonly, flags)
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT
 */
  __pyx_t_3 = ((__pyx_v_view->buf == NULL) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_view->len == 0) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_v_view->buf = ((void*)"");
  }

  /* "mpi4py/MPI/asbuffer.pxi":129
 *     _Py2_AsBuffer(obj, view.readonly, &view.buf, &view.len)
 *     if view.buf == NULL and view.len == 0: view.buf = emptybuffer
 *     PyBuffer_FillInfo(view, obj, view.buf, view.len, view.readonly, flags)             # <<<<<<<<<<<<<<
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT
 *     return 0
 */
  __pyx_t_2 = PyBuffer_FillInfo(__pyx_v_view, __pyx_v_obj, __pyx_v_view->buf, __pyx_v_view->len, __pyx_v_view->readonly, __pyx_v_flags); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 129, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":130
 *     if view.buf == NULL and view.len == 0: view.buf = emptybuffer
 *     PyBuffer_FillInfo(view, obj, view.buf, view.len, view.readonly, flags)
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_1 = (((__pyx_v_flags & PyBUF_FORMAT) == PyBUF_FORMAT) != 0);
  if (__pyx_t_1) {
    __pyx_v_view->format = __pyx_v_6mpi4py_3MPI_BYTE_FMT;
  }

  /* "mpi4py/MPI/asbuffer.pxi":131
 *     PyBuffer_FillInfo(view, obj, view.buf, view.len, view.readonly, flags)
 *     if (flags & PyBUF_FORMAT) == PyBUF_FORMAT: view.format = BYTE_FMT
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":121
 * #------------------------------------------------------------------------------
 * 
 * cdef int Py27_GetBuffer(object obj, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
 *     # Python 3 buffer interface (PEP 3118)
 *     if PyObject_CheckBuffer(obj):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Py27_GetBuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":135
 * #------------------------------------------------------------------------------
 * 
 * cdef int PyMPI_GetBuffer(object obj, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
 *     if PYPY: return PyPy_GetBuffer(obj, view, flags)
 *     if PY2:  return Py27_GetBuffer(obj, view, flags)
 */

static int __pyx_f_6mpi4py_3MPI_PyMPI_GetBuffer(PyObject *__pyx_v_obj, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("PyMPI_GetBuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":136
 * 
 * cdef int PyMPI_GetBuffer(object obj, Py_buffer *view, int flags) except -1:
 *     if PYPY: return PyPy_GetBuffer(obj, view, flags)             # <<<<<<<<<<<<<<
 *     if PY2:  return Py27_GetBuffer(obj, view, flags)
 *     return PyObject_GetBuffer(obj, view, flags)
 */
  if (PyMPI_RUNTIME_PYPY) {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyPy_GetBuffer(__pyx_v_obj, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 136, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asbuffer.pxi":137
 * cdef int PyMPI_GetBuffer(object obj, Py_buffer *view, int flags) except -1:
 *     if PYPY: return PyPy_GetBuffer(obj, view, flags)
 *     if PY2:  return Py27_GetBuffer(obj, view, flags)             # <<<<<<<<<<<<<<
 *     return PyObject_GetBuffer(obj, view, flags)
 * 
 */
  if ((PY_MAJOR_VERSION==2)) {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_Py27_GetBuffer(__pyx_v_obj, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 137, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/asbuffer.pxi":138
 *     if PYPY: return PyPy_GetBuffer(obj, view, flags)
 *     if PY2:  return Py27_GetBuffer(obj, view, flags)
 *     return PyObject_GetBuffer(obj, view, flags)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_t_1 = PyObject_GetBuffer(__pyx_v_obj, __pyx_v_view, __pyx_v_flags); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 138, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":135
 * #------------------------------------------------------------------------------
 * 
 * cdef int PyMPI_GetBuffer(object obj, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
 *     if PYPY: return PyPy_GetBuffer(obj, view, flags)
 *     if PY2:  return Py27_GetBuffer(obj, view, flags)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_GetBuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":151
 *     cdef Py_buffer view
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(&self.view, <object>NULL,
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6memory_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6memory_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory___cinit__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6memory___cinit__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":152
 * 
 *     def __cinit__(self):
 *         PyBuffer_FillInfo(&self.view, <object>NULL,             # <<<<<<<<<<<<<<
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 * 
 */
  __pyx_t_1 = PyBuffer_FillInfo((&__pyx_v_self->view), ((PyObject *)NULL), NULL, 0, 0, PyBUF_SIMPLE); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 152, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":151
 *     cdef Py_buffer view
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(&self.view, <object>NULL,
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.memory.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":155
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         PyBuffer_Release(&self.view)
 * 
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_6memory_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_6memory_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_6memory_2__dealloc__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_6memory_2__dealloc__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":156
 * 
 *     def __dealloc__(self):
 *         PyBuffer_Release(&self.view)             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  PyBuffer_Release((&__pyx_v_self->view));

  /* "mpi4py/MPI/asbuffer.pxi":155
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         PyBuffer_Release(&self.view)
 * 
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/asbuffer.pxi":159
 * 
 *     @staticmethod
 *     def frombuffer(obj, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from buffer-like object"""
 *         cdef int flags = PyBUF_SIMPLE
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_5frombuffer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6memory_4frombuffer[] = "memory.frombuffer(obj, bool readonly=False)\nMemory from buffer-like object";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_6memory_5frombuffer = {"frombuffer", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6memory_5frombuffer, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6memory_4frombuffer};
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_5frombuffer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_readonly;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("frombuffer (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_readonly,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_readonly);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "frombuffer") < 0)) __PYX_ERR(0, 159, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    if (values[1]) {
      __pyx_v_readonly = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_readonly == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 159, __pyx_L3_error)
    } else {
      __pyx_v_readonly = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("frombuffer", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 159, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.memory.frombuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_4frombuffer(__pyx_v_obj, __pyx_v_readonly);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_4frombuffer(PyObject *__pyx_v_obj, int __pyx_v_readonly) {
  int __pyx_v_flags;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("frombuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":161
 *     def frombuffer(obj, bint readonly=False):
 *         """Memory from buffer-like object"""
 *         cdef int flags = PyBUF_SIMPLE             # <<<<<<<<<<<<<<
 *         if not readonly: flags |= PyBUF_WRITABLE
 *         cdef memory mem = <memory>memory.__new__(memory)
 */
  __pyx_v_flags = PyBUF_SIMPLE;

  /* "mpi4py/MPI/asbuffer.pxi":162
 *         """Memory from buffer-like object"""
 *         cdef int flags = PyBUF_SIMPLE
 *         if not readonly: flags |= PyBUF_WRITABLE             # <<<<<<<<<<<<<<
 *         cdef memory mem = <memory>memory.__new__(memory)
 *         PyMPI_GetBuffer(obj, &mem.view, flags)
 */
  __pyx_t_1 = ((!(__pyx_v_readonly != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_v_flags = (__pyx_v_flags | PyBUF_WRITABLE);
  }

  /* "mpi4py/MPI/asbuffer.pxi":163
 *         cdef int flags = PyBUF_SIMPLE
 *         if not readonly: flags |= PyBUF_WRITABLE
 *         cdef memory mem = <memory>memory.__new__(memory)             # <<<<<<<<<<<<<<
 *         PyMPI_GetBuffer(obj, &mem.view, flags)
 *         mem.view.readonly = readonly
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_memory(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_memory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_mem = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":164
 *         if not readonly: flags |= PyBUF_WRITABLE
 *         cdef memory mem = <memory>memory.__new__(memory)
 *         PyMPI_GetBuffer(obj, &mem.view, flags)             # <<<<<<<<<<<<<<
 *         mem.view.readonly = readonly
 *         return mem
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_GetBuffer(__pyx_v_obj, (&__pyx_v_mem->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 164, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":165
 *         cdef memory mem = <memory>memory.__new__(memory)
 *         PyMPI_GetBuffer(obj, &mem.view, flags)
 *         mem.view.readonly = readonly             # <<<<<<<<<<<<<<
 *         return mem
 * 
 */
  __pyx_v_mem->view.readonly = __pyx_v_readonly;

  /* "mpi4py/MPI/asbuffer.pxi":166
 *         PyMPI_GetBuffer(obj, &mem.view, flags)
 *         mem.view.readonly = readonly
 *         return mem             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_mem));
  __pyx_r = ((PyObject *)__pyx_v_mem);
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":159
 * 
 *     @staticmethod
 *     def frombuffer(obj, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from buffer-like object"""
 *         cdef int flags = PyBUF_SIMPLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.memory.frombuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":169
 * 
 *     @staticmethod
 *     def fromaddress(address, nbytes, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from address and size in bytes"""
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_7fromaddress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6memory_6fromaddress[] = "memory.fromaddress(address, nbytes, bool readonly=False)\nMemory from address and size in bytes";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_6memory_7fromaddress = {"fromaddress", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6memory_7fromaddress, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6memory_6fromaddress};
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_7fromaddress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_nbytes = 0;
  int __pyx_v_readonly;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fromaddress (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,&__pyx_n_s_nbytes,&__pyx_n_s_readonly,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nbytes)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("fromaddress", 0, 2, 3, 1); __PYX_ERR(0, 169, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_readonly);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fromaddress") < 0)) __PYX_ERR(0, 169, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_address = values[0];
    __pyx_v_nbytes = values[1];
    if (values[2]) {
      __pyx_v_readonly = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_readonly == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 169, __pyx_L3_error)
    } else {
      __pyx_v_readonly = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fromaddress", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 169, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.memory.fromaddress", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_6fromaddress(__pyx_v_address, __pyx_v_nbytes, __pyx_v_readonly);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_6fromaddress(PyObject *__pyx_v_address, PyObject *__pyx_v_nbytes, int __pyx_v_readonly) {
  void *__pyx_v_buf;
  Py_ssize_t __pyx_v_size;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("fromaddress", 0);

  /* "mpi4py/MPI/asbuffer.pxi":171
 *     def fromaddress(address, nbytes, bint readonly=False):
 *         """Memory from address and size in bytes"""
 *         cdef void *buf = PyLong_AsVoidPtr(address)             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t size = nbytes
 *         if size < 0:
 */
  __pyx_v_buf = PyLong_AsVoidPtr(__pyx_v_address);

  /* "mpi4py/MPI/asbuffer.pxi":172
 *         """Memory from address and size in bytes"""
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 *         cdef Py_ssize_t size = nbytes             # <<<<<<<<<<<<<<
 *         if size < 0:
 *             raise ValueError("expecting non-negative buffer length")
 */
  __pyx_t_1 = __Pyx_PyIndex_AsSsize_t(__pyx_v_nbytes); if (unlikely((__pyx_t_1 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 172, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;

  /* "mpi4py/MPI/asbuffer.pxi":173
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 *         cdef Py_ssize_t size = nbytes
 *         if size < 0:             # <<<<<<<<<<<<<<
 *             raise ValueError("expecting non-negative buffer length")
 *         elif size > 0 and buf == NULL:
 */
  __pyx_t_2 = ((__pyx_v_size < 0) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/asbuffer.pxi":174
 *         cdef Py_ssize_t size = nbytes
 *         if size < 0:
 *             raise ValueError("expecting non-negative buffer length")             # <<<<<<<<<<<<<<
 *         elif size > 0 and buf == NULL:
 *             raise ValueError("expecting non-NULL address")
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 174, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":173
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 *         cdef Py_ssize_t size = nbytes
 *         if size < 0:             # <<<<<<<<<<<<<<
 *             raise ValueError("expecting non-negative buffer length")
 *         elif size > 0 and buf == NULL:
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":175
 *         if size < 0:
 *             raise ValueError("expecting non-negative buffer length")
 *         elif size > 0 and buf == NULL:             # <<<<<<<<<<<<<<
 *             raise ValueError("expecting non-NULL address")
 *         cdef memory mem = <memory>memory.__new__(memory)
 */
  __pyx_t_4 = ((__pyx_v_size > 0) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((__pyx_v_buf == NULL) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/asbuffer.pxi":176
 *             raise ValueError("expecting non-negative buffer length")
 *         elif size > 0 and buf == NULL:
 *             raise ValueError("expecting non-NULL address")             # <<<<<<<<<<<<<<
 *         cdef memory mem = <memory>memory.__new__(memory)
 *         PyBuffer_FillInfo(&mem.view, <object>NULL,
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 176, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":175
 *         if size < 0:
 *             raise ValueError("expecting non-negative buffer length")
 *         elif size > 0 and buf == NULL:             # <<<<<<<<<<<<<<
 *             raise ValueError("expecting non-NULL address")
 *         cdef memory mem = <memory>memory.__new__(memory)
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":177
 *         elif size > 0 and buf == NULL:
 *             raise ValueError("expecting non-NULL address")
 *         cdef memory mem = <memory>memory.__new__(memory)             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(&mem.view, <object>NULL,
 *                           buf, size, readonly, PyBUF_SIMPLE)
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_memory(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_memory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_5 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_5);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_mem = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":178
 *             raise ValueError("expecting non-NULL address")
 *         cdef memory mem = <memory>memory.__new__(memory)
 *         PyBuffer_FillInfo(&mem.view, <object>NULL,             # <<<<<<<<<<<<<<
 *                           buf, size, readonly, PyBUF_SIMPLE)
 *         return mem
 */
  __pyx_t_6 = PyBuffer_FillInfo((&__pyx_v_mem->view), ((PyObject *)NULL), __pyx_v_buf, __pyx_v_size, __pyx_v_readonly, PyBUF_SIMPLE); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 178, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":180
 *         PyBuffer_FillInfo(&mem.view, <object>NULL,
 *                           buf, size, readonly, PyBUF_SIMPLE)
 *         return mem             # <<<<<<<<<<<<<<
 * 
 *     # properties
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_mem));
  __pyx_r = ((PyObject *)__pyx_v_mem);
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":169
 * 
 *     @staticmethod
 *     def fromaddress(address, nbytes, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from address and size in bytes"""
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.memory.fromaddress", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":186
 *     property address:
 *         """Memory address"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return PyLong_FromVoidPtr(self.view.buf)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_7address_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_7address_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_7address___get__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_7address___get__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":187
 *         """Memory address"""
 *         def __get__(self):
 *             return PyLong_FromVoidPtr(self.view.buf)             # <<<<<<<<<<<<<<
 * 
 *     property nbytes:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_self->view.buf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":186
 *     property address:
 *         """Memory address"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return PyLong_FromVoidPtr(self.view.buf)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.memory.address.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":191
 *     property nbytes:
 *         """Memory size (in bytes)"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.view.len
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_6nbytes_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_6nbytes___get__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_6nbytes___get__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":192
 *         """Memory size (in bytes)"""
 *         def __get__(self):
 *             return self.view.len             # <<<<<<<<<<<<<<
 * 
 *     property readonly:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":191
 *     property nbytes:
 *         """Memory size (in bytes)"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.view.len
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.memory.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":196
 *     property readonly:
 *         """Boolean indicating whether the memory is read-only"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.view.readonly
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_8readonly_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_8readonly_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_8readonly___get__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_8readonly___get__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":197
 *         """Boolean indicating whether the memory is read-only"""
 *         def __get__(self):
 *             return self.view.readonly             # <<<<<<<<<<<<<<
 * 
 *     # convenience methods
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->view.readonly); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":196
 *     property readonly:
 *         """Boolean indicating whether the memory is read-only"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.view.readonly
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.memory.readonly.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":201
 *     # convenience methods
 * 
 *     def tobytes(self):             # <<<<<<<<<<<<<<
 *         """Return the data in the buffer as a byte string"""
 *         return PyBytes_FromStringAndSize(<char*>self.view.buf, self.view.len)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_9tobytes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6memory_8tobytes[] = "memory.tobytes(self)\nReturn the data in the buffer as a byte string";
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_9tobytes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tobytes (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("tobytes", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "tobytes", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_8tobytes(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_8tobytes(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("tobytes", 0);

  /* "mpi4py/MPI/asbuffer.pxi":203
 *     def tobytes(self):
 *         """Return the data in the buffer as a byte string"""
 *         return PyBytes_FromStringAndSize(<char*>self.view.buf, self.view.len)             # <<<<<<<<<<<<<<
 * 
 *     def release(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyBytes_FromStringAndSize(((char *)__pyx_v_self->view.buf), __pyx_v_self->view.len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":201
 *     # convenience methods
 * 
 *     def tobytes(self):             # <<<<<<<<<<<<<<
 *         """Return the data in the buffer as a byte string"""
 *         return PyBytes_FromStringAndSize(<char*>self.view.buf, self.view.len)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.memory.tobytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":205
 *         return PyBytes_FromStringAndSize(<char*>self.view.buf, self.view.len)
 * 
 *     def release(self):             # <<<<<<<<<<<<<<
 *         """Release the underlying buffer exposed by the memory object"""
 *         PyBuffer_Release(&self.view)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_11release(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6memory_10release[] = "memory.release(self)\nRelease the underlying buffer exposed by the memory object";
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_11release(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("release (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("release", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "release", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_10release(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_10release(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("release", 0);

  /* "mpi4py/MPI/asbuffer.pxi":207
 *     def release(self):
 *         """Release the underlying buffer exposed by the memory object"""
 *         PyBuffer_Release(&self.view)             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(&self.view, <object>NULL,
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 */
  PyBuffer_Release((&__pyx_v_self->view));

  /* "mpi4py/MPI/asbuffer.pxi":208
 *         """Release the underlying buffer exposed by the memory object"""
 *         PyBuffer_Release(&self.view)
 *         PyBuffer_FillInfo(&self.view, <object>NULL,             # <<<<<<<<<<<<<<
 *                           NULL, 0, 0, PyBUF_SIMPLE)
 * 
 */
  __pyx_t_1 = PyBuffer_FillInfo((&__pyx_v_self->view), ((PyObject *)NULL), NULL, 0, 0, PyBUF_SIMPLE); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 208, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":205
 *         return PyBytes_FromStringAndSize(<char*>self.view.buf, self.view.len)
 * 
 *     def release(self):             # <<<<<<<<<<<<<<
 *         """Release the underlying buffer exposed by the memory object"""
 *         PyBuffer_Release(&self.view)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.memory.release", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":213
 *     # buffer interface (PEP 3118)
 * 
 *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         PyBuffer_FillInfo(view, self,
 */

/* Python wrapper */
static CYTHON_UNUSED int __pyx_pw_6mpi4py_3MPI_6memory_13__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /*proto*/
static CYTHON_UNUSED int __pyx_pw_6mpi4py_3MPI_6memory_13__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_12__getbuffer__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self), ((Py_buffer *)__pyx_v_view), ((int)__pyx_v_flags));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6memory_12__getbuffer__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  if (__pyx_v_view == NULL) {
    PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
    return -1;
  }
  __Pyx_RefNannySetupContext("__getbuffer__", 0);
  __pyx_v_view->obj = NULL;

  /* "mpi4py/MPI/asbuffer.pxi":214
 * 
 *     def __getbuffer__(self, Py_buffer *view, int flags):
 *         if view.obj == Py_None: Py_CLEAR(view.obj)             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(view, self,
 *                           self.view.buf, self.view.len,
 */
  __pyx_t_1 = ((__pyx_v_view->obj == Py_None) != 0);
  if (__pyx_t_1) {
    Py_CLEAR(__pyx_v_view->obj);
  }

  /* "mpi4py/MPI/asbuffer.pxi":215
 *     def __getbuffer__(self, Py_buffer *view, int flags):
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         PyBuffer_FillInfo(view, self,             # <<<<<<<<<<<<<<
 *                           self.view.buf, self.view.len,
 *                           self.view.readonly, flags)
 */
  __pyx_t_2 = PyBuffer_FillInfo(__pyx_v_view, ((PyObject *)__pyx_v_self), __pyx_v_self->view.buf, __pyx_v_self->view.len, __pyx_v_self->view.readonly, __pyx_v_flags); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 215, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":213
 *     # buffer interface (PEP 3118)
 * 
 *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         PyBuffer_FillInfo(view, self,
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.memory.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  Py_CLEAR(__pyx_v_view->obj);
  goto __pyx_L2;
  __pyx_L0:;
  __pyx_L2:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":221
 *     # buffer interface (legacy)
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
 *         if lenp != NULL:
 *             lenp[0] = self.view.len
 */

/* Python wrapper */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_15__getsegcount__(PyObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_15__getsegcount__(PyObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getsegcount__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_14__getsegcount__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self), ((Py_ssize_t *)__pyx_v_lenp));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_14__getsegcount__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_ssize_t *__pyx_v_lenp) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  __Pyx_RefNannySetupContext("__getsegcount__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":222
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 *         if lenp != NULL:             # <<<<<<<<<<<<<<
 *             lenp[0] = self.view.len
 *         return 1
 */
  __pyx_t_1 = ((__pyx_v_lenp != NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asbuffer.pxi":223
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 *         if lenp != NULL:
 *             lenp[0] = self.view.len             # <<<<<<<<<<<<<<
 *         return 1
 * 
 */
    __pyx_t_2 = __pyx_v_self->view.len;
    (__pyx_v_lenp[0]) = __pyx_t_2;

    /* "mpi4py/MPI/asbuffer.pxi":222
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 *         if lenp != NULL:             # <<<<<<<<<<<<<<
 *             lenp[0] = self.view.len
 *         return 1
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":224
 *         if lenp != NULL:
 *             lenp[0] = self.view.len
 *         return 1             # <<<<<<<<<<<<<<
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 */
  __pyx_r = 1;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":221
 *     # buffer interface (legacy)
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
 *         if lenp != NULL:
 *             lenp[0] = self.view.len
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "mpi4py/MPI/asbuffer.pxi":226
 *         return 1
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */

/* Python wrapper */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_17__getreadbuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_17__getreadbuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getreadbuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_16__getreadbuffer__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self), ((Py_ssize_t)__pyx_v_idx), ((void **)__pyx_v_p));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_16__getreadbuffer__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  void *__pyx_t_3;
  __Pyx_RefNannySetupContext("__getreadbuffer__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":227
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf
 */
  __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asbuffer.pxi":228
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         p[0] = self.view.buf
 *         return self.view.len
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 228, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":227
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":229
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf             # <<<<<<<<<<<<<<
 *         return self.view.len
 * 
 */
  __pyx_t_3 = __pyx_v_self->view.buf;
  (__pyx_v_p[0]) = __pyx_t_3;

  /* "mpi4py/MPI/asbuffer.pxi":230
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf
 *         return self.view.len             # <<<<<<<<<<<<<<
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
 */
  __pyx_r = __pyx_v_self->view.len;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":226
 *         return 1
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.memory.__getreadbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "mpi4py/MPI/asbuffer.pxi":232
 *         return self.view.len
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 */

/* Python wrapper */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_19__getwritebuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_19__getwritebuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getwritebuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_18__getwritebuffer__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self), ((Py_ssize_t)__pyx_v_idx), ((void **)__pyx_v_p));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_18__getwritebuffer__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_p) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  void *__pyx_t_3;
  __Pyx_RefNannySetupContext("__getwritebuffer__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":233
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
 *         if self.view.readonly:             # <<<<<<<<<<<<<<
 *             raise TypeError("memory buffer is read-only")
 *         if idx != 0:
 */
  __pyx_t_1 = (__pyx_v_self->view.readonly != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asbuffer.pxi":234
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 234, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":233
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
 *         if self.view.readonly:             # <<<<<<<<<<<<<<
 *             raise TypeError("memory buffer is read-only")
 *         if idx != 0:
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":235
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf
 */
  __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asbuffer.pxi":236
 *             raise TypeError("memory buffer is read-only")
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         p[0] = self.view.buf
 *         return self.view.len
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 236, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":235
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":237
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf             # <<<<<<<<<<<<<<
 *         return self.view.len
 * 
 */
  __pyx_t_3 = __pyx_v_self->view.buf;
  (__pyx_v_p[0]) = __pyx_t_3;

  /* "mpi4py/MPI/asbuffer.pxi":238
 *             raise SystemError("accessing non-existent buffer segment")
 *         p[0] = self.view.buf
 *         return self.view.len             # <<<<<<<<<<<<<<
 * 
 *     # sequence interface (basic)
 */
  __pyx_r = __pyx_v_self->view.len;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":232
 *         return self.view.len
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.memory.__getwritebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "mpi4py/MPI/asbuffer.pxi":242
 *     # sequence interface (basic)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.view.len
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_21__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_6memory_21__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_20__len__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_6mpi4py_3MPI_6memory_20__len__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":243
 * 
 *     def __len__(self):
 *         return self.view.len             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, object item):
 */
  __pyx_r = __pyx_v_self->view.len;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":242
 *     # sequence interface (basic)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.view.len
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":245
 *         return self.view.len
 * 
 *     def __getitem__(self, object item):             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_23__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6memory_23__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_22__getitem__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self), ((PyObject *)__pyx_v_item));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6memory_22__getitem__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, PyObject *__pyx_v_item) {
  Py_ssize_t __pyx_v_start;
  Py_ssize_t __pyx_v_stop;
  Py_ssize_t __pyx_v_step;
  Py_ssize_t __pyx_v_slen;
  unsigned char *__pyx_v_buf;
  Py_ssize_t __pyx_v_blen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":246
 * 
 *     def __getitem__(self, object item):
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0             # <<<<<<<<<<<<<<
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 *         cdef Py_ssize_t blen = self.view.len
 */
  __pyx_v_start = 0;
  __pyx_v_stop = 0;
  __pyx_v_step = 1;
  __pyx_v_slen = 0;

  /* "mpi4py/MPI/asbuffer.pxi":247
 *     def __getitem__(self, object item):
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t blen = self.view.len
 *         if PyIndex_Check(item):
 */
  __pyx_v_buf = ((unsigned char *)__pyx_v_self->view.buf);

  /* "mpi4py/MPI/asbuffer.pxi":248
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 *         cdef Py_ssize_t blen = self.view.len             # <<<<<<<<<<<<<<
 *         if PyIndex_Check(item):
 *             start = PyNumber_AsSsize_t(item, IndexError)
 */
  __pyx_t_1 = __pyx_v_self->view.len;
  __pyx_v_blen = __pyx_t_1;

  /* "mpi4py/MPI/asbuffer.pxi":249
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 *         cdef Py_ssize_t blen = self.view.len
 *         if PyIndex_Check(item):             # <<<<<<<<<<<<<<
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 */
  __pyx_t_2 = (PyIndex_Check(__pyx_v_item) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asbuffer.pxi":250
 *         cdef Py_ssize_t blen = self.view.len
 *         if PyIndex_Check(item):
 *             start = PyNumber_AsSsize_t(item, IndexError)             # <<<<<<<<<<<<<<
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:
 */
    __pyx_t_1 = PyNumber_AsSsize_t(__pyx_v_item, __pyx_builtin_IndexError); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 250, __pyx_L1_error)
    __pyx_v_start = __pyx_t_1;

    /* "mpi4py/MPI/asbuffer.pxi":251
 *         if PyIndex_Check(item):
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen             # <<<<<<<<<<<<<<
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")
 */
    __pyx_t_2 = ((__pyx_v_start < 0) != 0);
    if (__pyx_t_2) {
      __pyx_v_start = (__pyx_v_start + __pyx_v_blen);
    }

    /* "mpi4py/MPI/asbuffer.pxi":252
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:             # <<<<<<<<<<<<<<
 *                 raise IndexError("index out of range")
 *             return <long>buf[start]
 */
    __pyx_t_3 = ((__pyx_v_start < 0) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_3 = ((__pyx_v_start >= __pyx_v_blen) != 0);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L6_bool_binop_done:;
    if (unlikely(__pyx_t_2)) {

      /* "mpi4py/MPI/asbuffer.pxi":253
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")             # <<<<<<<<<<<<<<
 *             return <long>buf[start]
 *         elif PySlice_Check(item):
 */
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 253, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 253, __pyx_L1_error)

      /* "mpi4py/MPI/asbuffer.pxi":252
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:             # <<<<<<<<<<<<<<
 *                 raise IndexError("index out of range")
 *             return <long>buf[start]
 */
    }

    /* "mpi4py/MPI/asbuffer.pxi":254
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")
 *             return <long>buf[start]             # <<<<<<<<<<<<<<
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyInt_From_long(((long)(__pyx_v_buf[__pyx_v_start]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/asbuffer.pxi":249
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 *         cdef Py_ssize_t blen = self.view.len
 *         if PyIndex_Check(item):             # <<<<<<<<<<<<<<
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":255
 *                 raise IndexError("index out of range")
 *             return <long>buf[start]
 *         elif PySlice_Check(item):             # <<<<<<<<<<<<<<
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 */
  __pyx_t_2 = (PySlice_Check(__pyx_v_item) != 0);
  if (likely(__pyx_t_2)) {

    /* "mpi4py/MPI/asbuffer.pxi":256
 *             return <long>buf[start]
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)             # <<<<<<<<<<<<<<
 *             if step != 1: raise IndexError("slice with step not supported")
 *             return asbuffer(self, buf+start, slen, self.view.readonly)
 */
    __pyx_t_5 = PySlice_GetIndicesEx(__pyx_v_item, __pyx_v_blen, (&__pyx_v_start), (&__pyx_v_stop), (&__pyx_v_step), (&__pyx_v_slen)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 256, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":257
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")             # <<<<<<<<<<<<<<
 *             return asbuffer(self, buf+start, slen, self.view.readonly)
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_step != 1) != 0);
    if (unlikely(__pyx_t_2)) {
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 257, __pyx_L1_error)
    }

    /* "mpi4py/MPI/asbuffer.pxi":258
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 *             return asbuffer(self, buf+start, slen, self.view.readonly)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError("index must be integer or slice")
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = ((PyObject *)__pyx_f_6mpi4py_3MPI_asbuffer(((PyObject *)__pyx_v_self), (__pyx_v_buf + __pyx_v_start), __pyx_v_slen, __pyx_v_self->view.readonly)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/asbuffer.pxi":255
 *                 raise IndexError("index out of range")
 *             return <long>buf[start]
 *         elif PySlice_Check(item):             # <<<<<<<<<<<<<<
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":260
 *             return asbuffer(self, buf+start, slen, self.view.readonly)
 *         else:
 *             raise TypeError("index must be integer or slice")             # <<<<<<<<<<<<<<
 * 
 *     def __setitem__(self, object item, object value):
 */
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 260, __pyx_L1_error)
  }

  /* "mpi4py/MPI/asbuffer.pxi":245
 *         return self.view.len
 * 
 *     def __getitem__(self, object item):             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.memory.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":262
 *             raise TypeError("index must be integer or slice")
 * 
 *     def __setitem__(self, object item, object value):             # <<<<<<<<<<<<<<
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6memory_25__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6memory_25__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6memory_24__setitem__(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6memory_24__setitem__(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
  Py_ssize_t __pyx_v_start;
  Py_ssize_t __pyx_v_stop;
  Py_ssize_t __pyx_v_step;
  Py_ssize_t __pyx_v_slen;
  unsigned char *__pyx_v_buf;
  Py_ssize_t __pyx_v_blen;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_inmem = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  unsigned char __pyx_t_5;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("__setitem__", 0);

  /* "mpi4py/MPI/asbuffer.pxi":263
 * 
 *     def __setitem__(self, object item, object value):
 *         if self.view.readonly:             # <<<<<<<<<<<<<<
 *             raise TypeError("memory buffer is read-only")
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 */
  __pyx_t_1 = (__pyx_v_self->view.readonly != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asbuffer.pxi":264
 *     def __setitem__(self, object item, object value):
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 264, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":263
 * 
 *     def __setitem__(self, object item, object value):
 *         if self.view.readonly:             # <<<<<<<<<<<<<<
 *             raise TypeError("memory buffer is read-only")
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":265
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0             # <<<<<<<<<<<<<<
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 *         cdef Py_ssize_t blen = self.view.len
 */
  __pyx_v_start = 0;
  __pyx_v_stop = 0;
  __pyx_v_step = 1;
  __pyx_v_slen = 0;

  /* "mpi4py/MPI/asbuffer.pxi":266
 *             raise TypeError("memory buffer is read-only")
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t blen = self.view.len
 *         cdef memory inmem
 */
  __pyx_v_buf = ((unsigned char *)__pyx_v_self->view.buf);

  /* "mpi4py/MPI/asbuffer.pxi":267
 *         cdef Py_ssize_t start=0, stop=0, step=1, slen=0
 *         cdef unsigned char *buf = <unsigned char*>self.view.buf
 *         cdef Py_ssize_t blen = self.view.len             # <<<<<<<<<<<<<<
 *         cdef memory inmem
 *         if PyIndex_Check(item):
 */
  __pyx_t_3 = __pyx_v_self->view.len;
  __pyx_v_blen = __pyx_t_3;

  /* "mpi4py/MPI/asbuffer.pxi":269
 *         cdef Py_ssize_t blen = self.view.len
 *         cdef memory inmem
 *         if PyIndex_Check(item):             # <<<<<<<<<<<<<<
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 */
  __pyx_t_1 = (PyIndex_Check(__pyx_v_item) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asbuffer.pxi":270
 *         cdef memory inmem
 *         if PyIndex_Check(item):
 *             start = PyNumber_AsSsize_t(item, IndexError)             # <<<<<<<<<<<<<<
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:
 */
    __pyx_t_3 = PyNumber_AsSsize_t(__pyx_v_item, __pyx_builtin_IndexError); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 270, __pyx_L1_error)
    __pyx_v_start = __pyx_t_3;

    /* "mpi4py/MPI/asbuffer.pxi":271
 *         if PyIndex_Check(item):
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen             # <<<<<<<<<<<<<<
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")
 */
    __pyx_t_1 = ((__pyx_v_start < 0) != 0);
    if (__pyx_t_1) {
      __pyx_v_start = (__pyx_v_start + __pyx_v_blen);
    }

    /* "mpi4py/MPI/asbuffer.pxi":272
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:             # <<<<<<<<<<<<<<
 *                 raise IndexError("index out of range")
 *             buf[start] = <unsigned char>value
 */
    __pyx_t_4 = ((__pyx_v_start < 0) != 0);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_1 = __pyx_t_4;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_4 = ((__pyx_v_start >= __pyx_v_blen) != 0);
    __pyx_t_1 = __pyx_t_4;
    __pyx_L7_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/asbuffer.pxi":273
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")             # <<<<<<<<<<<<<<
 *             buf[start] = <unsigned char>value
 *         elif PySlice_Check(item):
 */
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 273, __pyx_L1_error)

      /* "mpi4py/MPI/asbuffer.pxi":272
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:             # <<<<<<<<<<<<<<
 *                 raise IndexError("index out of range")
 *             buf[start] = <unsigned char>value
 */
    }

    /* "mpi4py/MPI/asbuffer.pxi":274
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")
 *             buf[start] = <unsigned char>value             # <<<<<<<<<<<<<<
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 */
    __pyx_t_5 = __Pyx_PyInt_As_unsigned_char(__pyx_v_value); if (unlikely((__pyx_t_5 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 274, __pyx_L1_error)
    (__pyx_v_buf[__pyx_v_start]) = ((unsigned char)__pyx_t_5);

    /* "mpi4py/MPI/asbuffer.pxi":269
 *         cdef Py_ssize_t blen = self.view.len
 *         cdef memory inmem
 *         if PyIndex_Check(item):             # <<<<<<<<<<<<<<
 *             start = PyNumber_AsSsize_t(item, IndexError)
 *             if start < 0: start += blen
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/asbuffer.pxi":275
 *                 raise IndexError("index out of range")
 *             buf[start] = <unsigned char>value
 *         elif PySlice_Check(item):             # <<<<<<<<<<<<<<
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 */
  __pyx_t_1 = (PySlice_Check(__pyx_v_item) != 0);
  if (likely(__pyx_t_1)) {

    /* "mpi4py/MPI/asbuffer.pxi":276
 *             buf[start] = <unsigned char>value
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)             # <<<<<<<<<<<<<<
 *             if step != 1: raise IndexError("slice with step not supported")
 *             if PyIndex_Check(value):
 */
    __pyx_t_6 = PySlice_GetIndicesEx(__pyx_v_item, __pyx_v_blen, (&__pyx_v_start), (&__pyx_v_stop), (&__pyx_v_step), (&__pyx_v_slen)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 276, __pyx_L1_error)

    /* "mpi4py/MPI/asbuffer.pxi":277
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")             # <<<<<<<<<<<<<<
 *             if PyIndex_Check(value):
 *                 <void>memset(buf+start, <unsigned char>value, <size_t>slen)
 */
    __pyx_t_1 = ((__pyx_v_step != 1) != 0);
    if (unlikely(__pyx_t_1)) {
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 277, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 277, __pyx_L1_error)
    }

    /* "mpi4py/MPI/asbuffer.pxi":278
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 *             if PyIndex_Check(value):             # <<<<<<<<<<<<<<
 *                 <void>memset(buf+start, <unsigned char>value, <size_t>slen)
 *             else:
 */
    __pyx_t_1 = (PyIndex_Check(__pyx_v_value) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/asbuffer.pxi":279
 *             if step != 1: raise IndexError("slice with step not supported")
 *             if PyIndex_Check(value):
 *                 <void>memset(buf+start, <unsigned char>value, <size_t>slen)             # <<<<<<<<<<<<<<
 *             else:
 *                 inmem = getbuffer(value, 1, 0)
 */
      __pyx_t_5 = __Pyx_PyInt_As_unsigned_char(__pyx_v_value); if (unlikely((__pyx_t_5 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 279, __pyx_L1_error)
      ((void)memset((__pyx_v_buf + __pyx_v_start), ((unsigned char)__pyx_t_5), ((size_t)__pyx_v_slen)));

      /* "mpi4py/MPI/asbuffer.pxi":278
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 *             if PyIndex_Check(value):             # <<<<<<<<<<<<<<
 *                 <void>memset(buf+start, <unsigned char>value, <size_t>slen)
 *             else:
 */
      goto __pyx_L10;
    }

    /* "mpi4py/MPI/asbuffer.pxi":281
 *                 <void>memset(buf+start, <unsigned char>value, <size_t>slen)
 *             else:
 *                 inmem = getbuffer(value, 1, 0)             # <<<<<<<<<<<<<<
 *                 if inmem.view.len != slen:
 *                     raise ValueError("slice length does not match buffer")
 */
    /*else*/ {
      __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer(__pyx_v_value, 1, 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_inmem = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_2);
      __pyx_t_2 = 0;

      /* "mpi4py/MPI/asbuffer.pxi":282
 *             else:
 *                 inmem = getbuffer(value, 1, 0)
 *                 if inmem.view.len != slen:             # <<<<<<<<<<<<<<
 *                     raise ValueError("slice length does not match buffer")
 *                 <void>memmove(buf+start, inmem.view.buf, <size_t>slen)
 */
      __pyx_t_1 = ((__pyx_v_inmem->view.len != __pyx_v_slen) != 0);
      if (unlikely(__pyx_t_1)) {

        /* "mpi4py/MPI/asbuffer.pxi":283
 *                 inmem = getbuffer(value, 1, 0)
 *                 if inmem.view.len != slen:
 *                     raise ValueError("slice length does not match buffer")             # <<<<<<<<<<<<<<
 *                 <void>memmove(buf+start, inmem.view.buf, <size_t>slen)
 *         else:
 */
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 283, __pyx_L1_error)

        /* "mpi4py/MPI/asbuffer.pxi":282
 *             else:
 *                 inmem = getbuffer(value, 1, 0)
 *                 if inmem.view.len != slen:             # <<<<<<<<<<<<<<
 *                     raise ValueError("slice length does not match buffer")
 *                 <void>memmove(buf+start, inmem.view.buf, <size_t>slen)
 */
      }

      /* "mpi4py/MPI/asbuffer.pxi":284
 *                 if inmem.view.len != slen:
 *                     raise ValueError("slice length does not match buffer")
 *                 <void>memmove(buf+start, inmem.view.buf, <size_t>slen)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError("index must be integer or slice")
 */
      ((void)memmove((__pyx_v_buf + __pyx_v_start), __pyx_v_inmem->view.buf, ((size_t)__pyx_v_slen)));
    }
    __pyx_L10:;

    /* "mpi4py/MPI/asbuffer.pxi":275
 *                 raise IndexError("index out of range")
 *             buf[start] = <unsigned char>value
 *         elif PySlice_Check(item):             # <<<<<<<<<<<<<<
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/asbuffer.pxi":286
 *                 <void>memmove(buf+start, inmem.view.buf, <size_t>slen)
 *         else:
 *             raise TypeError("index must be integer or slice")             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 286, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/asbuffer.pxi":262
 *             raise TypeError("index must be integer or slice")
 * 
 *     def __setitem__(self, object item, object value):             # <<<<<<<<<<<<<<
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.memory.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_inmem);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":290
 * #------------------------------------------------------------------------------
 * 
 * cdef inline memory newbuffer():             # <<<<<<<<<<<<<<
 *     return <memory>memory.__new__(memory)
 * 
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_newbuffer(void) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("newbuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":291
 * 
 * cdef inline memory newbuffer():
 *     return <memory>memory.__new__(memory)             # <<<<<<<<<<<<<<
 * 
 * cdef inline memory getbuffer(object ob, bint readonly, bint format):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_memory(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_memory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1)));
  __pyx_r = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":290
 * #------------------------------------------------------------------------------
 * 
 * cdef inline memory newbuffer():             # <<<<<<<<<<<<<<
 *     return <memory>memory.__new__(memory)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.newbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":293
 *     return <memory>memory.__new__(memory)
 * 
 * cdef inline memory getbuffer(object ob, bint readonly, bint format):             # <<<<<<<<<<<<<<
 *     cdef memory buf = newbuffer()
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_getbuffer(PyObject *__pyx_v_ob, int __pyx_v_readonly, int __pyx_v_format) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_buf = 0;
  int __pyx_v_flags;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("getbuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":294
 * 
 * cdef inline memory getbuffer(object ob, bint readonly, bint format):
 *     cdef memory buf = newbuffer()             # <<<<<<<<<<<<<<
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS
 *     if not readonly:
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_newbuffer()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":295
 * cdef inline memory getbuffer(object ob, bint readonly, bint format):
 *     cdef memory buf = newbuffer()
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
 *     if not readonly:
 *         flags |= PyBUF_WRITABLE
 */
  __pyx_v_flags = PyBUF_ANY_CONTIGUOUS;

  /* "mpi4py/MPI/asbuffer.pxi":296
 *     cdef memory buf = newbuffer()
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS
 *     if not readonly:             # <<<<<<<<<<<<<<
 *         flags |= PyBUF_WRITABLE
 *     if format:
 */
  __pyx_t_2 = ((!(__pyx_v_readonly != 0)) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asbuffer.pxi":297
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS
 *     if not readonly:
 *         flags |= PyBUF_WRITABLE             # <<<<<<<<<<<<<<
 *     if format:
 *         flags |= PyBUF_FORMAT
 */
    __pyx_v_flags = (__pyx_v_flags | PyBUF_WRITABLE);

    /* "mpi4py/MPI/asbuffer.pxi":296
 *     cdef memory buf = newbuffer()
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS
 *     if not readonly:             # <<<<<<<<<<<<<<
 *         flags |= PyBUF_WRITABLE
 *     if format:
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":298
 *     if not readonly:
 *         flags |= PyBUF_WRITABLE
 *     if format:             # <<<<<<<<<<<<<<
 *         flags |= PyBUF_FORMAT
 *     PyMPI_GetBuffer(ob, &buf.view, flags)
 */
  __pyx_t_2 = (__pyx_v_format != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asbuffer.pxi":299
 *         flags |= PyBUF_WRITABLE
 *     if format:
 *         flags |= PyBUF_FORMAT             # <<<<<<<<<<<<<<
 *     PyMPI_GetBuffer(ob, &buf.view, flags)
 *     return buf
 */
    __pyx_v_flags = (__pyx_v_flags | PyBUF_FORMAT);

    /* "mpi4py/MPI/asbuffer.pxi":298
 *     if not readonly:
 *         flags |= PyBUF_WRITABLE
 *     if format:             # <<<<<<<<<<<<<<
 *         flags |= PyBUF_FORMAT
 *     PyMPI_GetBuffer(ob, &buf.view, flags)
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":300
 *     if format:
 *         flags |= PyBUF_FORMAT
 *     PyMPI_GetBuffer(ob, &buf.view, flags)             # <<<<<<<<<<<<<<
 *     return buf
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_GetBuffer(__pyx_v_ob, (&__pyx_v_buf->view), __pyx_v_flags); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 300, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":301
 *         flags |= PyBUF_FORMAT
 *     PyMPI_GetBuffer(ob, &buf.view, flags)
 *     return buf             # <<<<<<<<<<<<<<
 * 
 * cdef inline object getformat(memory buf):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_buf));
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":293
 *     return <memory>memory.__new__(memory)
 * 
 * cdef inline memory getbuffer(object ob, bint readonly, bint format):             # <<<<<<<<<<<<<<
 *     cdef memory buf = newbuffer()
 *     cdef int flags = PyBUF_ANY_CONTIGUOUS
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.getbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":303
 *     return buf
 * 
 * cdef inline object getformat(memory buf):             # <<<<<<<<<<<<<<
 *     cdef Py_buffer *view = &buf.view
 *     #
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_getformat(struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_buf) {
  Py_buffer *__pyx_v_view;
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_v_format = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  __Pyx_RefNannySetupContext("getformat", 0);

  /* "mpi4py/MPI/asbuffer.pxi":304
 * 
 * cdef inline object getformat(memory buf):
 *     cdef Py_buffer *view = &buf.view             # <<<<<<<<<<<<<<
 *     #
 *     if view.obj == NULL:
 */
  __pyx_v_view = (&__pyx_v_buf->view);

  /* "mpi4py/MPI/asbuffer.pxi":306
 *     cdef Py_buffer *view = &buf.view
 *     #
 *     if view.obj == NULL:             # <<<<<<<<<<<<<<
 *         if view.format != NULL:
 *             return pystr(view.format)
 */
  __pyx_t_1 = ((__pyx_v_view->obj == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asbuffer.pxi":307
 *     #
 *     if view.obj == NULL:
 *         if view.format != NULL:             # <<<<<<<<<<<<<<
 *             return pystr(view.format)
 *         else:
 */
    __pyx_t_1 = ((__pyx_v_view->format != NULL) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/asbuffer.pxi":308
 *     if view.obj == NULL:
 *         if view.format != NULL:
 *             return pystr(view.format)             # <<<<<<<<<<<<<<
 *         else:
 *             return "B"
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_pystr(__pyx_v_view->format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 308, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;

      /* "mpi4py/MPI/asbuffer.pxi":307
 *     #
 *     if view.obj == NULL:
 *         if view.format != NULL:             # <<<<<<<<<<<<<<
 *             return pystr(view.format)
 *         else:
 */
    }

    /* "mpi4py/MPI/asbuffer.pxi":310
 *             return pystr(view.format)
 *         else:
 *             return "B"             # <<<<<<<<<<<<<<
 *     elif view.format != NULL:
 *         # XXX this is a hack
 */
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_n_s_B);
      __pyx_r = __pyx_n_s_B;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/asbuffer.pxi":306
 *     cdef Py_buffer *view = &buf.view
 *     #
 *     if view.obj == NULL:             # <<<<<<<<<<<<<<
 *         if view.format != NULL:
 *             return pystr(view.format)
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":311
 *         else:
 *             return "B"
 *     elif view.format != NULL:             # <<<<<<<<<<<<<<
 *         # XXX this is a hack
 *         if view.format != BYTE_FMT:
 */
  __pyx_t_1 = ((__pyx_v_view->format != NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asbuffer.pxi":313
 *     elif view.format != NULL:
 *         # XXX this is a hack
 *         if view.format != BYTE_FMT:             # <<<<<<<<<<<<<<
 *             return pystr(view.format)
 *     #
 */
    __pyx_t_1 = ((__pyx_v_view->format != __pyx_v_6mpi4py_3MPI_BYTE_FMT) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/asbuffer.pxi":314
 *         # XXX this is a hack
 *         if view.format != BYTE_FMT:
 *             return pystr(view.format)             # <<<<<<<<<<<<<<
 *     #
 *     cdef object ob = <object>view.obj
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_pystr(__pyx_v_view->format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 314, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;

      /* "mpi4py/MPI/asbuffer.pxi":313
 *     elif view.format != NULL:
 *         # XXX this is a hack
 *         if view.format != BYTE_FMT:             # <<<<<<<<<<<<<<
 *             return pystr(view.format)
 *     #
 */
    }

    /* "mpi4py/MPI/asbuffer.pxi":311
 *         else:
 *             return "B"
 *     elif view.format != NULL:             # <<<<<<<<<<<<<<
 *         # XXX this is a hack
 *         if view.format != BYTE_FMT:
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":316
 *             return pystr(view.format)
 *     #
 *     cdef object ob = <object>view.obj             # <<<<<<<<<<<<<<
 *     cdef object format = None
 *     try: # numpy.ndarray
 */
  __pyx_t_2 = ((PyObject *)__pyx_v_view->obj);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_ob = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":317
 *     #
 *     cdef object ob = <object>view.obj
 *     cdef object format = None             # <<<<<<<<<<<<<<
 *     try: # numpy.ndarray
 *         format = ob.dtype.char
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_format = Py_None;

  /* "mpi4py/MPI/asbuffer.pxi":318
 *     cdef object ob = <object>view.obj
 *     cdef object format = None
 *     try: # numpy.ndarray             # <<<<<<<<<<<<<<
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {

      /* "mpi4py/MPI/asbuffer.pxi":319
 *     cdef object format = None
 *     try: # numpy.ndarray
 *         format = ob.dtype.char             # <<<<<<<<<<<<<<
 *     except (AttributeError, TypeError):
 *         try: # array.array
 */
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_ob, __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 319, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_char); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 319, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/asbuffer.pxi":318
 *     cdef object ob = <object>view.obj
 *     cdef object format = None
 *     try: # numpy.ndarray             # <<<<<<<<<<<<<<
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):
 */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L11_try_end;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/asbuffer.pxi":320
 *     try: # numpy.ndarray
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):             # <<<<<<<<<<<<<<
 *         try: # array.array
 *             format = ob.typecode
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("mpi4py.MPI.getformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 320, __pyx_L8_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_8);

      /* "mpi4py/MPI/asbuffer.pxi":321
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):
 *         try: # array.array             # <<<<<<<<<<<<<<
 *             format = ob.typecode
 *         except (AttributeError, TypeError):
 */
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        /*try:*/ {

          /* "mpi4py/MPI/asbuffer.pxi":322
 *     except (AttributeError, TypeError):
 *         try: # array.array
 *             format = ob.typecode             # <<<<<<<<<<<<<<
 *         except (AttributeError, TypeError):
 *             if view.format != NULL:
 */
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_ob, __pyx_n_s_typecode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 322, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_12);
          __pyx_t_12 = 0;

          /* "mpi4py/MPI/asbuffer.pxi":321
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):
 *         try: # array.array             # <<<<<<<<<<<<<<
 *             format = ob.typecode
 *         except (AttributeError, TypeError):
 */
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L21_try_end;
        __pyx_L14_error:;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;

        /* "mpi4py/MPI/asbuffer.pxi":323
 *         try: # array.array
 *             format = ob.typecode
 *         except (AttributeError, TypeError):             # <<<<<<<<<<<<<<
 *             if view.format != NULL:
 *                 format = pystr(view.format)
 */
        __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
        if (__pyx_t_7) {
          __Pyx_AddTraceback("mpi4py.MPI.getformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0) __PYX_ERR(0, 323, __pyx_L16_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_GOTREF(__pyx_t_14);

          /* "mpi4py/MPI/asbuffer.pxi":324
 *             format = ob.typecode
 *         except (AttributeError, TypeError):
 *             if view.format != NULL:             # <<<<<<<<<<<<<<
 *                 format = pystr(view.format)
 *     return format
 */
          __pyx_t_1 = ((__pyx_v_view->format != NULL) != 0);
          if (__pyx_t_1) {

            /* "mpi4py/MPI/asbuffer.pxi":325
 *         except (AttributeError, TypeError):
 *             if view.format != NULL:
 *                 format = pystr(view.format)             # <<<<<<<<<<<<<<
 *     return format
 * 
 */
            __pyx_t_15 = __pyx_f_6mpi4py_3MPI_pystr(__pyx_v_view->format); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 325, __pyx_L16_except_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_15);
            __pyx_t_15 = 0;

            /* "mpi4py/MPI/asbuffer.pxi":324
 *             format = ob.typecode
 *         except (AttributeError, TypeError):
 *             if view.format != NULL:             # <<<<<<<<<<<<<<
 *                 format = pystr(view.format)
 *     return format
 */
          }
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L15_exception_handled;
        }
        goto __pyx_L16_except_error;
        __pyx_L16_except_error:;

        /* "mpi4py/MPI/asbuffer.pxi":321
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):
 *         try: # array.array             # <<<<<<<<<<<<<<
 *             format = ob.typecode
 *         except (AttributeError, TypeError):
 */
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L8_except_error;
        __pyx_L15_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_L21_try_end:;
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L7_exception_handled;
    }
    goto __pyx_L8_except_error;
    __pyx_L8_except_error:;

    /* "mpi4py/MPI/asbuffer.pxi":318
 *     cdef object ob = <object>view.obj
 *     cdef object format = None
 *     try: # numpy.ndarray             # <<<<<<<<<<<<<<
 *         format = ob.dtype.char
 *     except (AttributeError, TypeError):
 */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L7_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L11_try_end:;
  }

  /* "mpi4py/MPI/asbuffer.pxi":326
 *             if view.format != NULL:
 *                 format = pystr(view.format)
 *     return format             # <<<<<<<<<<<<<<
 * 
 * cdef inline memory getbuffer_r(object ob, void **base, MPI_Aint *size):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_format);
  __pyx_r = __pyx_v_format;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":303
 *     return buf
 * 
 * cdef inline object getformat(memory buf):             # <<<<<<<<<<<<<<
 *     cdef Py_buffer *view = &buf.view
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("mpi4py.MPI.getformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XDECREF(__pyx_v_format);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":328
 *     return format
 * 
 * cdef inline memory getbuffer_r(object ob, void **base, MPI_Aint *size):             # <<<<<<<<<<<<<<
 *     cdef memory buf = getbuffer(ob, 1, 0)
 *     if base != NULL: base[0] = buf.view.buf
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_getbuffer_r(PyObject *__pyx_v_ob, void **__pyx_v_base, MPI_Aint *__pyx_v_size) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_buf = 0;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  void *__pyx_t_3;
  Py_ssize_t __pyx_t_4;
  __Pyx_RefNannySetupContext("getbuffer_r", 0);

  /* "mpi4py/MPI/asbuffer.pxi":329
 * 
 * cdef inline memory getbuffer_r(object ob, void **base, MPI_Aint *size):
 *     cdef memory buf = getbuffer(ob, 1, 0)             # <<<<<<<<<<<<<<
 *     if base != NULL: base[0] = buf.view.buf
 *     if size != NULL: size[0] = buf.view.len
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer(__pyx_v_ob, 1, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":330
 * cdef inline memory getbuffer_r(object ob, void **base, MPI_Aint *size):
 *     cdef memory buf = getbuffer(ob, 1, 0)
 *     if base != NULL: base[0] = buf.view.buf             # <<<<<<<<<<<<<<
 *     if size != NULL: size[0] = buf.view.len
 *     return buf
 */
  __pyx_t_2 = ((__pyx_v_base != NULL) != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_v_buf->view.buf;
    (__pyx_v_base[0]) = __pyx_t_3;
  }

  /* "mpi4py/MPI/asbuffer.pxi":331
 *     cdef memory buf = getbuffer(ob, 1, 0)
 *     if base != NULL: base[0] = buf.view.buf
 *     if size != NULL: size[0] = buf.view.len             # <<<<<<<<<<<<<<
 *     return buf
 * 
 */
  __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __pyx_v_buf->view.len;
    (__pyx_v_size[0]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/asbuffer.pxi":332
 *     if base != NULL: base[0] = buf.view.buf
 *     if size != NULL: size[0] = buf.view.len
 *     return buf             # <<<<<<<<<<<<<<
 * 
 * cdef inline memory getbuffer_w(object ob, void **base, MPI_Aint *size):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_buf));
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":328
 *     return format
 * 
 * cdef inline memory getbuffer_r(object ob, void **base, MPI_Aint *size):             # <<<<<<<<<<<<<<
 *     cdef memory buf = getbuffer(ob, 1, 0)
 *     if base != NULL: base[0] = buf.view.buf
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.getbuffer_r", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":334
 *     return buf
 * 
 * cdef inline memory getbuffer_w(object ob, void **base, MPI_Aint *size):             # <<<<<<<<<<<<<<
 *     cdef memory buf = getbuffer(ob, 0, 0)
 *     if base != NULL: base[0] = buf.view.buf
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_getbuffer_w(PyObject *__pyx_v_ob, void **__pyx_v_base, MPI_Aint *__pyx_v_size) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_buf = 0;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  void *__pyx_t_3;
  Py_ssize_t __pyx_t_4;
  __Pyx_RefNannySetupContext("getbuffer_w", 0);

  /* "mpi4py/MPI/asbuffer.pxi":335
 * 
 * cdef inline memory getbuffer_w(object ob, void **base, MPI_Aint *size):
 *     cdef memory buf = getbuffer(ob, 0, 0)             # <<<<<<<<<<<<<<
 *     if base != NULL: base[0] = buf.view.buf
 *     if size != NULL: size[0] = buf.view.len
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer(__pyx_v_ob, 0, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":336
 * cdef inline memory getbuffer_w(object ob, void **base, MPI_Aint *size):
 *     cdef memory buf = getbuffer(ob, 0, 0)
 *     if base != NULL: base[0] = buf.view.buf             # <<<<<<<<<<<<<<
 *     if size != NULL: size[0] = buf.view.len
 *     return buf
 */
  __pyx_t_2 = ((__pyx_v_base != NULL) != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_v_buf->view.buf;
    (__pyx_v_base[0]) = __pyx_t_3;
  }

  /* "mpi4py/MPI/asbuffer.pxi":337
 *     cdef memory buf = getbuffer(ob, 0, 0)
 *     if base != NULL: base[0] = buf.view.buf
 *     if size != NULL: size[0] = buf.view.len             # <<<<<<<<<<<<<<
 *     return buf
 * 
 */
  __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __pyx_v_buf->view.len;
    (__pyx_v_size[0]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/asbuffer.pxi":338
 *     if base != NULL: base[0] = buf.view.buf
 *     if size != NULL: size[0] = buf.view.len
 *     return buf             # <<<<<<<<<<<<<<
 * 
 * cdef inline memory asbuffer(object ob, void *base, MPI_Aint size, bint ro):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_buf));
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":334
 *     return buf
 * 
 * cdef inline memory getbuffer_w(object ob, void **base, MPI_Aint *size):             # <<<<<<<<<<<<<<
 *     cdef memory buf = getbuffer(ob, 0, 0)
 *     if base != NULL: base[0] = buf.view.buf
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.getbuffer_w", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":340
 *     return buf
 * 
 * cdef inline memory asbuffer(object ob, void *base, MPI_Aint size, bint ro):             # <<<<<<<<<<<<<<
 *     cdef memory buf = newbuffer()
 *     PyBuffer_FillInfo(&buf.view, ob, base, size, ro, PyBUF_SIMPLE)
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_asbuffer(PyObject *__pyx_v_ob, void *__pyx_v_base, MPI_Aint __pyx_v_size, int __pyx_v_ro) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_buf = 0;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("asbuffer", 0);

  /* "mpi4py/MPI/asbuffer.pxi":341
 * 
 * cdef inline memory asbuffer(object ob, void *base, MPI_Aint size, bint ro):
 *     cdef memory buf = newbuffer()             # <<<<<<<<<<<<<<
 *     PyBuffer_FillInfo(&buf.view, ob, base, size, ro, PyBUF_SIMPLE)
 *     return buf
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_newbuffer()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":342
 * cdef inline memory asbuffer(object ob, void *base, MPI_Aint size, bint ro):
 *     cdef memory buf = newbuffer()
 *     PyBuffer_FillInfo(&buf.view, ob, base, size, ro, PyBUF_SIMPLE)             # <<<<<<<<<<<<<<
 *     return buf
 * 
 */
  __pyx_t_2 = PyBuffer_FillInfo((&__pyx_v_buf->view), __pyx_v_ob, __pyx_v_base, __pyx_v_size, __pyx_v_ro, PyBUF_SIMPLE); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 342, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":343
 *     cdef memory buf = newbuffer()
 *     PyBuffer_FillInfo(&buf.view, ob, base, size, ro, PyBUF_SIMPLE)
 *     return buf             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_buf));
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":340
 *     return buf
 * 
 * cdef inline memory asbuffer(object ob, void *base, MPI_Aint size, bint ro):             # <<<<<<<<<<<<<<
 *     cdef memory buf = newbuffer()
 *     PyBuffer_FillInfo(&buf.view, ob, base, size, ro, PyBUF_SIMPLE)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.asbuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_buf);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":347
 * #------------------------------------------------------------------------------
 * 
 * cdef inline memory asmemory(object ob, void **base, MPI_Aint *size):             # <<<<<<<<<<<<<<
 *     cdef memory mem
 *     if type(ob) is memory:
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_asmemory(PyObject *__pyx_v_ob, void **__pyx_v_base, MPI_Aint *__pyx_v_size) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_mem = 0;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  void *__pyx_t_4;
  Py_ssize_t __pyx_t_5;
  __Pyx_RefNannySetupContext("asmemory", 0);

  /* "mpi4py/MPI/asbuffer.pxi":349
 * cdef inline memory asmemory(object ob, void **base, MPI_Aint *size):
 *     cdef memory mem
 *     if type(ob) is memory:             # <<<<<<<<<<<<<<
 *         mem = <memory> ob
 *     else:
 */
  __pyx_t_1 = (((PyObject *)Py_TYPE(__pyx_v_ob)) == ((PyObject *)__pyx_ptype_6mpi4py_3MPI_memory));
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asbuffer.pxi":350
 *     cdef memory mem
 *     if type(ob) is memory:
 *         mem = <memory> ob             # <<<<<<<<<<<<<<
 *     else:
 *         mem = getbuffer(ob, 1, 0)
 */
    __pyx_t_3 = __pyx_v_ob;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_mem = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/asbuffer.pxi":349
 * cdef inline memory asmemory(object ob, void **base, MPI_Aint *size):
 *     cdef memory mem
 *     if type(ob) is memory:             # <<<<<<<<<<<<<<
 *         mem = <memory> ob
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/asbuffer.pxi":352
 *         mem = <memory> ob
 *     else:
 *         mem = getbuffer(ob, 1, 0)             # <<<<<<<<<<<<<<
 *     if base != NULL: base[0] = mem.view.buf
 *     if size != NULL: size[0] = mem.view.len
 */
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer(__pyx_v_ob, 1, 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_mem = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/asbuffer.pxi":353
 *     else:
 *         mem = getbuffer(ob, 1, 0)
 *     if base != NULL: base[0] = mem.view.buf             # <<<<<<<<<<<<<<
 *     if size != NULL: size[0] = mem.view.len
 *     return mem
 */
  __pyx_t_2 = ((__pyx_v_base != NULL) != 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __pyx_v_mem->view.buf;
    (__pyx_v_base[0]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/asbuffer.pxi":354
 *         mem = getbuffer(ob, 1, 0)
 *     if base != NULL: base[0] = mem.view.buf
 *     if size != NULL: size[0] = mem.view.len             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
  __pyx_t_2 = ((__pyx_v_size != NULL) != 0);
  if (__pyx_t_2) {
    __pyx_t_5 = __pyx_v_mem->view.len;
    (__pyx_v_size[0]) = __pyx_t_5;
  }

  /* "mpi4py/MPI/asbuffer.pxi":355
 *     if base != NULL: base[0] = mem.view.buf
 *     if size != NULL: size[0] = mem.view.len
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * cdef inline memory tomemory(void *base, MPI_Aint size):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_mem));
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":347
 * #------------------------------------------------------------------------------
 * 
 * cdef inline memory asmemory(object ob, void **base, MPI_Aint *size):             # <<<<<<<<<<<<<<
 *     cdef memory mem
 *     if type(ob) is memory:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.asmemory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_mem);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asbuffer.pxi":357
 *     return mem
 * 
 * cdef inline memory tomemory(void *base, MPI_Aint size):             # <<<<<<<<<<<<<<
 *     cdef memory mem = <memory>memory.__new__(memory)
 *     PyBuffer_FillInfo(&mem.view, <object>NULL, base, size, 0, PyBUF_SIMPLE)
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_f_6mpi4py_3MPI_tomemory(void *__pyx_v_base, MPI_Aint __pyx_v_size) {
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_mem = 0;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("tomemory", 0);

  /* "mpi4py/MPI/asbuffer.pxi":358
 * 
 * cdef inline memory tomemory(void *base, MPI_Aint size):
 *     cdef memory mem = <memory>memory.__new__(memory)             # <<<<<<<<<<<<<<
 *     PyBuffer_FillInfo(&mem.view, <object>NULL, base, size, 0, PyBUF_SIMPLE)
 *     return mem
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_memory(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_memory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 358, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_mem = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/asbuffer.pxi":359
 * cdef inline memory tomemory(void *base, MPI_Aint size):
 *     cdef memory mem = <memory>memory.__new__(memory)
 *     PyBuffer_FillInfo(&mem.view, <object>NULL, base, size, 0, PyBUF_SIMPLE)             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
  __pyx_t_3 = PyBuffer_FillInfo((&__pyx_v_mem->view), ((PyObject *)NULL), __pyx_v_base, __pyx_v_size, 0, PyBUF_SIMPLE); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 359, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":360
 *     cdef memory mem = <memory>memory.__new__(memory)
 *     PyBuffer_FillInfo(&mem.view, <object>NULL, base, size, 0, PyBUF_SIMPLE)
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_mem));
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asbuffer.pxi":357
 *     return mem
 * 
 * cdef inline memory tomemory(void *base, MPI_Aint size):             # <<<<<<<<<<<<<<
 *     cdef memory mem = <memory>memory.__new__(memory)
 *     PyBuffer_FillInfo(&mem.view, <object>NULL, base, size, 0, PyBUF_SIMPLE)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.tomemory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_mem);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asmemory.pxi":15
 * cdef class _p_mem:
 *     cdef void *buf
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.buf = NULL
 *     def __dealloc__(self):
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6_p_mem_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6_p_mem_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6_p_mem___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_mem *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6_p_mem___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/asmemory.pxi":16
 *     cdef void *buf
 *     def __cinit__(self):
 *         self.buf = NULL             # <<<<<<<<<<<<<<
 *     def __dealloc__(self):
 *         PyMem_Free(self.buf)
 */
  __pyx_v_self->buf = NULL;

  /* "mpi4py/MPI/asmemory.pxi":15
 * cdef class _p_mem:
 *     cdef void *buf
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.buf = NULL
 *     def __dealloc__(self):
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asmemory.pxi":17
 *     def __cinit__(self):
 *         self.buf = NULL
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         PyMem_Free(self.buf)
 * 
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_6_p_mem_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_6_p_mem_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_6_p_mem_2__dealloc__(((struct __pyx_obj_6mpi4py_3MPI__p_mem *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_6_p_mem_2__dealloc__(struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/asmemory.pxi":18
 *         self.buf = NULL
 *     def __dealloc__(self):
 *         PyMem_Free(self.buf)             # <<<<<<<<<<<<<<
 * 
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):
 */
  PyMem_Free(__pyx_v_self->buf);

  /* "mpi4py/MPI/asmemory.pxi":17
 *     def __cinit__(self):
 *         self.buf = NULL
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         PyMem_Free(self.buf)
 * 
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/asmemory.pxi":20
 *         PyMem_Free(self.buf)
 * 
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):             # <<<<<<<<<<<<<<
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:
 *       raise MemoryError("memory allocation size too large")
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_f_6mpi4py_3MPI_allocate(Py_ssize_t __pyx_v_m, size_t __pyx_v_b, void *__pyx_v_buf) {
  size_t __pyx_v_n;
  struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_v_ob = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_mem *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  void *__pyx_t_4;
  __Pyx_RefNannySetupContext("allocate", 0);

  /* "mpi4py/MPI/asmemory.pxi":21
 * 
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:             # <<<<<<<<<<<<<<
 *       raise MemoryError("memory allocation size too large")
 *   if m < 0:
 */
  __pyx_t_1 = ((__pyx_v_m > (PY_SSIZE_T_MAX / ((Py_ssize_t)__pyx_v_b))) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asmemory.pxi":22
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:
 *       raise MemoryError("memory allocation size too large")             # <<<<<<<<<<<<<<
 *   if m < 0:
 *       raise RuntimeError("memory allocation with negative size")
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 22, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 22, __pyx_L1_error)

    /* "mpi4py/MPI/asmemory.pxi":21
 * 
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:             # <<<<<<<<<<<<<<
 *       raise MemoryError("memory allocation size too large")
 *   if m < 0:
 */
  }

  /* "mpi4py/MPI/asmemory.pxi":23
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:
 *       raise MemoryError("memory allocation size too large")
 *   if m < 0:             # <<<<<<<<<<<<<<
 *       raise RuntimeError("memory allocation with negative size")
 *   cdef size_t n = <size_t>m * b
 */
  __pyx_t_1 = ((__pyx_v_m < 0) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asmemory.pxi":24
 *       raise MemoryError("memory allocation size too large")
 *   if m < 0:
 *       raise RuntimeError("memory allocation with negative size")             # <<<<<<<<<<<<<<
 *   cdef size_t n = <size_t>m * b
 *   cdef _p_mem ob = <_p_mem>_p_mem.__new__(_p_mem)
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(2, 24, __pyx_L1_error)

    /* "mpi4py/MPI/asmemory.pxi":23
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:
 *       raise MemoryError("memory allocation size too large")
 *   if m < 0:             # <<<<<<<<<<<<<<
 *       raise RuntimeError("memory allocation with negative size")
 *   cdef size_t n = <size_t>m * b
 */
  }

  /* "mpi4py/MPI/asmemory.pxi":25
 *   if m < 0:
 *       raise RuntimeError("memory allocation with negative size")
 *   cdef size_t n = <size_t>m * b             # <<<<<<<<<<<<<<
 *   cdef _p_mem ob = <_p_mem>_p_mem.__new__(_p_mem)
 *   ob.buf = PyMem_Malloc(n)
 */
  __pyx_v_n = (((size_t)__pyx_v_m) * __pyx_v_b);

  /* "mpi4py/MPI/asmemory.pxi":26
 *       raise RuntimeError("memory allocation with negative size")
 *   cdef size_t n = <size_t>m * b
 *   cdef _p_mem ob = <_p_mem>_p_mem.__new__(_p_mem)             # <<<<<<<<<<<<<<
 *   ob.buf = PyMem_Malloc(n)
 *   if ob.buf == NULL: raise MemoryError
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_mem(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_mem), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 26, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_ob = ((struct __pyx_obj_6mpi4py_3MPI__p_mem *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/asmemory.pxi":27
 *   cdef size_t n = <size_t>m * b
 *   cdef _p_mem ob = <_p_mem>_p_mem.__new__(_p_mem)
 *   ob.buf = PyMem_Malloc(n)             # <<<<<<<<<<<<<<
 *   if ob.buf == NULL: raise MemoryError
 *   if buf != NULL: (<void**>buf)[0] = ob.buf
 */
  __pyx_v_ob->buf = PyMem_Malloc(__pyx_v_n);

  /* "mpi4py/MPI/asmemory.pxi":28
 *   cdef _p_mem ob = <_p_mem>_p_mem.__new__(_p_mem)
 *   ob.buf = PyMem_Malloc(n)
 *   if ob.buf == NULL: raise MemoryError             # <<<<<<<<<<<<<<
 *   if buf != NULL: (<void**>buf)[0] = ob.buf
 *   return ob
 */
  __pyx_t_1 = ((__pyx_v_ob->buf == NULL) != 0);
  if (unlikely(__pyx_t_1)) {
    PyErr_NoMemory(); __PYX_ERR(2, 28, __pyx_L1_error)
  }

  /* "mpi4py/MPI/asmemory.pxi":29
 *   ob.buf = PyMem_Malloc(n)
 *   if ob.buf == NULL: raise MemoryError
 *   if buf != NULL: (<void**>buf)[0] = ob.buf             # <<<<<<<<<<<<<<
 *   return ob
 * 
 */
  __pyx_t_1 = ((__pyx_v_buf != NULL) != 0);
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_ob->buf;
    (((void **)__pyx_v_buf)[0]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/asmemory.pxi":30
 *   if ob.buf == NULL: raise MemoryError
 *   if buf != NULL: (<void**>buf)[0] = ob.buf
 *   return ob             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_ob));
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  /* "mpi4py/MPI/asmemory.pxi":20
 *         PyMem_Free(self.buf)
 * 
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):             # <<<<<<<<<<<<<<
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:
 *       raise MemoryError("memory allocation size too large")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ob);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":7
 *     MPI_Aint
 * 
 * cdef inline object newarray(int n, integral_t **p):             # <<<<<<<<<<<<<<
 *     return allocate(n, sizeof(integral_t), p)
 * 
 */

static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(int __pyx_v_n, int **__pyx_v_p) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_0newarray", 0);

  /* "mpi4py/MPI/asarray.pxi":8
 * 
 * cdef inline object newarray(int n, integral_t **p):
 *     return allocate(n, sizeof(integral_t), p)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_n, (sizeof(int)), __pyx_v_p)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":7
 *     MPI_Aint
 * 
 * cdef inline object newarray(int n, integral_t **p):             # <<<<<<<<<<<<<<
 *     return allocate(n, sizeof(integral_t), p)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.newarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_newarray(int __pyx_v_n, MPI_Aint **__pyx_v_p) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_1newarray", 0);

  /* "mpi4py/MPI/asarray.pxi":8
 * 
 * cdef inline object newarray(int n, integral_t **p):
 *     return allocate(n, sizeof(integral_t), p)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_n, (sizeof(MPI_Aint)), __pyx_v_p)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":7
 *     MPI_Aint
 * 
 * cdef inline object newarray(int n, integral_t **p):             # <<<<<<<<<<<<<<
 *     return allocate(n, sizeof(integral_t), p)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.newarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":10
 *     return allocate(n, sizeof(integral_t), p)
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL
 */

static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(PyObject *__pyx_v_ob, int *__pyx_v_n, int **__pyx_v_p) {
  Py_ssize_t __pyx_v_olen;
  int *__pyx_v_base;
  int __pyx_v_i;
  int __pyx_v_size;
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__pyx_fuse_0getarray", 0);

  /* "mpi4py/MPI/asarray.pxi":11
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):
 *     cdef Py_ssize_t  olen = len(ob)             # <<<<<<<<<<<<<<
 *     cdef integral_t *base = NULL
 *     cdef int i = 0, size = downcast(olen)
 */
  __pyx_t_1 = PyObject_Length(__pyx_v_ob); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 11, __pyx_L1_error)
  __pyx_v_olen = __pyx_t_1;

  /* "mpi4py/MPI/asarray.pxi":12
 * cdef inline object getarray(object ob, int *n, integral_t **p):
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL             # <<<<<<<<<<<<<<
 *     cdef int i = 0, size = downcast(olen)
 *     cdef object mem = newarray(size, &base)
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/asarray.pxi":13
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL
 *     cdef int i = 0, size = downcast(olen)             # <<<<<<<<<<<<<<
 *     cdef object mem = newarray(size, &base)
 *     for i from 0 <= i < size: base[i] = ob[i]
 */
  __pyx_v_i = 0;
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_downcast(__pyx_v_olen); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(11, 13, __pyx_L1_error)
  __pyx_v_size = __pyx_t_2;

  /* "mpi4py/MPI/asarray.pxi":14
 *     cdef integral_t *base = NULL
 *     cdef int i = 0, size = downcast(olen)
 *     cdef object mem = newarray(size, &base)             # <<<<<<<<<<<<<<
 *     for i from 0 <= i < size: base[i] = ob[i]
 *     n[0] = size
 */
  __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_size, (&__pyx_v_base)); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mem = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/asarray.pxi":15
 *     cdef int i = 0, size = downcast(olen)
 *     cdef object mem = newarray(size, &base)
 *     for i from 0 <= i < size: base[i] = ob[i]             # <<<<<<<<<<<<<<
 *     n[0] = size
 *     p[0] = base
 */
  __pyx_t_2 = __pyx_v_size;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_ob, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 15, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    (__pyx_v_base[__pyx_v_i]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/asarray.pxi":16
 *     cdef object mem = newarray(size, &base)
 *     for i from 0 <= i < size: base[i] = ob[i]
 *     n[0] = size             # <<<<<<<<<<<<<<
 *     p[0] = base
 *     return mem
 */
  (__pyx_v_n[0]) = __pyx_v_size;

  /* "mpi4py/MPI/asarray.pxi":17
 *     for i from 0 <= i < size: base[i] = ob[i]
 *     n[0] = size
 *     p[0] = base             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_base;

  /* "mpi4py/MPI/asarray.pxi":18
 *     n[0] = size
 *     p[0] = base
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_mem);
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":10
 *     return allocate(n, sizeof(integral_t), p)
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.getarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_getarray(PyObject *__pyx_v_ob, int *__pyx_v_n, MPI_Aint **__pyx_v_p) {
  Py_ssize_t __pyx_v_olen;
  MPI_Aint *__pyx_v_base;
  int __pyx_v_i;
  int __pyx_v_size;
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  MPI_Aint __pyx_t_4;
  __Pyx_RefNannySetupContext("__pyx_fuse_1getarray", 0);

  /* "mpi4py/MPI/asarray.pxi":11
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):
 *     cdef Py_ssize_t  olen = len(ob)             # <<<<<<<<<<<<<<
 *     cdef integral_t *base = NULL
 *     cdef int i = 0, size = downcast(olen)
 */
  __pyx_t_1 = PyObject_Length(__pyx_v_ob); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 11, __pyx_L1_error)
  __pyx_v_olen = __pyx_t_1;

  /* "mpi4py/MPI/asarray.pxi":12
 * cdef inline object getarray(object ob, int *n, integral_t **p):
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL             # <<<<<<<<<<<<<<
 *     cdef int i = 0, size = downcast(olen)
 *     cdef object mem = newarray(size, &base)
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/asarray.pxi":13
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL
 *     cdef int i = 0, size = downcast(olen)             # <<<<<<<<<<<<<<
 *     cdef object mem = newarray(size, &base)
 *     for i from 0 <= i < size: base[i] = ob[i]
 */
  __pyx_v_i = 0;
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_downcast(__pyx_v_olen); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(11, 13, __pyx_L1_error)
  __pyx_v_size = __pyx_t_2;

  /* "mpi4py/MPI/asarray.pxi":14
 *     cdef integral_t *base = NULL
 *     cdef int i = 0, size = downcast(olen)
 *     cdef object mem = newarray(size, &base)             # <<<<<<<<<<<<<<
 *     for i from 0 <= i < size: base[i] = ob[i]
 *     n[0] = size
 */
  __pyx_t_3 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_size, (&__pyx_v_base)); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mem = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/asarray.pxi":15
 *     cdef int i = 0, size = downcast(olen)
 *     cdef object mem = newarray(size, &base)
 *     for i from 0 <= i < size: base[i] = ob[i]             # <<<<<<<<<<<<<<
 *     n[0] = size
 *     p[0] = base
 */
  __pyx_t_2 = __pyx_v_size;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_ob, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_As_MPI_Aint(__pyx_t_3); if (unlikely((__pyx_t_4 == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(11, 15, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    (__pyx_v_base[__pyx_v_i]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/asarray.pxi":16
 *     cdef object mem = newarray(size, &base)
 *     for i from 0 <= i < size: base[i] = ob[i]
 *     n[0] = size             # <<<<<<<<<<<<<<
 *     p[0] = base
 *     return mem
 */
  (__pyx_v_n[0]) = __pyx_v_size;

  /* "mpi4py/MPI/asarray.pxi":17
 *     for i from 0 <= i < size: base[i] = ob[i]
 *     n[0] = size
 *     p[0] = base             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_base;

  /* "mpi4py/MPI/asarray.pxi":18
 *     n[0] = size
 *     p[0] = base
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_mem);
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":10
 *     return allocate(n, sizeof(integral_t), p)
 * 
 * cdef inline object getarray(object ob, int *n, integral_t **p):             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t  olen = len(ob)
 *     cdef integral_t *base = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.getarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":20
 *     return mem
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):             # <<<<<<<<<<<<<<
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 */

static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(PyObject *__pyx_v_ob, int __pyx_v_n, int **__pyx_v_p) {
  int __pyx_v_size;
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_0chkarray", 0);

  /* "mpi4py/MPI/asarray.pxi":21
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):
 *     cdef int size = 0             # <<<<<<<<<<<<<<
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/asarray.pxi":22
 * cdef inline object chkarray(object ob, int n, integral_t **p):
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)             # <<<<<<<<<<<<<<
 *     if n != size: raise ValueError(
 *         "expecting %d items, got %d" % (n, size))
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_ob, (&__pyx_v_size), __pyx_v_p); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mem = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asarray.pxi":23
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(             # <<<<<<<<<<<<<<
 *         "expecting %d items, got %d" % (n, size))
 *     return mem
 */
  __pyx_t_2 = ((__pyx_v_n != __pyx_v_size) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/asarray.pxi":24
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(
 *         "expecting %d items, got %d" % (n, size))             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_expecting_d_items_got_d, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/asarray.pxi":23
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(             # <<<<<<<<<<<<<<
 *         "expecting %d items, got %d" % (n, size))
 *     return mem
 */
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(11, 23, __pyx_L1_error)
  }

  /* "mpi4py/MPI/asarray.pxi":25
 *     if n != size: raise ValueError(
 *         "expecting %d items, got %d" % (n, size))
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_mem);
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":20
 *     return mem
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):             # <<<<<<<<<<<<<<
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.chkarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_chkarray(PyObject *__pyx_v_ob, int __pyx_v_n, MPI_Aint **__pyx_v_p) {
  int __pyx_v_size;
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_1chkarray", 0);

  /* "mpi4py/MPI/asarray.pxi":21
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):
 *     cdef int size = 0             # <<<<<<<<<<<<<<
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/asarray.pxi":22
 * cdef inline object chkarray(object ob, int n, integral_t **p):
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)             # <<<<<<<<<<<<<<
 *     if n != size: raise ValueError(
 *         "expecting %d items, got %d" % (n, size))
 */
  __pyx_t_1 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_ob, (&__pyx_v_size), __pyx_v_p); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mem = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asarray.pxi":23
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(             # <<<<<<<<<<<<<<
 *         "expecting %d items, got %d" % (n, size))
 *     return mem
 */
  __pyx_t_2 = ((__pyx_v_n != __pyx_v_size) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/asarray.pxi":24
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(
 *         "expecting %d items, got %d" % (n, size))             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_expecting_d_items_got_d, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/asarray.pxi":23
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 *     if n != size: raise ValueError(             # <<<<<<<<<<<<<<
 *         "expecting %d items, got %d" % (n, size))
 *     return mem
 */
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(11, 23, __pyx_L1_error)
  }

  /* "mpi4py/MPI/asarray.pxi":25
 *     if n != size: raise ValueError(
 *         "expecting %d items, got %d" % (n, size))
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_mem);
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":20
 *     return mem
 * 
 * cdef inline object chkarray(object ob, int n, integral_t **p):             # <<<<<<<<<<<<<<
 *     cdef int size = 0
 *     cdef object mem = getarray(ob, &size, p)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.chkarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":29
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline object asarray_Datatype(object sequence,             # <<<<<<<<<<<<<<
 *                                     int size, MPI_Datatype **p):
 *      cdef int i = 0
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_Datatype(PyObject *__pyx_v_sequence, int __pyx_v_size, MPI_Datatype **__pyx_v_p) {
  int __pyx_v_i;
  MPI_Datatype *__pyx_v_array;
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  MPI_Datatype __pyx_t_7;
  __Pyx_RefNannySetupContext("asarray_Datatype", 0);

  /* "mpi4py/MPI/asarray.pxi":31
 * cdef inline object asarray_Datatype(object sequence,
 *                                     int size, MPI_Datatype **p):
 *      cdef int i = 0             # <<<<<<<<<<<<<<
 *      cdef MPI_Datatype *array = NULL
 *      if size != len(sequence): raise ValueError(
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/asarray.pxi":32
 *                                     int size, MPI_Datatype **p):
 *      cdef int i = 0
 *      cdef MPI_Datatype *array = NULL             # <<<<<<<<<<<<<<
 *      if size != len(sequence): raise ValueError(
 *          "expecting %d items, got %d" % (size, len(sequence)))
 */
  __pyx_v_array = NULL;

  /* "mpi4py/MPI/asarray.pxi":33
 *      cdef int i = 0
 *      cdef MPI_Datatype *array = NULL
 *      if size != len(sequence): raise ValueError(             # <<<<<<<<<<<<<<
 *          "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef object ob = allocate(size, sizeof(MPI_Datatype), &array)
 */
  __pyx_t_1 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 33, __pyx_L1_error)
  __pyx_t_2 = ((__pyx_v_size != __pyx_t_1) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/asarray.pxi":34
 *      cdef MPI_Datatype *array = NULL
 *      if size != len(sequence): raise ValueError(
 *          "expecting %d items, got %d" % (size, len(sequence)))             # <<<<<<<<<<<<<<
 *      cdef object ob = allocate(size, sizeof(MPI_Datatype), &array)
 *      for i from 0 <= i < size:
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 34, __pyx_L1_error)
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_expecting_d_items_got_d, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/asarray.pxi":33
 *      cdef int i = 0
 *      cdef MPI_Datatype *array = NULL
 *      if size != len(sequence): raise ValueError(             # <<<<<<<<<<<<<<
 *          "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef object ob = allocate(size, sizeof(MPI_Datatype), &array)
 */
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(11, 33, __pyx_L1_error)
  }

  /* "mpi4py/MPI/asarray.pxi":35
 *      if size != len(sequence): raise ValueError(
 *          "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef object ob = allocate(size, sizeof(MPI_Datatype), &array)             # <<<<<<<<<<<<<<
 *      for i from 0 <= i < size:
 *          array[i] = (<Datatype?>sequence[i]).ob_mpi
 */
  __pyx_t_5 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_size, (sizeof(MPI_Datatype)), (&__pyx_v_array))); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_ob = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/asarray.pxi":36
 *          "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef object ob = allocate(size, sizeof(MPI_Datatype), &array)
 *      for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *          array[i] = (<Datatype?>sequence[i]).ob_mpi
 *      p[0] = array
 */
  __pyx_t_6 = __pyx_v_size;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {

    /* "mpi4py/MPI/asarray.pxi":37
 *      cdef object ob = allocate(size, sizeof(MPI_Datatype), &array)
 *      for i from 0 <= i < size:
 *          array[i] = (<Datatype?>sequence[i]).ob_mpi             # <<<<<<<<<<<<<<
 *      p[0] = array
 *      return ob
 */
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sequence, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_6mpi4py_3MPI_Datatype)))) __PYX_ERR(11, 37, __pyx_L1_error)
    __pyx_t_7 = ((struct PyMPIDatatypeObject *)__pyx_t_5)->ob_mpi;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    (__pyx_v_array[__pyx_v_i]) = __pyx_t_7;
  }

  /* "mpi4py/MPI/asarray.pxi":38
 *      for i from 0 <= i < size:
 *          array[i] = (<Datatype?>sequence[i]).ob_mpi
 *      p[0] = array             # <<<<<<<<<<<<<<
 *      return ob
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_array;

  /* "mpi4py/MPI/asarray.pxi":39
 *          array[i] = (<Datatype?>sequence[i]).ob_mpi
 *      p[0] = array
 *      return ob             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asarray_Info(object sequence,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":29
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline object asarray_Datatype(object sequence,             # <<<<<<<<<<<<<<
 *                                     int size, MPI_Datatype **p):
 *      cdef int i = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_Datatype", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":41
 *      return ob
 * 
 * cdef inline object asarray_Info(object sequence,             # <<<<<<<<<<<<<<
 *                                 int size, MPI_Info **p):
 *      cdef int i = 0
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_Info(PyObject *__pyx_v_sequence, int __pyx_v_size, MPI_Info **__pyx_v_p) {
  int __pyx_v_i;
  MPI_Info *__pyx_v_array;
  MPI_Info __pyx_v_info;
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  MPI_Info __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("asarray_Info", 0);

  /* "mpi4py/MPI/asarray.pxi":43
 * cdef inline object asarray_Info(object sequence,
 *                                 int size, MPI_Info **p):
 *      cdef int i = 0             # <<<<<<<<<<<<<<
 *      cdef MPI_Info *array = NULL
 *      cdef MPI_Info info = MPI_INFO_NULL
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/asarray.pxi":44
 *                                 int size, MPI_Info **p):
 *      cdef int i = 0
 *      cdef MPI_Info *array = NULL             # <<<<<<<<<<<<<<
 *      cdef MPI_Info info = MPI_INFO_NULL
 *      cdef object ob
 */
  __pyx_v_array = NULL;

  /* "mpi4py/MPI/asarray.pxi":45
 *      cdef int i = 0
 *      cdef MPI_Info *array = NULL
 *      cdef MPI_Info info = MPI_INFO_NULL             # <<<<<<<<<<<<<<
 *      cdef object ob
 *      if sequence is None or isinstance(sequence, Info):
 */
  __pyx_v_info = MPI_INFO_NULL;

  /* "mpi4py/MPI/asarray.pxi":47
 *      cdef MPI_Info info = MPI_INFO_NULL
 *      cdef object ob
 *      if sequence is None or isinstance(sequence, Info):             # <<<<<<<<<<<<<<
 *          if sequence is not None:
 *              info = (<Info?>sequence).ob_mpi
 */
  __pyx_t_2 = (__pyx_v_sequence == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_sequence, __pyx_ptype_6mpi4py_3MPI_Info); 
  __pyx_t_2 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asarray.pxi":48
 *      cdef object ob
 *      if sequence is None or isinstance(sequence, Info):
 *          if sequence is not None:             # <<<<<<<<<<<<<<
 *              info = (<Info?>sequence).ob_mpi
 *          ob = allocate(size, sizeof(MPI_Info), &array)
 */
    __pyx_t_1 = (__pyx_v_sequence != Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/asarray.pxi":49
 *      if sequence is None or isinstance(sequence, Info):
 *          if sequence is not None:
 *              info = (<Info?>sequence).ob_mpi             # <<<<<<<<<<<<<<
 *          ob = allocate(size, sizeof(MPI_Info), &array)
 *          for i from 0 <= i < size:
 */
      if (!(likely(__Pyx_TypeTest(__pyx_v_sequence, __pyx_ptype_6mpi4py_3MPI_Info)))) __PYX_ERR(11, 49, __pyx_L1_error)
      __pyx_t_4 = ((struct PyMPIInfoObject *)__pyx_v_sequence)->ob_mpi;
      __pyx_v_info = __pyx_t_4;

      /* "mpi4py/MPI/asarray.pxi":48
 *      cdef object ob
 *      if sequence is None or isinstance(sequence, Info):
 *          if sequence is not None:             # <<<<<<<<<<<<<<
 *              info = (<Info?>sequence).ob_mpi
 *          ob = allocate(size, sizeof(MPI_Info), &array)
 */
    }

    /* "mpi4py/MPI/asarray.pxi":50
 *          if sequence is not None:
 *              info = (<Info?>sequence).ob_mpi
 *          ob = allocate(size, sizeof(MPI_Info), &array)             # <<<<<<<<<<<<<<
 *          for i from 0 <= i < size:
 *              array[i] = info
 */
    __pyx_t_5 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_size, (sizeof(MPI_Info)), (&__pyx_v_array))); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 50, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_ob = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/asarray.pxi":51
 *              info = (<Info?>sequence).ob_mpi
 *          ob = allocate(size, sizeof(MPI_Info), &array)
 *          for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *              array[i] = info
 *      else:
 */
    __pyx_t_6 = __pyx_v_size;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {

      /* "mpi4py/MPI/asarray.pxi":52
 *          ob = allocate(size, sizeof(MPI_Info), &array)
 *          for i from 0 <= i < size:
 *              array[i] = info             # <<<<<<<<<<<<<<
 *      else:
 *          if size != len(sequence): raise ValueError(
 */
      (__pyx_v_array[__pyx_v_i]) = __pyx_v_info;
    }

    /* "mpi4py/MPI/asarray.pxi":47
 *      cdef MPI_Info info = MPI_INFO_NULL
 *      cdef object ob
 *      if sequence is None or isinstance(sequence, Info):             # <<<<<<<<<<<<<<
 *          if sequence is not None:
 *              info = (<Info?>sequence).ob_mpi
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/asarray.pxi":54
 *              array[i] = info
 *      else:
 *          if size != len(sequence): raise ValueError(             # <<<<<<<<<<<<<<
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *          ob = allocate(size, sizeof(MPI_Datatype), &array)
 */
  /*else*/ {
    __pyx_t_7 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(11, 54, __pyx_L1_error)
    __pyx_t_2 = ((__pyx_v_size != __pyx_t_7) != 0);
    if (unlikely(__pyx_t_2)) {

      /* "mpi4py/MPI/asarray.pxi":55
 *      else:
 *          if size != len(sequence): raise ValueError(
 *              "expecting %d items, got %d" % (size, len(sequence)))             # <<<<<<<<<<<<<<
 *          ob = allocate(size, sizeof(MPI_Datatype), &array)
 *          for i from 0 <= i < size:
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 55, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(11, 55, __pyx_L1_error)
      __pyx_t_8 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(11, 55, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 55, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
      __pyx_t_5 = 0;
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_expecting_d_items_got_d, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(11, 55, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/asarray.pxi":54
 *              array[i] = info
 *      else:
 *          if size != len(sequence): raise ValueError(             # <<<<<<<<<<<<<<
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *          ob = allocate(size, sizeof(MPI_Datatype), &array)
 */
      __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 54, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(11, 54, __pyx_L1_error)
    }

    /* "mpi4py/MPI/asarray.pxi":56
 *          if size != len(sequence): raise ValueError(
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *          ob = allocate(size, sizeof(MPI_Datatype), &array)             # <<<<<<<<<<<<<<
 *          for i from 0 <= i < size:
 *              array[i] = (<Info?>sequence[i]).ob_mpi
 */
    __pyx_t_9 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_size, (sizeof(MPI_Datatype)), (&__pyx_v_array))); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 56, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_v_ob = __pyx_t_9;
    __pyx_t_9 = 0;

    /* "mpi4py/MPI/asarray.pxi":57
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *          ob = allocate(size, sizeof(MPI_Datatype), &array)
 *          for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *              array[i] = (<Info?>sequence[i]).ob_mpi
 *      p[0] = array
 */
    __pyx_t_6 = __pyx_v_size;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {

      /* "mpi4py/MPI/asarray.pxi":58
 *          ob = allocate(size, sizeof(MPI_Datatype), &array)
 *          for i from 0 <= i < size:
 *              array[i] = (<Info?>sequence[i]).ob_mpi             # <<<<<<<<<<<<<<
 *      p[0] = array
 *      return ob
 */
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_sequence, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 58, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_6mpi4py_3MPI_Info)))) __PYX_ERR(11, 58, __pyx_L1_error)
      __pyx_t_4 = ((struct PyMPIInfoObject *)__pyx_t_9)->ob_mpi;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      (__pyx_v_array[__pyx_v_i]) = __pyx_t_4;
    }
  }
  __pyx_L3:;

  /* "mpi4py/MPI/asarray.pxi":59
 *          for i from 0 <= i < size:
 *              array[i] = (<Info?>sequence[i]).ob_mpi
 *      p[0] = array             # <<<<<<<<<<<<<<
 *      return ob
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_array;

  /* "mpi4py/MPI/asarray.pxi":60
 *              array[i] = (<Info?>sequence[i]).ob_mpi
 *      p[0] = array
 *      return ob             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":41
 *      return ob
 * 
 * cdef inline object asarray_Info(object sequence,             # <<<<<<<<<<<<<<
 *                                 int size, MPI_Info **p):
 *      cdef int i = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_Info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":64
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int is_string(object obj):             # <<<<<<<<<<<<<<
 *      return (isinstance(obj, str) or
 *              isinstance(obj, bytes) or
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_string(PyObject *__pyx_v_obj) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("is_string", 0);

  /* "mpi4py/MPI/asarray.pxi":65
 * 
 * cdef inline int is_string(object obj):
 *      return (isinstance(obj, str) or             # <<<<<<<<<<<<<<
 *              isinstance(obj, bytes) or
 *              isinstance(obj, unicode))
 */
  __pyx_t_2 = PyString_Check(__pyx_v_obj); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/asarray.pxi":66
 * cdef inline int is_string(object obj):
 *      return (isinstance(obj, str) or
 *              isinstance(obj, bytes) or             # <<<<<<<<<<<<<<
 *              isinstance(obj, unicode))
 * 
 */
  __pyx_t_2 = PyBytes_Check(__pyx_v_obj); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/asarray.pxi":67
 *      return (isinstance(obj, str) or
 *              isinstance(obj, bytes) or
 *              isinstance(obj, unicode))             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asstring(object ob, char *s[]):
 */
  __pyx_t_2 = PyUnicode_Check(__pyx_v_obj); 
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":64
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int is_string(object obj):             # <<<<<<<<<<<<<<
 *      return (isinstance(obj, str) or
 *              isinstance(obj, bytes) or
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":69
 *              isinstance(obj, unicode))
 * 
 * cdef inline object asstring(object ob, char *s[]):             # <<<<<<<<<<<<<<
 *      cdef Py_ssize_t n = 0
 *      cdef char *p = NULL, *q = NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asstring(PyObject *__pyx_v_ob, char **__pyx_v_s) {
  Py_ssize_t __pyx_v_n;
  char *__pyx_v_p;
  char *__pyx_v_q;
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("asstring", 0);
  __Pyx_INCREF(__pyx_v_ob);

  /* "mpi4py/MPI/asarray.pxi":70
 * 
 * cdef inline object asstring(object ob, char *s[]):
 *      cdef Py_ssize_t n = 0             # <<<<<<<<<<<<<<
 *      cdef char *p = NULL, *q = NULL
 *      ob = asmpistr(ob, &p)
 */
  __pyx_v_n = 0;

  /* "mpi4py/MPI/asarray.pxi":71
 * cdef inline object asstring(object ob, char *s[]):
 *      cdef Py_ssize_t n = 0
 *      cdef char *p = NULL, *q = NULL             # <<<<<<<<<<<<<<
 *      ob = asmpistr(ob, &p)
 *      PyBytes_AsStringAndSize(ob, &p, &n)
 */
  __pyx_v_p = NULL;
  __pyx_v_q = NULL;

  /* "mpi4py/MPI/asarray.pxi":72
 *      cdef Py_ssize_t n = 0
 *      cdef char *p = NULL, *q = NULL
 *      ob = asmpistr(ob, &p)             # <<<<<<<<<<<<<<
 *      PyBytes_AsStringAndSize(ob, &p, &n)
 *      cdef object mem = allocate(n+1, sizeof(char), &q)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_ob, (&__pyx_v_p)); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_ob, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asarray.pxi":73
 *      cdef char *p = NULL, *q = NULL
 *      ob = asmpistr(ob, &p)
 *      PyBytes_AsStringAndSize(ob, &p, &n)             # <<<<<<<<<<<<<<
 *      cdef object mem = allocate(n+1, sizeof(char), &q)
 *      <void>memcpy(q, p, <size_t>n)
 */
  __pyx_t_2 = PyBytes_AsStringAndSize(__pyx_v_ob, (&__pyx_v_p), (&__pyx_v_n)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 73, __pyx_L1_error)

  /* "mpi4py/MPI/asarray.pxi":74
 *      ob = asmpistr(ob, &p)
 *      PyBytes_AsStringAndSize(ob, &p, &n)
 *      cdef object mem = allocate(n+1, sizeof(char), &q)             # <<<<<<<<<<<<<<
 *      <void>memcpy(q, p, <size_t>n)
 *      q[n] = 0; s[0] = q;
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((__pyx_v_n + 1), (sizeof(char)), (&__pyx_v_q))); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mem = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/asarray.pxi":75
 *      PyBytes_AsStringAndSize(ob, &p, &n)
 *      cdef object mem = allocate(n+1, sizeof(char), &q)
 *      <void>memcpy(q, p, <size_t>n)             # <<<<<<<<<<<<<<
 *      q[n] = 0; s[0] = q;
 *      return mem
 */
  ((void)memcpy(__pyx_v_q, __pyx_v_p, ((size_t)__pyx_v_n)));

  /* "mpi4py/MPI/asarray.pxi":76
 *      cdef object mem = allocate(n+1, sizeof(char), &q)
 *      <void>memcpy(q, p, <size_t>n)
 *      q[n] = 0; s[0] = q;             # <<<<<<<<<<<<<<
 *      return mem
 * 
 */
  (__pyx_v_q[__pyx_v_n]) = 0;
  (__pyx_v_s[0]) = __pyx_v_q;

  /* "mpi4py/MPI/asarray.pxi":77
 *      <void>memcpy(q, p, <size_t>n)
 *      q[n] = 0; s[0] = q;
 *      return mem             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asarray_str(object sequence, char ***p):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_mem);
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":69
 *              isinstance(obj, unicode))
 * 
 * cdef inline object asstring(object ob, char *s[]):             # <<<<<<<<<<<<<<
 *      cdef Py_ssize_t n = 0
 *      cdef char *p = NULL, *q = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.asstring", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mem);
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":79
 *      return mem
 * 
 * cdef inline object asarray_str(object sequence, char ***p):             # <<<<<<<<<<<<<<
 *      cdef char** array = NULL
 *      cdef Py_ssize_t i = 0, size = len(sequence)
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_str(PyObject *__pyx_v_sequence, char ***__pyx_v_p) {
  char **__pyx_v_array;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_size;
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("asarray_str", 0);

  /* "mpi4py/MPI/asarray.pxi":80
 * 
 * cdef inline object asarray_str(object sequence, char ***p):
 *      cdef char** array = NULL             # <<<<<<<<<<<<<<
 *      cdef Py_ssize_t i = 0, size = len(sequence)
 *      cdef object ob = allocate(size+1, sizeof(char*), &array)
 */
  __pyx_v_array = NULL;

  /* "mpi4py/MPI/asarray.pxi":81
 * cdef inline object asarray_str(object sequence, char ***p):
 *      cdef char** array = NULL
 *      cdef Py_ssize_t i = 0, size = len(sequence)             # <<<<<<<<<<<<<<
 *      cdef object ob = allocate(size+1, sizeof(char*), &array)
 *      for i from 0 <= i < size:
 */
  __pyx_v_i = 0;
  __pyx_t_1 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 81, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;

  /* "mpi4py/MPI/asarray.pxi":82
 *      cdef char** array = NULL
 *      cdef Py_ssize_t i = 0, size = len(sequence)
 *      cdef object ob = allocate(size+1, sizeof(char*), &array)             # <<<<<<<<<<<<<<
 *      for i from 0 <= i < size:
 *          sequence[i] = asstring(sequence[i], &array[i])
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((__pyx_v_size + 1), (sizeof(char *)), (&__pyx_v_array))); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_ob = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/asarray.pxi":83
 *      cdef Py_ssize_t i = 0, size = len(sequence)
 *      cdef object ob = allocate(size+1, sizeof(char*), &array)
 *      for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *          sequence[i] = asstring(sequence[i], &array[i])
 *      array[size] = NULL
 */
  __pyx_t_1 = __pyx_v_size;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

    /* "mpi4py/MPI/asarray.pxi":84
 *      cdef object ob = allocate(size+1, sizeof(char*), &array)
 *      for i from 0 <= i < size:
 *          sequence[i] = asstring(sequence[i], &array[i])             # <<<<<<<<<<<<<<
 *      array[size] = NULL
 *      p[0] = array
 */
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_sequence, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 84, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asstring(__pyx_t_2, (&(__pyx_v_array[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 84, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__Pyx_SetItemInt(__pyx_v_sequence, __pyx_v_i, __pyx_t_3, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0)) __PYX_ERR(11, 84, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/asarray.pxi":85
 *      for i from 0 <= i < size:
 *          sequence[i] = asstring(sequence[i], &array[i])
 *      array[size] = NULL             # <<<<<<<<<<<<<<
 *      p[0] = array
 *      return (sequence, ob)
 */
  (__pyx_v_array[__pyx_v_size]) = NULL;

  /* "mpi4py/MPI/asarray.pxi":86
 *          sequence[i] = asstring(sequence[i], &array[i])
 *      array[size] = NULL
 *      p[0] = array             # <<<<<<<<<<<<<<
 *      return (sequence, ob)
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_array;

  /* "mpi4py/MPI/asarray.pxi":87
 *      array[size] = NULL
 *      p[0] = array
 *      return (sequence, ob)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asarray_argv(object sequence, char ***p):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_sequence);
  __Pyx_GIVEREF(__pyx_v_sequence);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_sequence);
  __Pyx_INCREF(__pyx_v_ob);
  __Pyx_GIVEREF(__pyx_v_ob);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_ob);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":79
 *      return mem
 * 
 * cdef inline object asarray_str(object sequence, char ***p):             # <<<<<<<<<<<<<<
 *      cdef char** array = NULL
 *      cdef Py_ssize_t i = 0, size = len(sequence)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":89
 *      return (sequence, ob)
 * 
 * cdef inline object asarray_argv(object sequence, char ***p):             # <<<<<<<<<<<<<<
 *      if sequence is None:
 *          p[0] = MPI_ARGV_NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_argv(PyObject *__pyx_v_sequence, char ***__pyx_v_p) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("asarray_argv", 0);
  __Pyx_INCREF(__pyx_v_sequence);

  /* "mpi4py/MPI/asarray.pxi":90
 * 
 * cdef inline object asarray_argv(object sequence, char ***p):
 *      if sequence is None:             # <<<<<<<<<<<<<<
 *          p[0] = MPI_ARGV_NULL
 *          return None
 */
  __pyx_t_1 = (__pyx_v_sequence == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asarray.pxi":91
 * cdef inline object asarray_argv(object sequence, char ***p):
 *      if sequence is None:
 *          p[0] = MPI_ARGV_NULL             # <<<<<<<<<<<<<<
 *          return None
 *      if is_string(sequence):
 */
    (__pyx_v_p[0]) = MPI_ARGV_NULL;

    /* "mpi4py/MPI/asarray.pxi":92
 *      if sequence is None:
 *          p[0] = MPI_ARGV_NULL
 *          return None             # <<<<<<<<<<<<<<
 *      if is_string(sequence):
 *          sequence = [sequence]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/asarray.pxi":90
 * 
 * cdef inline object asarray_argv(object sequence, char ***p):
 *      if sequence is None:             # <<<<<<<<<<<<<<
 *          p[0] = MPI_ARGV_NULL
 *          return None
 */
  }

  /* "mpi4py/MPI/asarray.pxi":93
 *          p[0] = MPI_ARGV_NULL
 *          return None
 *      if is_string(sequence):             # <<<<<<<<<<<<<<
 *          sequence = [sequence]
 *      else:
 */
  __pyx_t_2 = (__pyx_f_6mpi4py_3MPI_is_string(__pyx_v_sequence) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asarray.pxi":94
 *          return None
 *      if is_string(sequence):
 *          sequence = [sequence]             # <<<<<<<<<<<<<<
 *      else:
 *          sequence = list(sequence)
 */
    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_sequence);
    __Pyx_GIVEREF(__pyx_v_sequence);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_sequence);
    __Pyx_DECREF_SET(__pyx_v_sequence, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/asarray.pxi":93
 *          p[0] = MPI_ARGV_NULL
 *          return None
 *      if is_string(sequence):             # <<<<<<<<<<<<<<
 *          sequence = [sequence]
 *      else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/asarray.pxi":96
 *          sequence = [sequence]
 *      else:
 *          sequence = list(sequence)             # <<<<<<<<<<<<<<
 *      return asarray_str(sequence, p)
 * 
 */
  /*else*/ {
    __pyx_t_3 = PySequence_List(__pyx_v_sequence); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_sequence, __pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/asarray.pxi":97
 *      else:
 *          sequence = list(sequence)
 *      return asarray_str(sequence, p)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_str(__pyx_v_sequence, __pyx_v_p); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":89
 *      return (sequence, ob)
 * 
 * cdef inline object asarray_argv(object sequence, char ***p):             # <<<<<<<<<<<<<<
 *      if sequence is None:
 *          p[0] = MPI_ARGV_NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_argv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sequence);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":99
 *      return asarray_str(sequence, p)
 * 
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):             # <<<<<<<<<<<<<<
 *      if is_string(sequence):
 *          raise ValueError("expecting a sequence of strings")
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_cmds(PyObject *__pyx_v_sequence, int *__pyx_v_count, char ***__pyx_v_p) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  __Pyx_RefNannySetupContext("asarray_cmds", 0);
  __Pyx_INCREF(__pyx_v_sequence);

  /* "mpi4py/MPI/asarray.pxi":100
 * 
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):
 *      if is_string(sequence):             # <<<<<<<<<<<<<<
 *          raise ValueError("expecting a sequence of strings")
 *      sequence = list(sequence)
 */
  __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_is_string(__pyx_v_sequence) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/asarray.pxi":101
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):
 *      if is_string(sequence):
 *          raise ValueError("expecting a sequence of strings")             # <<<<<<<<<<<<<<
 *      sequence = list(sequence)
 *      count[0] = <int>len(sequence)
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 101, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(11, 101, __pyx_L1_error)

    /* "mpi4py/MPI/asarray.pxi":100
 * 
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):
 *      if is_string(sequence):             # <<<<<<<<<<<<<<
 *          raise ValueError("expecting a sequence of strings")
 *      sequence = list(sequence)
 */
  }

  /* "mpi4py/MPI/asarray.pxi":102
 *      if is_string(sequence):
 *          raise ValueError("expecting a sequence of strings")
 *      sequence = list(sequence)             # <<<<<<<<<<<<<<
 *      count[0] = <int>len(sequence)
 *      return asarray_str(sequence, p)
 */
  __pyx_t_2 = PySequence_List(__pyx_v_sequence); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_sequence, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/asarray.pxi":103
 *          raise ValueError("expecting a sequence of strings")
 *      sequence = list(sequence)
 *      count[0] = <int>len(sequence)             # <<<<<<<<<<<<<<
 *      return asarray_str(sequence, p)
 * 
 */
  __pyx_t_3 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(11, 103, __pyx_L1_error)
  (__pyx_v_count[0]) = ((int)__pyx_t_3);

  /* "mpi4py/MPI/asarray.pxi":104
 *      sequence = list(sequence)
 *      count[0] = <int>len(sequence)
 *      return asarray_str(sequence, p)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asarray_argvs(object sequence, int size, char ****p):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_asarray_str(__pyx_v_sequence, __pyx_v_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":99
 *      return asarray_str(sequence, p)
 * 
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):             # <<<<<<<<<<<<<<
 *      if is_string(sequence):
 *          raise ValueError("expecting a sequence of strings")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_cmds", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sequence);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":106
 *      return asarray_str(sequence, p)
 * 
 * cdef inline object asarray_argvs(object sequence, int size, char ****p):             # <<<<<<<<<<<<<<
 *      if sequence is None:
 *          p[0] = MPI_ARGVS_NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_argvs(PyObject *__pyx_v_sequence, int __pyx_v_size, char ****__pyx_v_p) {
  int __pyx_v_i;
  char ***__pyx_v_array;
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_v_argv = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("asarray_argvs", 0);
  __Pyx_INCREF(__pyx_v_sequence);

  /* "mpi4py/MPI/asarray.pxi":107
 * 
 * cdef inline object asarray_argvs(object sequence, int size, char ****p):
 *      if sequence is None:             # <<<<<<<<<<<<<<
 *          p[0] = MPI_ARGVS_NULL
 *          return None
 */
  __pyx_t_1 = (__pyx_v_sequence == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asarray.pxi":108
 * cdef inline object asarray_argvs(object sequence, int size, char ****p):
 *      if sequence is None:
 *          p[0] = MPI_ARGVS_NULL             # <<<<<<<<<<<<<<
 *          return None
 *      if is_string(sequence):
 */
    (__pyx_v_p[0]) = MPI_ARGVS_NULL;

    /* "mpi4py/MPI/asarray.pxi":109
 *      if sequence is None:
 *          p[0] = MPI_ARGVS_NULL
 *          return None             # <<<<<<<<<<<<<<
 *      if is_string(sequence):
 *          sequence = [sequence] * size
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/asarray.pxi":107
 * 
 * cdef inline object asarray_argvs(object sequence, int size, char ****p):
 *      if sequence is None:             # <<<<<<<<<<<<<<
 *          p[0] = MPI_ARGVS_NULL
 *          return None
 */
  }

  /* "mpi4py/MPI/asarray.pxi":110
 *          p[0] = MPI_ARGVS_NULL
 *          return None
 *      if is_string(sequence):             # <<<<<<<<<<<<<<
 *          sequence = [sequence] * size
 *      else:
 */
  __pyx_t_2 = (__pyx_f_6mpi4py_3MPI_is_string(__pyx_v_sequence) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/asarray.pxi":111
 *          return None
 *      if is_string(sequence):
 *          sequence = [sequence] * size             # <<<<<<<<<<<<<<
 *      else:
 *          sequence = list(sequence)
 */
    __pyx_t_3 = PyList_New(1 * ((__pyx_v_size<0) ? 0:__pyx_v_size)); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    { Py_ssize_t __pyx_temp;
      for (__pyx_temp=0; __pyx_temp < __pyx_v_size; __pyx_temp++) {
        __Pyx_INCREF(__pyx_v_sequence);
        __Pyx_GIVEREF(__pyx_v_sequence);
        PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_v_sequence);
      }
    }
    __Pyx_DECREF_SET(__pyx_v_sequence, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/asarray.pxi":110
 *          p[0] = MPI_ARGVS_NULL
 *          return None
 *      if is_string(sequence):             # <<<<<<<<<<<<<<
 *          sequence = [sequence] * size
 *      else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/asarray.pxi":113
 *          sequence = [sequence] * size
 *      else:
 *          sequence = list(sequence)             # <<<<<<<<<<<<<<
 *          if size != len(sequence): raise ValueError(
 *              "expecting %d items, got %d" % (size, len(sequence)))
 */
  /*else*/ {
    __pyx_t_3 = PySequence_List(__pyx_v_sequence); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_sequence, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/asarray.pxi":114
 *      else:
 *          sequence = list(sequence)
 *          if size != len(sequence): raise ValueError(             # <<<<<<<<<<<<<<
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef int i = 0
 */
    __pyx_t_4 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(11, 114, __pyx_L1_error)
    __pyx_t_2 = ((__pyx_v_size != __pyx_t_4) != 0);
    if (unlikely(__pyx_t_2)) {

      /* "mpi4py/MPI/asarray.pxi":115
 *          sequence = list(sequence)
 *          if size != len(sequence): raise ValueError(
 *              "expecting %d items, got %d" % (size, len(sequence)))             # <<<<<<<<<<<<<<
 *      cdef int i = 0
 *      cdef char*** array = NULL
 */
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyObject_Length(__pyx_v_sequence); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(11, 115, __pyx_L1_error)
      __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
      __pyx_t_3 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_expecting_d_items_got_d, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "mpi4py/MPI/asarray.pxi":114
 *      else:
 *          sequence = list(sequence)
 *          if size != len(sequence): raise ValueError(             # <<<<<<<<<<<<<<
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef int i = 0
 */
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 114, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(11, 114, __pyx_L1_error)
    }
  }
  __pyx_L4:;

  /* "mpi4py/MPI/asarray.pxi":116
 *          if size != len(sequence): raise ValueError(
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef int i = 0             # <<<<<<<<<<<<<<
 *      cdef char*** array = NULL
 *      cdef object ob = allocate(size+1, sizeof(char**), &array)
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/asarray.pxi":117
 *              "expecting %d items, got %d" % (size, len(sequence)))
 *      cdef int i = 0
 *      cdef char*** array = NULL             # <<<<<<<<<<<<<<
 *      cdef object ob = allocate(size+1, sizeof(char**), &array)
 *      cdef object argv
 */
  __pyx_v_array = NULL;

  /* "mpi4py/MPI/asarray.pxi":118
 *      cdef int i = 0
 *      cdef char*** array = NULL
 *      cdef object ob = allocate(size+1, sizeof(char**), &array)             # <<<<<<<<<<<<<<
 *      cdef object argv
 *      for i from 0 <= i < size:
 */
  __pyx_t_6 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((__pyx_v_size + 1), (sizeof(char **)), (&__pyx_v_array))); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_ob = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/asarray.pxi":120
 *      cdef object ob = allocate(size+1, sizeof(char**), &array)
 *      cdef object argv
 *      for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *          argv = sequence[i]
 *          if argv is None: argv = []
 */
  __pyx_t_7 = __pyx_v_size;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_7; __pyx_v_i++) {

    /* "mpi4py/MPI/asarray.pxi":121
 *      cdef object argv
 *      for i from 0 <= i < size:
 *          argv = sequence[i]             # <<<<<<<<<<<<<<
 *          if argv is None: argv = []
 *          sequence[i] = asarray_argv(argv, &array[i])
 */
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_sequence, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_argv, __pyx_t_6);
    __pyx_t_6 = 0;

    /* "mpi4py/MPI/asarray.pxi":122
 *      for i from 0 <= i < size:
 *          argv = sequence[i]
 *          if argv is None: argv = []             # <<<<<<<<<<<<<<
 *          sequence[i] = asarray_argv(argv, &array[i])
 *      array[size] = NULL
 */
    __pyx_t_2 = (__pyx_v_argv == Py_None);
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {
      __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 122, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF_SET(__pyx_v_argv, __pyx_t_6);
      __pyx_t_6 = 0;
    }

    /* "mpi4py/MPI/asarray.pxi":123
 *          argv = sequence[i]
 *          if argv is None: argv = []
 *          sequence[i] = asarray_argv(argv, &array[i])             # <<<<<<<<<<<<<<
 *      array[size] = NULL
 *      p[0] = array
 */
    __pyx_t_6 = __pyx_f_6mpi4py_3MPI_asarray_argv(__pyx_v_argv, (&(__pyx_v_array[__pyx_v_i]))); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(__Pyx_SetItemInt(__pyx_v_sequence, __pyx_v_i, __pyx_t_6, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) < 0)) __PYX_ERR(11, 123, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }

  /* "mpi4py/MPI/asarray.pxi":124
 *          if argv is None: argv = []
 *          sequence[i] = asarray_argv(argv, &array[i])
 *      array[size] = NULL             # <<<<<<<<<<<<<<
 *      p[0] = array
 *      return (sequence, ob)
 */
  (__pyx_v_array[__pyx_v_size]) = NULL;

  /* "mpi4py/MPI/asarray.pxi":125
 *          sequence[i] = asarray_argv(argv, &array[i])
 *      array[size] = NULL
 *      p[0] = array             # <<<<<<<<<<<<<<
 *      return (sequence, ob)
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_array;

  /* "mpi4py/MPI/asarray.pxi":126
 *      array[size] = NULL
 *      p[0] = array
 *      return (sequence, ob)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object asarray_nprocs(object sequence, int size, int **p):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_sequence);
  __Pyx_GIVEREF(__pyx_v_sequence);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_sequence);
  __Pyx_INCREF(__pyx_v_ob);
  __Pyx_GIVEREF(__pyx_v_ob);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_ob);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":106
 *      return asarray_str(sequence, p)
 * 
 * cdef inline object asarray_argvs(object sequence, int size, char ****p):             # <<<<<<<<<<<<<<
 *      if sequence is None:
 *          p[0] = MPI_ARGVS_NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_argvs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XDECREF(__pyx_v_argv);
  __Pyx_XDECREF(__pyx_v_sequence);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/asarray.pxi":128
 *      return (sequence, ob)
 * 
 * cdef inline object asarray_nprocs(object sequence, int size, int **p):             # <<<<<<<<<<<<<<
 *      cdef object ob
 *      cdef int *array = NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_asarray_nprocs(PyObject *__pyx_v_sequence, int __pyx_v_size, int **__pyx_v_p) {
  PyObject *__pyx_v_ob = 0;
  int *__pyx_v_array;
  int __pyx_v_i;
  int __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("asarray_nprocs", 0);

  /* "mpi4py/MPI/asarray.pxi":130
 * cdef inline object asarray_nprocs(object sequence, int size, int **p):
 *      cdef object ob
 *      cdef int *array = NULL             # <<<<<<<<<<<<<<
 *      cdef int i = 0, value = 1
 *      if sequence is None or is_integral(sequence):
 */
  __pyx_v_array = NULL;

  /* "mpi4py/MPI/asarray.pxi":131
 *      cdef object ob
 *      cdef int *array = NULL
 *      cdef int i = 0, value = 1             # <<<<<<<<<<<<<<
 *      if sequence is None or is_integral(sequence):
 *          if sequence is not None:
 */
  __pyx_v_i = 0;
  __pyx_v_value = 1;

  /* "mpi4py/MPI/asarray.pxi":132
 *      cdef int *array = NULL
 *      cdef int i = 0, value = 1
 *      if sequence is None or is_integral(sequence):             # <<<<<<<<<<<<<<
 *          if sequence is not None:
 *              value = sequence
 */
  __pyx_t_2 = (__pyx_v_sequence == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_f_6mpi4py_3MPI_is_integral(__pyx_v_sequence) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/asarray.pxi":133
 *      cdef int i = 0, value = 1
 *      if sequence is None or is_integral(sequence):
 *          if sequence is not None:             # <<<<<<<<<<<<<<
 *              value = sequence
 *          ob = newarray(size, &array)
 */
    __pyx_t_1 = (__pyx_v_sequence != Py_None);
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/asarray.pxi":134
 *      if sequence is None or is_integral(sequence):
 *          if sequence is not None:
 *              value = sequence             # <<<<<<<<<<<<<<
 *          ob = newarray(size, &array)
 *          for i from 0 <= i < size:
 */
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_sequence); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 134, __pyx_L1_error)
      __pyx_v_value = __pyx_t_4;

      /* "mpi4py/MPI/asarray.pxi":133
 *      cdef int i = 0, value = 1
 *      if sequence is None or is_integral(sequence):
 *          if sequence is not None:             # <<<<<<<<<<<<<<
 *              value = sequence
 *          ob = newarray(size, &array)
 */
    }

    /* "mpi4py/MPI/asarray.pxi":135
 *          if sequence is not None:
 *              value = sequence
 *          ob = newarray(size, &array)             # <<<<<<<<<<<<<<
 *          for i from 0 <= i < size:
 *              array[i] = value
 */
    __pyx_t_5 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_size, (&__pyx_v_array)); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_ob = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/asarray.pxi":136
 *              value = sequence
 *          ob = newarray(size, &array)
 *          for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *              array[i] = value
 *      else:
 */
    __pyx_t_4 = __pyx_v_size;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {

      /* "mpi4py/MPI/asarray.pxi":137
 *          ob = newarray(size, &array)
 *          for i from 0 <= i < size:
 *              array[i] = value             # <<<<<<<<<<<<<<
 *      else:
 *          ob = chkarray(sequence, size, &array)
 */
      (__pyx_v_array[__pyx_v_i]) = __pyx_v_value;
    }

    /* "mpi4py/MPI/asarray.pxi":132
 *      cdef int *array = NULL
 *      cdef int i = 0, value = 1
 *      if sequence is None or is_integral(sequence):             # <<<<<<<<<<<<<<
 *          if sequence is not None:
 *              value = sequence
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/asarray.pxi":139
 *              array[i] = value
 *      else:
 *          ob = chkarray(sequence, size, &array)             # <<<<<<<<<<<<<<
 *      p[0] = array
 *      return ob
 */
  /*else*/ {
    __pyx_t_5 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_sequence, __pyx_v_size, (&__pyx_v_array)); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_v_ob = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/asarray.pxi":140
 *      else:
 *          ob = chkarray(sequence, size, &array)
 *      p[0] = array             # <<<<<<<<<<<<<<
 *      return ob
 * 
 */
  (__pyx_v_p[0]) = __pyx_v_array;

  /* "mpi4py/MPI/asarray.pxi":141
 *          ob = chkarray(sequence, size, &array)
 *      p[0] = array
 *      return ob             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  /* "mpi4py/MPI/asarray.pxi":128
 *      return (sequence, ob)
 * 
 * cdef inline object asarray_nprocs(object sequence, int size, int **p):             # <<<<<<<<<<<<<<
 *      cdef object ob
 *      cdef int *array = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_nprocs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":19
 * # Status
 * 
 * cdef inline MPI_Status *arg_Status(object status):             # <<<<<<<<<<<<<<
 *     if status is None: return MPI_STATUS_IGNORE
 *     return &((<Status>status).ob_mpi)
 */

static CYTHON_INLINE MPI_Status *__pyx_f_6mpi4py_3MPI_arg_Status(PyObject *__pyx_v_status) {
  MPI_Status *__pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("arg_Status", 0);

  /* "mpi4py/MPI/helpers.pxi":20
 * 
 * cdef inline MPI_Status *arg_Status(object status):
 *     if status is None: return MPI_STATUS_IGNORE             # <<<<<<<<<<<<<<
 *     return &((<Status>status).ob_mpi)
 * 
 */
  __pyx_t_1 = (__pyx_v_status == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = MPI_STATUS_IGNORE;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":21
 * cdef inline MPI_Status *arg_Status(object status):
 *     if status is None: return MPI_STATUS_IGNORE
 *     return &((<Status>status).ob_mpi)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = (&((struct PyMPIStatusObject *)__pyx_v_status)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":19
 * # Status
 * 
 * cdef inline MPI_Status *arg_Status(object status):             # <<<<<<<<<<<<<<
 *     if status is None: return MPI_STATUS_IGNORE
 *     return &((<Status>status).ob_mpi)
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":26
 * # Datatype
 * 
 * cdef inline int builtin_Datatype(MPI_Datatype ob):             # <<<<<<<<<<<<<<
 *     cdef int ni = 0, na = 0, nt = 0, combiner = MPI_UNDEFINED
 *     if ob == MPI_DATATYPE_NULL: return 1
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_builtin_Datatype(MPI_Datatype __pyx_v_ob) {
  int __pyx_v_ni;
  int __pyx_v_na;
  int __pyx_v_nt;
  int __pyx_v_combiner;
  int __pyx_v_ierr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("builtin_Datatype", 0);

  /* "mpi4py/MPI/helpers.pxi":27
 * 
 * cdef inline int builtin_Datatype(MPI_Datatype ob):
 *     cdef int ni = 0, na = 0, nt = 0, combiner = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     if ob == MPI_DATATYPE_NULL: return 1
 *     cdef int ierr = MPI_Type_get_envelope(ob, &ni, &na, &nt, &combiner)
 */
  __pyx_v_ni = 0;
  __pyx_v_na = 0;
  __pyx_v_nt = 0;
  __pyx_v_combiner = MPI_UNDEFINED;

  /* "mpi4py/MPI/helpers.pxi":28
 * cdef inline int builtin_Datatype(MPI_Datatype ob):
 *     cdef int ni = 0, na = 0, nt = 0, combiner = MPI_UNDEFINED
 *     if ob == MPI_DATATYPE_NULL: return 1             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_Type_get_envelope(ob, &ni, &na, &nt, &combiner)
 *     if ierr != MPI_SUCCESS: return 0 # XXX
 */
  __pyx_t_1 = ((__pyx_v_ob == MPI_DATATYPE_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":29
 *     cdef int ni = 0, na = 0, nt = 0, combiner = MPI_UNDEFINED
 *     if ob == MPI_DATATYPE_NULL: return 1
 *     cdef int ierr = MPI_Type_get_envelope(ob, &ni, &na, &nt, &combiner)             # <<<<<<<<<<<<<<
 *     if ierr != MPI_SUCCESS: return 0 # XXX
 *     return (combiner == MPI_COMBINER_NAMED       or
 */
  __pyx_v_ierr = MPI_Type_get_envelope(__pyx_v_ob, (&__pyx_v_ni), (&__pyx_v_na), (&__pyx_v_nt), (&__pyx_v_combiner));

  /* "mpi4py/MPI/helpers.pxi":30
 *     if ob == MPI_DATATYPE_NULL: return 1
 *     cdef int ierr = MPI_Type_get_envelope(ob, &ni, &na, &nt, &combiner)
 *     if ierr != MPI_SUCCESS: return 0 # XXX             # <<<<<<<<<<<<<<
 *     return (combiner == MPI_COMBINER_NAMED       or
 *             combiner == MPI_COMBINER_F90_INTEGER or
 */
  __pyx_t_1 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":31
 *     cdef int ierr = MPI_Type_get_envelope(ob, &ni, &na, &nt, &combiner)
 *     if ierr != MPI_SUCCESS: return 0 # XXX
 *     return (combiner == MPI_COMBINER_NAMED       or             # <<<<<<<<<<<<<<
 *             combiner == MPI_COMBINER_F90_INTEGER or
 *             combiner == MPI_COMBINER_F90_REAL    or
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_NAMED);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }

  /* "mpi4py/MPI/helpers.pxi":32
 *     if ierr != MPI_SUCCESS: return 0 # XXX
 *     return (combiner == MPI_COMBINER_NAMED       or
 *             combiner == MPI_COMBINER_F90_INTEGER or             # <<<<<<<<<<<<<<
 *             combiner == MPI_COMBINER_F90_REAL    or
 *             combiner == MPI_COMBINER_F90_COMPLEX)
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_F90_INTEGER);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }

  /* "mpi4py/MPI/helpers.pxi":33
 *     return (combiner == MPI_COMBINER_NAMED       or
 *             combiner == MPI_COMBINER_F90_INTEGER or
 *             combiner == MPI_COMBINER_F90_REAL    or             # <<<<<<<<<<<<<<
 *             combiner == MPI_COMBINER_F90_COMPLEX)
 * 
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_F90_REAL);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }

  /* "mpi4py/MPI/helpers.pxi":34
 *             combiner == MPI_COMBINER_F90_INTEGER or
 *             combiner == MPI_COMBINER_F90_REAL    or
 *             combiner == MPI_COMBINER_F90_COMPLEX)             # <<<<<<<<<<<<<<
 * 
 * cdef inline Datatype new_Datatype(MPI_Datatype ob):
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_F90_COMPLEX);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":26
 * # Datatype
 * 
 * cdef inline int builtin_Datatype(MPI_Datatype ob):             # <<<<<<<<<<<<<<
 *     cdef int ni = 0, na = 0, nt = 0, combiner = MPI_UNDEFINED
 *     if ob == MPI_DATATYPE_NULL: return 1
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":36
 *             combiner == MPI_COMBINER_F90_COMPLEX)
 * 
 * cdef inline Datatype new_Datatype(MPI_Datatype ob):             # <<<<<<<<<<<<<<
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIDatatypeObject *__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_Datatype __pyx_v_ob) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  struct PyMPIDatatypeObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Datatype", 0);

  /* "mpi4py/MPI/helpers.pxi":37
 * 
 * cdef inline Datatype new_Datatype(MPI_Datatype ob):
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *     datatype.ob_mpi = ob
 *     return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 37, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":38
 * cdef inline Datatype new_Datatype(MPI_Datatype ob):
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return datatype
 * 
 */
  __pyx_v_datatype->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":39
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob
 *     return datatype             # <<<<<<<<<<<<<<
 * 
 * cdef inline Datatype ref_Datatype(MPI_Datatype ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = __pyx_v_datatype;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":36
 *             combiner == MPI_COMBINER_F90_COMPLEX)
 * 
 * cdef inline Datatype new_Datatype(MPI_Datatype ob):             # <<<<<<<<<<<<<<
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Datatype", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":41
 *     return datatype
 * 
 * cdef inline Datatype ref_Datatype(MPI_Datatype ob):             # <<<<<<<<<<<<<<
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIDatatypeObject *__pyx_f_6mpi4py_3MPI_ref_Datatype(MPI_Datatype __pyx_v_ob) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  struct PyMPIDatatypeObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("ref_Datatype", 0);

  /* "mpi4py/MPI/helpers.pxi":42
 * 
 * cdef inline Datatype ref_Datatype(MPI_Datatype ob):
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *     datatype.ob_mpi = ob
 *     return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 42, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":43
 * cdef inline Datatype ref_Datatype(MPI_Datatype ob):
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return datatype
 * 
 */
  __pyx_v_datatype->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":44
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob
 *     return datatype             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Datatype(MPI_Datatype* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = __pyx_v_datatype;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":41
 *     return datatype
 * 
 * cdef inline Datatype ref_Datatype(MPI_Datatype ob):             # <<<<<<<<<<<<<<
 *     cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *     datatype.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.ref_Datatype", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":46
 *     return datatype
 * 
 * cdef inline int del_Datatype(MPI_Datatype* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL                        : return 0
 *     if ob[0] == MPI_DATATYPE_NULL           : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Datatype(MPI_Datatype *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Datatype", 0);

  /* "mpi4py/MPI/helpers.pxi":47
 * 
 * cdef inline int del_Datatype(MPI_Datatype* ob):
 *     if ob    == NULL                        : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_DATATYPE_NULL           : return 0
 *     if ob[0] == MPI_UB                      : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":48
 * cdef inline int del_Datatype(MPI_Datatype* ob):
 *     if ob    == NULL                        : return 0
 *     if ob[0] == MPI_DATATYPE_NULL           : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UB                      : return 0
 *     if ob[0] == MPI_LB                      : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_DATATYPE_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":49
 *     if ob    == NULL                        : return 0
 *     if ob[0] == MPI_DATATYPE_NULL           : return 0
 *     if ob[0] == MPI_UB                      : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LB                      : return 0
 *     if ob[0] == MPI_PACKED                  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UB) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":50
 *     if ob[0] == MPI_DATATYPE_NULL           : return 0
 *     if ob[0] == MPI_UB                      : return 0
 *     if ob[0] == MPI_LB                      : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_PACKED                  : return 0
 *     if ob[0] == MPI_BYTE                    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LB) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":51
 *     if ob[0] == MPI_UB                      : return 0
 *     if ob[0] == MPI_LB                      : return 0
 *     if ob[0] == MPI_PACKED                  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_BYTE                    : return 0
 *     if ob[0] == MPI_AINT                    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_PACKED) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":52
 *     if ob[0] == MPI_LB                      : return 0
 *     if ob[0] == MPI_PACKED                  : return 0
 *     if ob[0] == MPI_BYTE                    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_AINT                    : return 0
 *     if ob[0] == MPI_OFFSET                  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_BYTE) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":53
 *     if ob[0] == MPI_PACKED                  : return 0
 *     if ob[0] == MPI_BYTE                    : return 0
 *     if ob[0] == MPI_AINT                    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_OFFSET                  : return 0
 *     if ob[0] == MPI_COUNT                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_AINT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":54
 *     if ob[0] == MPI_BYTE                    : return 0
 *     if ob[0] == MPI_AINT                    : return 0
 *     if ob[0] == MPI_OFFSET                  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COUNT                   : return 0
 *     if ob[0] == MPI_CHAR                    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_OFFSET) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":55
 *     if ob[0] == MPI_AINT                    : return 0
 *     if ob[0] == MPI_OFFSET                  : return 0
 *     if ob[0] == MPI_COUNT                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_CHAR                    : return 0
 *     if ob[0] == MPI_WCHAR                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COUNT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":56
 *     if ob[0] == MPI_OFFSET                  : return 0
 *     if ob[0] == MPI_COUNT                   : return 0
 *     if ob[0] == MPI_CHAR                    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_WCHAR                   : return 0
 *     if ob[0] == MPI_SIGNED_CHAR             : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_CHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":57
 *     if ob[0] == MPI_COUNT                   : return 0
 *     if ob[0] == MPI_CHAR                    : return 0
 *     if ob[0] == MPI_WCHAR                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_SIGNED_CHAR             : return 0
 *     if ob[0] == MPI_SHORT                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_WCHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":58
 *     if ob[0] == MPI_CHAR                    : return 0
 *     if ob[0] == MPI_WCHAR                   : return 0
 *     if ob[0] == MPI_SIGNED_CHAR             : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_SHORT                   : return 0
 *     if ob[0] == MPI_INT                     : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_SIGNED_CHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":59
 *     if ob[0] == MPI_WCHAR                   : return 0
 *     if ob[0] == MPI_SIGNED_CHAR             : return 0
 *     if ob[0] == MPI_SHORT                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INT                     : return 0
 *     if ob[0] == MPI_LONG                    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_SHORT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":60
 *     if ob[0] == MPI_SIGNED_CHAR             : return 0
 *     if ob[0] == MPI_SHORT                   : return 0
 *     if ob[0] == MPI_INT                     : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LONG                    : return 0
 *     if ob[0] == MPI_LONG_LONG               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":61
 *     if ob[0] == MPI_SHORT                   : return 0
 *     if ob[0] == MPI_INT                     : return 0
 *     if ob[0] == MPI_LONG                    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LONG_LONG               : return 0
 *     if ob[0] == MPI_UNSIGNED_CHAR           : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":62
 *     if ob[0] == MPI_INT                     : return 0
 *     if ob[0] == MPI_LONG                    : return 0
 *     if ob[0] == MPI_LONG_LONG               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UNSIGNED_CHAR           : return 0
 *     if ob[0] == MPI_UNSIGNED_SHORT          : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LONG_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":63
 *     if ob[0] == MPI_LONG                    : return 0
 *     if ob[0] == MPI_LONG_LONG               : return 0
 *     if ob[0] == MPI_UNSIGNED_CHAR           : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UNSIGNED_SHORT          : return 0
 *     if ob[0] == MPI_UNSIGNED                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UNSIGNED_CHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":64
 *     if ob[0] == MPI_LONG_LONG               : return 0
 *     if ob[0] == MPI_UNSIGNED_CHAR           : return 0
 *     if ob[0] == MPI_UNSIGNED_SHORT          : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UNSIGNED                : return 0
 *     if ob[0] == MPI_UNSIGNED_LONG           : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UNSIGNED_SHORT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":65
 *     if ob[0] == MPI_UNSIGNED_CHAR           : return 0
 *     if ob[0] == MPI_UNSIGNED_SHORT          : return 0
 *     if ob[0] == MPI_UNSIGNED                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UNSIGNED_LONG           : return 0
 *     if ob[0] == MPI_UNSIGNED_LONG_LONG      : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UNSIGNED) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":66
 *     if ob[0] == MPI_UNSIGNED_SHORT          : return 0
 *     if ob[0] == MPI_UNSIGNED                : return 0
 *     if ob[0] == MPI_UNSIGNED_LONG           : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UNSIGNED_LONG_LONG      : return 0
 *     if ob[0] == MPI_FLOAT                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UNSIGNED_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":67
 *     if ob[0] == MPI_UNSIGNED                : return 0
 *     if ob[0] == MPI_UNSIGNED_LONG           : return 0
 *     if ob[0] == MPI_UNSIGNED_LONG_LONG      : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_FLOAT                   : return 0
 *     if ob[0] == MPI_DOUBLE                  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UNSIGNED_LONG_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":68
 *     if ob[0] == MPI_UNSIGNED_LONG           : return 0
 *     if ob[0] == MPI_UNSIGNED_LONG_LONG      : return 0
 *     if ob[0] == MPI_FLOAT                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_DOUBLE                  : return 0
 *     if ob[0] == MPI_LONG_DOUBLE             : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_FLOAT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":69
 *     if ob[0] == MPI_UNSIGNED_LONG_LONG      : return 0
 *     if ob[0] == MPI_FLOAT                   : return 0
 *     if ob[0] == MPI_DOUBLE                  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LONG_DOUBLE             : return 0
 *     if ob[0] == MPI_C_BOOL                  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_DOUBLE) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":70
 *     if ob[0] == MPI_FLOAT                   : return 0
 *     if ob[0] == MPI_DOUBLE                  : return 0
 *     if ob[0] == MPI_LONG_DOUBLE             : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_C_BOOL                  : return 0
 *     if ob[0] == MPI_INT8_T                  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LONG_DOUBLE) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":71
 *     if ob[0] == MPI_DOUBLE                  : return 0
 *     if ob[0] == MPI_LONG_DOUBLE             : return 0
 *     if ob[0] == MPI_C_BOOL                  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INT8_T                  : return 0
 *     if ob[0] == MPI_INT16_T                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_C_BOOL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":72
 *     if ob[0] == MPI_LONG_DOUBLE             : return 0
 *     if ob[0] == MPI_C_BOOL                  : return 0
 *     if ob[0] == MPI_INT8_T                  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INT16_T                 : return 0
 *     if ob[0] == MPI_INT32_T                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INT8_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":73
 *     if ob[0] == MPI_C_BOOL                  : return 0
 *     if ob[0] == MPI_INT8_T                  : return 0
 *     if ob[0] == MPI_INT16_T                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INT32_T                 : return 0
 *     if ob[0] == MPI_INT64_T                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INT16_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":74
 *     if ob[0] == MPI_INT8_T                  : return 0
 *     if ob[0] == MPI_INT16_T                 : return 0
 *     if ob[0] == MPI_INT32_T                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INT64_T                 : return 0
 *     if ob[0] == MPI_UINT8_T                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INT32_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":75
 *     if ob[0] == MPI_INT16_T                 : return 0
 *     if ob[0] == MPI_INT32_T                 : return 0
 *     if ob[0] == MPI_INT64_T                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UINT8_T                 : return 0
 *     if ob[0] == MPI_UINT16_T                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INT64_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":76
 *     if ob[0] == MPI_INT32_T                 : return 0
 *     if ob[0] == MPI_INT64_T                 : return 0
 *     if ob[0] == MPI_UINT8_T                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UINT16_T                : return 0
 *     if ob[0] == MPI_UINT32_T                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UINT8_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":77
 *     if ob[0] == MPI_INT64_T                 : return 0
 *     if ob[0] == MPI_UINT8_T                 : return 0
 *     if ob[0] == MPI_UINT16_T                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UINT32_T                : return 0
 *     if ob[0] == MPI_UINT64_T                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UINT16_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":78
 *     if ob[0] == MPI_UINT8_T                 : return 0
 *     if ob[0] == MPI_UINT16_T                : return 0
 *     if ob[0] == MPI_UINT32_T                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_UINT64_T                : return 0
 *     if ob[0] == MPI_C_COMPLEX               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UINT32_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":79
 *     if ob[0] == MPI_UINT16_T                : return 0
 *     if ob[0] == MPI_UINT32_T                : return 0
 *     if ob[0] == MPI_UINT64_T                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_C_COMPLEX               : return 0
 *     if ob[0] == MPI_C_FLOAT_COMPLEX         : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_UINT64_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":80
 *     if ob[0] == MPI_UINT32_T                : return 0
 *     if ob[0] == MPI_UINT64_T                : return 0
 *     if ob[0] == MPI_C_COMPLEX               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_C_FLOAT_COMPLEX         : return 0
 *     if ob[0] == MPI_C_DOUBLE_COMPLEX        : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_C_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":81
 *     if ob[0] == MPI_UINT64_T                : return 0
 *     if ob[0] == MPI_C_COMPLEX               : return 0
 *     if ob[0] == MPI_C_FLOAT_COMPLEX         : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_C_DOUBLE_COMPLEX        : return 0
 *     if ob[0] == MPI_C_LONG_DOUBLE_COMPLEX   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_C_FLOAT_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":82
 *     if ob[0] == MPI_C_COMPLEX               : return 0
 *     if ob[0] == MPI_C_FLOAT_COMPLEX         : return 0
 *     if ob[0] == MPI_C_DOUBLE_COMPLEX        : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_C_LONG_DOUBLE_COMPLEX   : return 0
 *     if ob[0] == MPI_CXX_BOOL                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_C_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":83
 *     if ob[0] == MPI_C_FLOAT_COMPLEX         : return 0
 *     if ob[0] == MPI_C_DOUBLE_COMPLEX        : return 0
 *     if ob[0] == MPI_C_LONG_DOUBLE_COMPLEX   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_CXX_BOOL                : return 0
 *     if ob[0] == MPI_CXX_FLOAT_COMPLEX       : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_C_LONG_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":84
 *     if ob[0] == MPI_C_DOUBLE_COMPLEX        : return 0
 *     if ob[0] == MPI_C_LONG_DOUBLE_COMPLEX   : return 0
 *     if ob[0] == MPI_CXX_BOOL                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_CXX_FLOAT_COMPLEX       : return 0
 *     if ob[0] == MPI_CXX_DOUBLE_COMPLEX      : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_CXX_BOOL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":85
 *     if ob[0] == MPI_C_LONG_DOUBLE_COMPLEX   : return 0
 *     if ob[0] == MPI_CXX_BOOL                : return 0
 *     if ob[0] == MPI_CXX_FLOAT_COMPLEX       : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_CXX_DOUBLE_COMPLEX      : return 0
 *     if ob[0] == MPI_CXX_LONG_DOUBLE_COMPLEX : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_CXX_FLOAT_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":86
 *     if ob[0] == MPI_CXX_BOOL                : return 0
 *     if ob[0] == MPI_CXX_FLOAT_COMPLEX       : return 0
 *     if ob[0] == MPI_CXX_DOUBLE_COMPLEX      : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_CXX_LONG_DOUBLE_COMPLEX : return 0
 *     if ob[0] == MPI_SHORT_INT               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_CXX_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":87
 *     if ob[0] == MPI_CXX_FLOAT_COMPLEX       : return 0
 *     if ob[0] == MPI_CXX_DOUBLE_COMPLEX      : return 0
 *     if ob[0] == MPI_CXX_LONG_DOUBLE_COMPLEX : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_SHORT_INT               : return 0
 *     if ob[0] == MPI_2INT                    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_CXX_LONG_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":88
 *     if ob[0] == MPI_CXX_DOUBLE_COMPLEX      : return 0
 *     if ob[0] == MPI_CXX_LONG_DOUBLE_COMPLEX : return 0
 *     if ob[0] == MPI_SHORT_INT               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_2INT                    : return 0
 *     if ob[0] == MPI_LONG_INT                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_SHORT_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":89
 *     if ob[0] == MPI_CXX_LONG_DOUBLE_COMPLEX : return 0
 *     if ob[0] == MPI_SHORT_INT               : return 0
 *     if ob[0] == MPI_2INT                    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LONG_INT                : return 0
 *     if ob[0] == MPI_FLOAT_INT               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_2INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":90
 *     if ob[0] == MPI_SHORT_INT               : return 0
 *     if ob[0] == MPI_2INT                    : return 0
 *     if ob[0] == MPI_LONG_INT                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_FLOAT_INT               : return 0
 *     if ob[0] == MPI_DOUBLE_INT              : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LONG_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":91
 *     if ob[0] == MPI_2INT                    : return 0
 *     if ob[0] == MPI_LONG_INT                : return 0
 *     if ob[0] == MPI_FLOAT_INT               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_DOUBLE_INT              : return 0
 *     if ob[0] == MPI_LONG_DOUBLE_INT         : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_FLOAT_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":92
 *     if ob[0] == MPI_LONG_INT                : return 0
 *     if ob[0] == MPI_FLOAT_INT               : return 0
 *     if ob[0] == MPI_DOUBLE_INT              : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LONG_DOUBLE_INT         : return 0
 *     if ob[0] == MPI_CHARACTER               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_DOUBLE_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":93
 *     if ob[0] == MPI_FLOAT_INT               : return 0
 *     if ob[0] == MPI_DOUBLE_INT              : return 0
 *     if ob[0] == MPI_LONG_DOUBLE_INT         : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_CHARACTER               : return 0
 *     if ob[0] == MPI_LOGICAL                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LONG_DOUBLE_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":94
 *     if ob[0] == MPI_DOUBLE_INT              : return 0
 *     if ob[0] == MPI_LONG_DOUBLE_INT         : return 0
 *     if ob[0] == MPI_CHARACTER               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LOGICAL                 : return 0
 *     if ob[0] == MPI_INTEGER                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_CHARACTER) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":95
 *     if ob[0] == MPI_LONG_DOUBLE_INT         : return 0
 *     if ob[0] == MPI_CHARACTER               : return 0
 *     if ob[0] == MPI_LOGICAL                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INTEGER                 : return 0
 *     if ob[0] == MPI_REAL                    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LOGICAL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":96
 *     if ob[0] == MPI_CHARACTER               : return 0
 *     if ob[0] == MPI_LOGICAL                 : return 0
 *     if ob[0] == MPI_INTEGER                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REAL                    : return 0
 *     if ob[0] == MPI_DOUBLE_PRECISION        : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INTEGER) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":97
 *     if ob[0] == MPI_LOGICAL                 : return 0
 *     if ob[0] == MPI_INTEGER                 : return 0
 *     if ob[0] == MPI_REAL                    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_DOUBLE_PRECISION        : return 0
 *     if ob[0] == MPI_COMPLEX                 : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REAL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":98
 *     if ob[0] == MPI_INTEGER                 : return 0
 *     if ob[0] == MPI_REAL                    : return 0
 *     if ob[0] == MPI_DOUBLE_PRECISION        : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMPLEX                 : return 0
 *     if ob[0] == MPI_DOUBLE_COMPLEX          : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_DOUBLE_PRECISION) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":99
 *     if ob[0] == MPI_REAL                    : return 0
 *     if ob[0] == MPI_DOUBLE_PRECISION        : return 0
 *     if ob[0] == MPI_COMPLEX                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_DOUBLE_COMPLEX          : return 0
 *     if ob[0] == MPI_LOGICAL1                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":100
 *     if ob[0] == MPI_DOUBLE_PRECISION        : return 0
 *     if ob[0] == MPI_COMPLEX                 : return 0
 *     if ob[0] == MPI_DOUBLE_COMPLEX          : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LOGICAL1                : return 0
 *     if ob[0] == MPI_LOGICAL2                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":101
 *     if ob[0] == MPI_COMPLEX                 : return 0
 *     if ob[0] == MPI_DOUBLE_COMPLEX          : return 0
 *     if ob[0] == MPI_LOGICAL1                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LOGICAL2                : return 0
 *     if ob[0] == MPI_LOGICAL4                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LOGICAL1) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":102
 *     if ob[0] == MPI_DOUBLE_COMPLEX          : return 0
 *     if ob[0] == MPI_LOGICAL1                : return 0
 *     if ob[0] == MPI_LOGICAL2                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LOGICAL4                : return 0
 *     if ob[0] == MPI_LOGICAL8                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LOGICAL2) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":103
 *     if ob[0] == MPI_LOGICAL1                : return 0
 *     if ob[0] == MPI_LOGICAL2                : return 0
 *     if ob[0] == MPI_LOGICAL4                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LOGICAL8                : return 0
 *     if ob[0] == MPI_INTEGER1                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LOGICAL4) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":104
 *     if ob[0] == MPI_LOGICAL2                : return 0
 *     if ob[0] == MPI_LOGICAL4                : return 0
 *     if ob[0] == MPI_LOGICAL8                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INTEGER1                : return 0
 *     if ob[0] == MPI_INTEGER2                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LOGICAL8) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":105
 *     if ob[0] == MPI_LOGICAL4                : return 0
 *     if ob[0] == MPI_LOGICAL8                : return 0
 *     if ob[0] == MPI_INTEGER1                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INTEGER2                : return 0
 *     if ob[0] == MPI_INTEGER4                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INTEGER1) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":106
 *     if ob[0] == MPI_LOGICAL8                : return 0
 *     if ob[0] == MPI_INTEGER1                : return 0
 *     if ob[0] == MPI_INTEGER2                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INTEGER4                : return 0
 *     if ob[0] == MPI_INTEGER8                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INTEGER2) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":107
 *     if ob[0] == MPI_INTEGER1                : return 0
 *     if ob[0] == MPI_INTEGER2                : return 0
 *     if ob[0] == MPI_INTEGER4                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INTEGER8                : return 0
 *     if ob[0] == MPI_INTEGER16               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INTEGER4) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":108
 *     if ob[0] == MPI_INTEGER2                : return 0
 *     if ob[0] == MPI_INTEGER4                : return 0
 *     if ob[0] == MPI_INTEGER8                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INTEGER16               : return 0
 *     if ob[0] == MPI_REAL2                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INTEGER8) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":109
 *     if ob[0] == MPI_INTEGER4                : return 0
 *     if ob[0] == MPI_INTEGER8                : return 0
 *     if ob[0] == MPI_INTEGER16               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REAL2                   : return 0
 *     if ob[0] == MPI_REAL4                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INTEGER16) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":110
 *     if ob[0] == MPI_INTEGER8                : return 0
 *     if ob[0] == MPI_INTEGER16               : return 0
 *     if ob[0] == MPI_REAL2                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REAL4                   : return 0
 *     if ob[0] == MPI_REAL8                   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REAL2) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":111
 *     if ob[0] == MPI_INTEGER16               : return 0
 *     if ob[0] == MPI_REAL2                   : return 0
 *     if ob[0] == MPI_REAL4                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REAL8                   : return 0
 *     if ob[0] == MPI_REAL16                  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REAL4) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":112
 *     if ob[0] == MPI_REAL2                   : return 0
 *     if ob[0] == MPI_REAL4                   : return 0
 *     if ob[0] == MPI_REAL8                   : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REAL16                  : return 0
 *     if ob[0] == MPI_COMPLEX4                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REAL8) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":113
 *     if ob[0] == MPI_REAL4                   : return 0
 *     if ob[0] == MPI_REAL8                   : return 0
 *     if ob[0] == MPI_REAL16                  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMPLEX4                : return 0
 *     if ob[0] == MPI_COMPLEX8                : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REAL16) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":114
 *     if ob[0] == MPI_REAL8                   : return 0
 *     if ob[0] == MPI_REAL16                  : return 0
 *     if ob[0] == MPI_COMPLEX4                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMPLEX8                : return 0
 *     if ob[0] == MPI_COMPLEX16               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMPLEX4) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":115
 *     if ob[0] == MPI_REAL16                  : return 0
 *     if ob[0] == MPI_COMPLEX4                : return 0
 *     if ob[0] == MPI_COMPLEX8                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMPLEX16               : return 0
 *     if ob[0] == MPI_COMPLEX32               : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMPLEX8) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":116
 *     if ob[0] == MPI_COMPLEX4                : return 0
 *     if ob[0] == MPI_COMPLEX8                : return 0
 *     if ob[0] == MPI_COMPLEX16               : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMPLEX32               : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMPLEX16) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":117
 *     if ob[0] == MPI_COMPLEX8                : return 0
 *     if ob[0] == MPI_COMPLEX16               : return 0
 *     if ob[0] == MPI_COMPLEX32               : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMPLEX32) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":119
 *     if ob[0] == MPI_COMPLEX32               : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     if builtin_Datatype(ob[0]): return 0
 *     #
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":120
 *     #
 *     if not mpi_active(): return 0
 *     if builtin_Datatype(ob[0]): return 0             # <<<<<<<<<<<<<<
 *     #
 *     return MPI_Type_free(ob)
 */
  __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_builtin_Datatype((__pyx_v_ob[0])) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":122
 *     if builtin_Datatype(ob[0]): return 0
 *     #
 *     return MPI_Type_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Type_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":46
 *     return datatype
 * 
 * cdef inline int del_Datatype(MPI_Datatype* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL                        : return 0
 *     if ob[0] == MPI_DATATYPE_NULL           : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":8
 * empty_status.MPI_ERROR  = MPI_SUCCESS
 * 
 * cdef object acquire_rs(object requests,             # <<<<<<<<<<<<<<
 *                        object statuses,
 *                        int         *count,
 */

static PyObject *__pyx_f_6mpi4py_3MPI_acquire_rs(PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses, int *__pyx_v_count, MPI_Request **__pyx_v_rp, MPI_Status **__pyx_v_sp) {
  MPI_Request *__pyx_v_array_r;
  MPI_Status *__pyx_v_array_s;
  PyObject *__pyx_v_ob_r = 0;
  PyObject *__pyx_v_ob_s = 0;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  MPI_Request __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("acquire_rs", 0);

  /* "mpi4py/MPI/reqimpl.pxi":13
 *                        MPI_Request *rp[],
 *                        MPI_Status  *sp[]):
 *      cdef MPI_Request *array_r = NULL             # <<<<<<<<<<<<<<
 *      cdef MPI_Status  *array_s = NULL
 *      cdef object ob_r = None, ob_s = None
 */
  __pyx_v_array_r = NULL;

  /* "mpi4py/MPI/reqimpl.pxi":14
 *                        MPI_Status  *sp[]):
 *      cdef MPI_Request *array_r = NULL
 *      cdef MPI_Status  *array_s = NULL             # <<<<<<<<<<<<<<
 *      cdef object ob_r = None, ob_s = None
 *      cdef Py_ssize_t i = 0, n = len(requests)
 */
  __pyx_v_array_s = NULL;

  /* "mpi4py/MPI/reqimpl.pxi":15
 *      cdef MPI_Request *array_r = NULL
 *      cdef MPI_Status  *array_s = NULL
 *      cdef object ob_r = None, ob_s = None             # <<<<<<<<<<<<<<
 *      cdef Py_ssize_t i = 0, n = len(requests)
 *      count[0] = <int>n
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_ob_r = Py_None;
  __Pyx_INCREF(Py_None);
  __pyx_v_ob_s = Py_None;

  /* "mpi4py/MPI/reqimpl.pxi":16
 *      cdef MPI_Status  *array_s = NULL
 *      cdef object ob_r = None, ob_s = None
 *      cdef Py_ssize_t i = 0, n = len(requests)             # <<<<<<<<<<<<<<
 *      count[0] = <int>n
 *      ob_r = allocate(n, sizeof(MPI_Request), &array_r)
 */
  __pyx_v_i = 0;
  __pyx_t_1 = PyObject_Length(__pyx_v_requests); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(13, 16, __pyx_L1_error)
  __pyx_v_n = __pyx_t_1;

  /* "mpi4py/MPI/reqimpl.pxi":17
 *      cdef object ob_r = None, ob_s = None
 *      cdef Py_ssize_t i = 0, n = len(requests)
 *      count[0] = <int>n             # <<<<<<<<<<<<<<
 *      ob_r = allocate(n, sizeof(MPI_Request), &array_r)
 *      for i from 0 <= i < n:
 */
  (__pyx_v_count[0]) = ((int)__pyx_v_n);

  /* "mpi4py/MPI/reqimpl.pxi":18
 *      cdef Py_ssize_t i = 0, n = len(requests)
 *      count[0] = <int>n
 *      ob_r = allocate(n, sizeof(MPI_Request), &array_r)             # <<<<<<<<<<<<<<
 *      for i from 0 <= i < n:
 *          array_r[i] = (<Request?>requests[i]).ob_mpi
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_n, (sizeof(MPI_Request)), (&__pyx_v_array_r))); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_ob_r, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":19
 *      count[0] = <int>n
 *      ob_r = allocate(n, sizeof(MPI_Request), &array_r)
 *      for i from 0 <= i < n:             # <<<<<<<<<<<<<<
 *          array_r[i] = (<Request?>requests[i]).ob_mpi
 *      rp[0] = array_r
 */
  __pyx_t_1 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

    /* "mpi4py/MPI/reqimpl.pxi":20
 *      ob_r = allocate(n, sizeof(MPI_Request), &array_r)
 *      for i from 0 <= i < n:
 *          array_r[i] = (<Request?>requests[i]).ob_mpi             # <<<<<<<<<<<<<<
 *      rp[0] = array_r
 *      if statuses is not None:
 */
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_requests, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Request)))) __PYX_ERR(13, 20, __pyx_L1_error)
    __pyx_t_3 = ((struct PyMPIRequestObject *)__pyx_t_2)->ob_mpi;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    (__pyx_v_array_r[__pyx_v_i]) = __pyx_t_3;
  }

  /* "mpi4py/MPI/reqimpl.pxi":21
 *      for i from 0 <= i < n:
 *          array_r[i] = (<Request?>requests[i]).ob_mpi
 *      rp[0] = array_r             # <<<<<<<<<<<<<<
 *      if statuses is not None:
 *          ob_s = allocate(n, sizeof(MPI_Status), &array_s)
 */
  (__pyx_v_rp[0]) = __pyx_v_array_r;

  /* "mpi4py/MPI/reqimpl.pxi":22
 *          array_r[i] = (<Request?>requests[i]).ob_mpi
 *      rp[0] = array_r
 *      if statuses is not None:             # <<<<<<<<<<<<<<
 *          ob_s = allocate(n, sizeof(MPI_Status), &array_s)
 *          for i from 0 <= i < n:
 */
  __pyx_t_4 = (__pyx_v_statuses != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "mpi4py/MPI/reqimpl.pxi":23
 *      rp[0] = array_r
 *      if statuses is not None:
 *          ob_s = allocate(n, sizeof(MPI_Status), &array_s)             # <<<<<<<<<<<<<<
 *          for i from 0 <= i < n:
 *              array_s[i] = empty_status
 */
    __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_n, (sizeof(MPI_Status)), (&__pyx_v_array_s))); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_ob_s, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":24
 *      if statuses is not None:
 *          ob_s = allocate(n, sizeof(MPI_Status), &array_s)
 *          for i from 0 <= i < n:             # <<<<<<<<<<<<<<
 *              array_s[i] = empty_status
 *          sp[0] = array_s
 */
    __pyx_t_1 = __pyx_v_n;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

      /* "mpi4py/MPI/reqimpl.pxi":25
 *          ob_s = allocate(n, sizeof(MPI_Status), &array_s)
 *          for i from 0 <= i < n:
 *              array_s[i] = empty_status             # <<<<<<<<<<<<<<
 *          sp[0] = array_s
 *      return (ob_r, ob_s)
 */
      (__pyx_v_array_s[__pyx_v_i]) = __pyx_v_6mpi4py_3MPI_empty_status;
    }

    /* "mpi4py/MPI/reqimpl.pxi":26
 *          for i from 0 <= i < n:
 *              array_s[i] = empty_status
 *          sp[0] = array_s             # <<<<<<<<<<<<<<
 *      return (ob_r, ob_s)
 * 
 */
    (__pyx_v_sp[0]) = __pyx_v_array_s;

    /* "mpi4py/MPI/reqimpl.pxi":22
 *          array_r[i] = (<Request?>requests[i]).ob_mpi
 *      rp[0] = array_r
 *      if statuses is not None:             # <<<<<<<<<<<<<<
 *          ob_s = allocate(n, sizeof(MPI_Status), &array_s)
 *          for i from 0 <= i < n:
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":27
 *              array_s[i] = empty_status
 *          sp[0] = array_s
 *      return (ob_r, ob_s)             # <<<<<<<<<<<<<<
 * 
 * cdef int release_rs(object requests,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_ob_r);
  __Pyx_GIVEREF(__pyx_v_ob_r);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_ob_r);
  __Pyx_INCREF(__pyx_v_ob_s);
  __Pyx_GIVEREF(__pyx_v_ob_s);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_ob_s);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":8
 * empty_status.MPI_ERROR  = MPI_SUCCESS
 * 
 * cdef object acquire_rs(object requests,             # <<<<<<<<<<<<<<
 *                        object statuses,
 *                        int         *count,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.acquire_rs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob_r);
  __Pyx_XDECREF(__pyx_v_ob_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":29
 *      return (ob_r, ob_s)
 * 
 * cdef int release_rs(object requests,             # <<<<<<<<<<<<<<
 *                     object statuses,
 *                     int         count,
 */

static int __pyx_f_6mpi4py_3MPI_release_rs(PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses, int __pyx_v_count, MPI_Request *__pyx_v_rp, MPI_Status *__pyx_v_sp) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_nr;
  Py_ssize_t __pyx_v_ns;
  struct PyMPIRequestObject *__pyx_v_req = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("release_rs", 0);
  __Pyx_INCREF(__pyx_v_statuses);

  /* "mpi4py/MPI/reqimpl.pxi":34
 *                     MPI_Request rp[],
 *                     MPI_Status  sp[]) except -1:
 *     cdef Py_ssize_t i = 0, nr = count, ns = 0             # <<<<<<<<<<<<<<
 *     cdef Request req = None
 *     for i from 0 <= i < nr:
 */
  __pyx_v_i = 0;
  __pyx_v_nr = __pyx_v_count;
  __pyx_v_ns = 0;

  /* "mpi4py/MPI/reqimpl.pxi":35
 *                     MPI_Status  sp[]) except -1:
 *     cdef Py_ssize_t i = 0, nr = count, ns = 0
 *     cdef Request req = None             # <<<<<<<<<<<<<<
 *     for i from 0 <= i < nr:
 *         req = <Request>requests[i]
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_req = ((struct PyMPIRequestObject *)Py_None);

  /* "mpi4py/MPI/reqimpl.pxi":36
 *     cdef Py_ssize_t i = 0, nr = count, ns = 0
 *     cdef Request req = None
 *     for i from 0 <= i < nr:             # <<<<<<<<<<<<<<
 *         req = <Request>requests[i]
 *         req.ob_mpi = rp[i]
 */
  __pyx_t_1 = __pyx_v_nr;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

    /* "mpi4py/MPI/reqimpl.pxi":37
 *     cdef Request req = None
 *     for i from 0 <= i < nr:
 *         req = <Request>requests[i]             # <<<<<<<<<<<<<<
 *         req.ob_mpi = rp[i]
 *         if rp[i] == MPI_REQUEST_NULL:
 */
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_requests, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 37, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_req, ((struct PyMPIRequestObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":38
 *     for i from 0 <= i < nr:
 *         req = <Request>requests[i]
 *         req.ob_mpi = rp[i]             # <<<<<<<<<<<<<<
 *         if rp[i] == MPI_REQUEST_NULL:
 *             req.ob_buf = None
 */
    __pyx_v_req->ob_mpi = (__pyx_v_rp[__pyx_v_i]);

    /* "mpi4py/MPI/reqimpl.pxi":39
 *         req = <Request>requests[i]
 *         req.ob_mpi = rp[i]
 *         if rp[i] == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             req.ob_buf = None
 *     if statuses is not None:
 */
    __pyx_t_4 = (((__pyx_v_rp[__pyx_v_i]) == MPI_REQUEST_NULL) != 0);
    if (__pyx_t_4) {

      /* "mpi4py/MPI/reqimpl.pxi":40
 *         req.ob_mpi = rp[i]
 *         if rp[i] == MPI_REQUEST_NULL:
 *             req.ob_buf = None             # <<<<<<<<<<<<<<
 *     if statuses is not None:
 *         ns = len(statuses)
 */
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      __Pyx_GOTREF(__pyx_v_req->ob_buf);
      __Pyx_DECREF(__pyx_v_req->ob_buf);
      __pyx_v_req->ob_buf = Py_None;

      /* "mpi4py/MPI/reqimpl.pxi":39
 *         req = <Request>requests[i]
 *         req.ob_mpi = rp[i]
 *         if rp[i] == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             req.ob_buf = None
 *     if statuses is not None:
 */
    }
  }

  /* "mpi4py/MPI/reqimpl.pxi":41
 *         if rp[i] == MPI_REQUEST_NULL:
 *             req.ob_buf = None
 *     if statuses is not None:             # <<<<<<<<<<<<<<
 *         ns = len(statuses)
 *         if nr > ns :
 */
  __pyx_t_4 = (__pyx_v_statuses != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "mpi4py/MPI/reqimpl.pxi":42
 *             req.ob_buf = None
 *     if statuses is not None:
 *         ns = len(statuses)             # <<<<<<<<<<<<<<
 *         if nr > ns :
 *             if isinstance(statuses, list):
 */
    __pyx_t_1 = PyObject_Length(__pyx_v_statuses); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(13, 42, __pyx_L1_error)
    __pyx_v_ns = __pyx_t_1;

    /* "mpi4py/MPI/reqimpl.pxi":43
 *     if statuses is not None:
 *         ns = len(statuses)
 *         if nr > ns :             # <<<<<<<<<<<<<<
 *             if isinstance(statuses, list):
 *                 statuses += [Status.__new__(Status)
 */
    __pyx_t_5 = ((__pyx_v_nr > __pyx_v_ns) != 0);
    if (__pyx_t_5) {

      /* "mpi4py/MPI/reqimpl.pxi":44
 *         ns = len(statuses)
 *         if nr > ns :
 *             if isinstance(statuses, list):             # <<<<<<<<<<<<<<
 *                 statuses += [Status.__new__(Status)
 *                              for i from ns <= i < nr]
 */
      __pyx_t_5 = PyList_Check(__pyx_v_statuses); 
      __pyx_t_4 = (__pyx_t_5 != 0);
      if (__pyx_t_4) {

        /* "mpi4py/MPI/reqimpl.pxi":45
 *         if nr > ns :
 *             if isinstance(statuses, list):
 *                 statuses += [Status.__new__(Status)             # <<<<<<<<<<<<<<
 *                              for i from ns <= i < nr]
 *                 ns = nr
 */
        __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 45, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);

        /* "mpi4py/MPI/reqimpl.pxi":46
 *             if isinstance(statuses, list):
 *                 statuses += [Status.__new__(Status)
 *                              for i from ns <= i < nr]             # <<<<<<<<<<<<<<
 *                 ns = nr
 *         for i from 0 <= i < ns:
 */
        __pyx_t_1 = __pyx_v_nr;
        for (__pyx_v_i = __pyx_v_ns; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

          /* "mpi4py/MPI/reqimpl.pxi":45
 *         if nr > ns :
 *             if isinstance(statuses, list):
 *                 statuses += [Status.__new__(Status)             # <<<<<<<<<<<<<<
 *                              for i from ns <= i < nr]
 *                 ns = nr
 */
          __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Status(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Status), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 45, __pyx_L1_error)
          __Pyx_GOTREF(((PyObject *)__pyx_t_2));
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(13, 45, __pyx_L1_error)
          __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
        }
        __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_statuses, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 45, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF_SET(__pyx_v_statuses, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "mpi4py/MPI/reqimpl.pxi":47
 *                 statuses += [Status.__new__(Status)
 *                              for i from ns <= i < nr]
 *                 ns = nr             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < ns:
 *             (<Status?>statuses[i]).ob_mpi = sp[i]
 */
        __pyx_v_ns = __pyx_v_nr;

        /* "mpi4py/MPI/reqimpl.pxi":44
 *         ns = len(statuses)
 *         if nr > ns :
 *             if isinstance(statuses, list):             # <<<<<<<<<<<<<<
 *                 statuses += [Status.__new__(Status)
 *                              for i from ns <= i < nr]
 */
      }

      /* "mpi4py/MPI/reqimpl.pxi":43
 *     if statuses is not None:
 *         ns = len(statuses)
 *         if nr > ns :             # <<<<<<<<<<<<<<
 *             if isinstance(statuses, list):
 *                 statuses += [Status.__new__(Status)
 */
    }

    /* "mpi4py/MPI/reqimpl.pxi":48
 *                              for i from ns <= i < nr]
 *                 ns = nr
 *         for i from 0 <= i < ns:             # <<<<<<<<<<<<<<
 *             (<Status?>statuses[i]).ob_mpi = sp[i]
 *     return 0
 */
    __pyx_t_1 = __pyx_v_ns;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

      /* "mpi4py/MPI/reqimpl.pxi":49
 *                 ns = nr
 *         for i from 0 <= i < ns:
 *             (<Status?>statuses[i]).ob_mpi = sp[i]             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_statuses, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 49, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Status)))) __PYX_ERR(13, 49, __pyx_L1_error)
      ((struct PyMPIStatusObject *)__pyx_t_2)->ob_mpi = (__pyx_v_sp[__pyx_v_i]);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }

    /* "mpi4py/MPI/reqimpl.pxi":41
 *         if rp[i] == MPI_REQUEST_NULL:
 *             req.ob_buf = None
 *     if statuses is not None:             # <<<<<<<<<<<<<<
 *         ns = len(statuses)
 *         if nr > ns :
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":50
 *         for i from 0 <= i < ns:
 *             (<Status?>statuses[i]).ob_mpi = sp[i]
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":29
 *      return (ob_r, ob_s)
 * 
 * cdef int release_rs(object requests,             # <<<<<<<<<<<<<<
 *                     object statuses,
 *                     int         count,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.release_rs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_req);
  __Pyx_XDECREF(__pyx_v_statuses);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":64
 *     cdef dict  kargs
 * 
 *     def __cinit__(self, query_fn, free_fn, cancel_fn, args, kargs):             # <<<<<<<<<<<<<<
 *         self.query_fn  = query_fn
 *         self.free_fn   = free_fn
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_7_p_greq_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_7_p_greq_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_query_fn = 0;
  PyObject *__pyx_v_free_fn = 0;
  PyObject *__pyx_v_cancel_fn = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kargs = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_query_fn,&__pyx_n_s_free_fn,&__pyx_n_s_cancel_fn,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_query_fn)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_free_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 1); __PYX_ERR(13, 64, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cancel_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 2); __PYX_ERR(13, 64, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 3); __PYX_ERR(13, 64, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 4); __PYX_ERR(13, 64, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(13, 64, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_query_fn = values[0];
    __pyx_v_free_fn = values[1];
    __pyx_v_cancel_fn = values[2];
    __pyx_v_args = values[3];
    __pyx_v_kargs = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 64, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_greq.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7_p_greq___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_greq *)__pyx_v_self), __pyx_v_query_fn, __pyx_v_free_fn, __pyx_v_cancel_fn, __pyx_v_args, __pyx_v_kargs);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_7_p_greq___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self, PyObject *__pyx_v_query_fn, PyObject *__pyx_v_free_fn, PyObject *__pyx_v_cancel_fn, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/reqimpl.pxi":65
 * 
 *     def __cinit__(self, query_fn, free_fn, cancel_fn, args, kargs):
 *         self.query_fn  = query_fn             # <<<<<<<<<<<<<<
 *         self.free_fn   = free_fn
 *         self.cancel_fn = cancel_fn
 */
  __Pyx_INCREF(__pyx_v_query_fn);
  __Pyx_GIVEREF(__pyx_v_query_fn);
  __Pyx_GOTREF(__pyx_v_self->query_fn);
  __Pyx_DECREF(__pyx_v_self->query_fn);
  __pyx_v_self->query_fn = __pyx_v_query_fn;

  /* "mpi4py/MPI/reqimpl.pxi":66
 *     def __cinit__(self, query_fn, free_fn, cancel_fn, args, kargs):
 *         self.query_fn  = query_fn
 *         self.free_fn   = free_fn             # <<<<<<<<<<<<<<
 *         self.cancel_fn = cancel_fn
 *         self.args  = tuple(args) if args  is not None else ()
 */
  __Pyx_INCREF(__pyx_v_free_fn);
  __Pyx_GIVEREF(__pyx_v_free_fn);
  __Pyx_GOTREF(__pyx_v_self->free_fn);
  __Pyx_DECREF(__pyx_v_self->free_fn);
  __pyx_v_self->free_fn = __pyx_v_free_fn;

  /* "mpi4py/MPI/reqimpl.pxi":67
 *         self.query_fn  = query_fn
 *         self.free_fn   = free_fn
 *         self.cancel_fn = cancel_fn             # <<<<<<<<<<<<<<
 *         self.args  = tuple(args) if args  is not None else ()
 *         self.kargs = dict(kargs) if kargs is not None else {}
 */
  __Pyx_INCREF(__pyx_v_cancel_fn);
  __Pyx_GIVEREF(__pyx_v_cancel_fn);
  __Pyx_GOTREF(__pyx_v_self->cancel_fn);
  __Pyx_DECREF(__pyx_v_self->cancel_fn);
  __pyx_v_self->cancel_fn = __pyx_v_cancel_fn;

  /* "mpi4py/MPI/reqimpl.pxi":68
 *         self.free_fn   = free_fn
 *         self.cancel_fn = cancel_fn
 *         self.args  = tuple(args) if args  is not None else ()             # <<<<<<<<<<<<<<
 *         self.kargs = dict(kargs) if kargs is not None else {}
 * 
 */
  __pyx_t_2 = (__pyx_v_args != Py_None);
  if ((__pyx_t_2 != 0)) {
    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_empty_tuple);
    __pyx_t_1 = __pyx_empty_tuple;
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->args);
  __Pyx_DECREF(__pyx_v_self->args);
  __pyx_v_self->args = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":69
 *         self.cancel_fn = cancel_fn
 *         self.args  = tuple(args) if args  is not None else ()
 *         self.kargs = dict(kargs) if kargs is not None else {}             # <<<<<<<<<<<<<<
 * 
 *     cdef int query(self, MPI_Status *status) except -1:
 */
  __pyx_t_2 = (__pyx_v_kargs != Py_None);
  if ((__pyx_t_2 != 0)) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyDict_Type)), __pyx_v_kargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->kargs);
  __Pyx_DECREF(__pyx_v_self->kargs);
  __pyx_v_self->kargs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":64
 *     cdef dict  kargs
 * 
 *     def __cinit__(self, query_fn, free_fn, cancel_fn, args, kargs):             # <<<<<<<<<<<<<<
 *         self.query_fn  = query_fn
 *         self.free_fn   = free_fn
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._p_greq.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":71
 *         self.kargs = dict(kargs) if kargs is not None else {}
 * 
 *     cdef int query(self, MPI_Status *status) except -1:             # <<<<<<<<<<<<<<
 *         status.MPI_SOURCE = MPI_ANY_SOURCE
 *         status.MPI_TAG = MPI_ANY_TAG
 */

static int __pyx_f_6mpi4py_3MPI_7_p_greq_query(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self, MPI_Status *__pyx_v_status) {
  struct PyMPIStatusObject *__pyx_v_sts = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  MPI_Status __pyx_t_5;
  __Pyx_RefNannySetupContext("query", 0);

  /* "mpi4py/MPI/reqimpl.pxi":72
 * 
 *     cdef int query(self, MPI_Status *status) except -1:
 *         status.MPI_SOURCE = MPI_ANY_SOURCE             # <<<<<<<<<<<<<<
 *         status.MPI_TAG = MPI_ANY_TAG
 *         <void>MPI_Status_set_elements(status, MPI_BYTE, 0)
 */
  __pyx_v_status->MPI_SOURCE = MPI_ANY_SOURCE;

  /* "mpi4py/MPI/reqimpl.pxi":73
 *     cdef int query(self, MPI_Status *status) except -1:
 *         status.MPI_SOURCE = MPI_ANY_SOURCE
 *         status.MPI_TAG = MPI_ANY_TAG             # <<<<<<<<<<<<<<
 *         <void>MPI_Status_set_elements(status, MPI_BYTE, 0)
 *         <void>MPI_Status_set_cancelled(status, 0)
 */
  __pyx_v_status->MPI_TAG = MPI_ANY_TAG;

  /* "mpi4py/MPI/reqimpl.pxi":74
 *         status.MPI_SOURCE = MPI_ANY_SOURCE
 *         status.MPI_TAG = MPI_ANY_TAG
 *         <void>MPI_Status_set_elements(status, MPI_BYTE, 0)             # <<<<<<<<<<<<<<
 *         <void>MPI_Status_set_cancelled(status, 0)
 *         cdef Status sts = <Status>Status.__new__(Status)
 */
  ((void)MPI_Status_set_elements(__pyx_v_status, MPI_BYTE, 0));

  /* "mpi4py/MPI/reqimpl.pxi":75
 *         status.MPI_TAG = MPI_ANY_TAG
 *         <void>MPI_Status_set_elements(status, MPI_BYTE, 0)
 *         <void>MPI_Status_set_cancelled(status, 0)             # <<<<<<<<<<<<<<
 *         cdef Status sts = <Status>Status.__new__(Status)
 *         if self.query_fn is not None:
 */
  ((void)MPI_Status_set_cancelled(__pyx_v_status, 0));

  /* "mpi4py/MPI/reqimpl.pxi":76
 *         <void>MPI_Status_set_elements(status, MPI_BYTE, 0)
 *         <void>MPI_Status_set_cancelled(status, 0)
 *         cdef Status sts = <Status>Status.__new__(Status)             # <<<<<<<<<<<<<<
 *         if self.query_fn is not None:
 *             sts.ob_mpi = status[0]
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Status(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Status), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 76, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_sts = ((struct PyMPIStatusObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":77
 *         <void>MPI_Status_set_cancelled(status, 0)
 *         cdef Status sts = <Status>Status.__new__(Status)
 *         if self.query_fn is not None:             # <<<<<<<<<<<<<<
 *             sts.ob_mpi = status[0]
 *             self.query_fn(sts, *self.args, **self.kargs)
 */
  __pyx_t_3 = (__pyx_v_self->query_fn != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/reqimpl.pxi":78
 *         cdef Status sts = <Status>Status.__new__(Status)
 *         if self.query_fn is not None:
 *             sts.ob_mpi = status[0]             # <<<<<<<<<<<<<<
 *             self.query_fn(sts, *self.args, **self.kargs)
 *             status[0] = sts.ob_mpi
 */
    __pyx_v_sts->ob_mpi = (__pyx_v_status[0]);

    /* "mpi4py/MPI/reqimpl.pxi":79
 *         if self.query_fn is not None:
 *             sts.ob_mpi = status[0]
 *             self.query_fn(sts, *self.args, **self.kargs)             # <<<<<<<<<<<<<<
 *             status[0] = sts.ob_mpi
 *             if self.cancel_fn is None:
 */
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(((PyObject *)__pyx_v_sts));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_sts));
    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_sts));
    if (unlikely(__pyx_v_self->args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(13, 79, __pyx_L1_error)
    }
    __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_v_self->args); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__pyx_v_self->kargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(13, 79, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->query_fn, __pyx_t_1, __pyx_v_self->kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":80
 *             sts.ob_mpi = status[0]
 *             self.query_fn(sts, *self.args, **self.kargs)
 *             status[0] = sts.ob_mpi             # <<<<<<<<<<<<<<
 *             if self.cancel_fn is None:
 *                 <void>MPI_Status_set_cancelled(status, 0)
 */
    __pyx_t_5 = __pyx_v_sts->ob_mpi;
    (__pyx_v_status[0]) = __pyx_t_5;

    /* "mpi4py/MPI/reqimpl.pxi":81
 *             self.query_fn(sts, *self.args, **self.kargs)
 *             status[0] = sts.ob_mpi
 *             if self.cancel_fn is None:             # <<<<<<<<<<<<<<
 *                 <void>MPI_Status_set_cancelled(status, 0)
 *         return MPI_SUCCESS
 */
    __pyx_t_4 = (__pyx_v_self->cancel_fn == Py_None);
    __pyx_t_3 = (__pyx_t_4 != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/reqimpl.pxi":82
 *             status[0] = sts.ob_mpi
 *             if self.cancel_fn is None:
 *                 <void>MPI_Status_set_cancelled(status, 0)             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 * 
 */
      ((void)MPI_Status_set_cancelled(__pyx_v_status, 0));

      /* "mpi4py/MPI/reqimpl.pxi":81
 *             self.query_fn(sts, *self.args, **self.kargs)
 *             status[0] = sts.ob_mpi
 *             if self.cancel_fn is None:             # <<<<<<<<<<<<<<
 *                 <void>MPI_Status_set_cancelled(status, 0)
 *         return MPI_SUCCESS
 */
    }

    /* "mpi4py/MPI/reqimpl.pxi":77
 *         <void>MPI_Status_set_cancelled(status, 0)
 *         cdef Status sts = <Status>Status.__new__(Status)
 *         if self.query_fn is not None:             # <<<<<<<<<<<<<<
 *             sts.ob_mpi = status[0]
 *             self.query_fn(sts, *self.args, **self.kargs)
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":83
 *             if self.cancel_fn is None:
 *                 <void>MPI_Status_set_cancelled(status, 0)
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 *     cdef int free(self) except -1:
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":71
 *         self.kargs = dict(kargs) if kargs is not None else {}
 * 
 *     cdef int query(self, MPI_Status *status) except -1:             # <<<<<<<<<<<<<<
 *         status.MPI_SOURCE = MPI_ANY_SOURCE
 *         status.MPI_TAG = MPI_ANY_TAG
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI._p_greq.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_sts);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":85
 *         return MPI_SUCCESS
 * 
 *     cdef int free(self) except -1:             # <<<<<<<<<<<<<<
 *         if self.free_fn is not None:
 *             self.free_fn(*self.args, **self.kargs)
 */

static int __pyx_f_6mpi4py_3MPI_7_p_greq_free(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("free", 0);

  /* "mpi4py/MPI/reqimpl.pxi":86
 * 
 *     cdef int free(self) except -1:
 *         if self.free_fn is not None:             # <<<<<<<<<<<<<<
 *             self.free_fn(*self.args, **self.kargs)
 *         return MPI_SUCCESS
 */
  __pyx_t_1 = (__pyx_v_self->free_fn != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/reqimpl.pxi":87
 *     cdef int free(self) except -1:
 *         if self.free_fn is not None:
 *             self.free_fn(*self.args, **self.kargs)             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 * 
 */
    if (unlikely(__pyx_v_self->args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(13, 87, __pyx_L1_error)
    }
    if (unlikely(__pyx_v_self->kargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(13, 87, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_self->free_fn, __pyx_v_self->args, __pyx_v_self->kargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 87, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":86
 * 
 *     cdef int free(self) except -1:
 *         if self.free_fn is not None:             # <<<<<<<<<<<<<<
 *             self.free_fn(*self.args, **self.kargs)
 *         return MPI_SUCCESS
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":88
 *         if self.free_fn is not None:
 *             self.free_fn(*self.args, **self.kargs)
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 *     cdef int cancel(self, bint completed) except -1:
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":85
 *         return MPI_SUCCESS
 * 
 *     cdef int free(self) except -1:             # <<<<<<<<<<<<<<
 *         if self.free_fn is not None:
 *             self.free_fn(*self.args, **self.kargs)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._p_greq.free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":90
 *         return MPI_SUCCESS
 * 
 *     cdef int cancel(self, bint completed) except -1:             # <<<<<<<<<<<<<<
 *         if self.cancel_fn is not None:
 *             self.cancel_fn(completed, *self.args, **self.kargs)
 */

static int __pyx_f_6mpi4py_3MPI_7_p_greq_cancel(struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_self, int __pyx_v_completed) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("cancel", 0);

  /* "mpi4py/MPI/reqimpl.pxi":91
 * 
 *     cdef int cancel(self, bint completed) except -1:
 *         if self.cancel_fn is not None:             # <<<<<<<<<<<<<<
 *             self.cancel_fn(completed, *self.args, **self.kargs)
 *         return MPI_SUCCESS
 */
  __pyx_t_1 = (__pyx_v_self->cancel_fn != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/reqimpl.pxi":92
 *     cdef int cancel(self, bint completed) except -1:
 *         if self.cancel_fn is not None:
 *             self.cancel_fn(completed, *self.args, **self.kargs)             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 * 
 */
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_completed); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    if (unlikely(__pyx_v_self->args == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(13, 92, __pyx_L1_error)
    }
    __pyx_t_3 = PyNumber_Add(__pyx_t_4, __pyx_v_self->args); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__pyx_v_self->kargs == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
      __PYX_ERR(13, 92, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_self->cancel_fn, __pyx_t_3, __pyx_v_self->kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":91
 * 
 *     cdef int cancel(self, bint completed) except -1:
 *         if self.cancel_fn is not None:             # <<<<<<<<<<<<<<
 *             self.cancel_fn(completed, *self.args, **self.kargs)
 *         return MPI_SUCCESS
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":93
 *         if self.cancel_fn is not None:
 *             self.cancel_fn(completed, *self.args, **self.kargs)
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 * # ---
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":90
 *         return MPI_SUCCESS
 * 
 *     cdef int cancel(self, bint completed) except -1:             # <<<<<<<<<<<<<<
 *         if self.cancel_fn is not None:
 *             self.cancel_fn(completed, *self.args, **self.kargs)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._p_greq.cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":97
 * # ---
 * 
 * cdef int greq_query(void *extra_state, MPI_Status *status) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 */

static int __pyx_f_6mpi4py_3MPI_greq_query(void *__pyx_v_extra_state, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_state = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("greq_query", 0);

  /* "mpi4py/MPI/reqimpl.pxi":99
 * cdef int greq_query(void *extra_state, MPI_Status *status) \
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_greq *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":100
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/reqimpl.pxi":102
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.query(status)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/reqimpl.pxi":103
 *     cdef object exc
 *     try:
 *         state.query(status)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_5 = __pyx_f_6mpi4py_3MPI_7_p_greq_query(__pyx_v_state, __pyx_v_status); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(13, 103, __pyx_L3_error)

      /* "mpi4py/MPI/reqimpl.pxi":102
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.query(status)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":104
 *     try:
 *         state.query(status)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.greq_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(13, 104, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/reqimpl.pxi":105
 *         state.query(status)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/reqimpl.pxi":106
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(13, 106, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(13, 106, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 106, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_5;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/reqimpl.pxi":107
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.greq_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(13, 107, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);

      /* "mpi4py/MPI/reqimpl.pxi":108
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/reqimpl.pxi":109
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/reqimpl.pxi":102
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.query(status)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/reqimpl.pxi":110
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef int greq_free(void *extra_state) \
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":97
 * # ---
 * 
 * cdef int greq_query(void *extra_state, MPI_Status *status) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.greq_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":112
 *     return ierr
 * 
 * cdef int greq_free(void *extra_state) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 */

static int __pyx_f_6mpi4py_3MPI_greq_free(void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_state = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("greq_free", 0);

  /* "mpi4py/MPI/reqimpl.pxi":114
 * cdef int greq_free(void *extra_state) \
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_greq *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":115
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/reqimpl.pxi":117
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.free()
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/reqimpl.pxi":118
 *     cdef object exc
 *     try:
 *         state.free()             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_5 = __pyx_f_6mpi4py_3MPI_7_p_greq_free(__pyx_v_state); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(13, 118, __pyx_L3_error)

      /* "mpi4py/MPI/reqimpl.pxi":117
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.free()
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":119
 *     try:
 *         state.free()
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.greq_free", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(13, 119, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/reqimpl.pxi":120
 *         state.free()
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/reqimpl.pxi":121
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(13, 121, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(13, 121, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 121, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_5;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/reqimpl.pxi":122
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.greq_free", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(13, 122, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);

      /* "mpi4py/MPI/reqimpl.pxi":123
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     Py_DECREF(<object>extra_state)
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/reqimpl.pxi":124
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     Py_DECREF(<object>extra_state)
 *     return ierr
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/reqimpl.pxi":117
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.free()
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/reqimpl.pxi":125
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     Py_DECREF(<object>extra_state)             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
  Py_DECREF(((PyObject *)__pyx_v_extra_state));

  /* "mpi4py/MPI/reqimpl.pxi":126
 *         ierr = MPI_ERR_OTHER
 *     Py_DECREF(<object>extra_state)
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef int greq_cancel(void *extra_state, int completed) \
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":112
 *     return ierr
 * 
 * cdef int greq_free(void *extra_state) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.greq_free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":128
 *     return ierr
 * 
 * cdef int greq_cancel(void *extra_state, int completed) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 */

static int __pyx_f_6mpi4py_3MPI_greq_cancel(void *__pyx_v_extra_state, int __pyx_v_completed) {
  struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_state = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("greq_cancel", 0);

  /* "mpi4py/MPI/reqimpl.pxi":130
 * cdef int greq_cancel(void *extra_state, int completed) \
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_greq *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/reqimpl.pxi":131
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/reqimpl.pxi":133
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.cancel(completed)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/reqimpl.pxi":134
 *     cdef object exc
 *     try:
 *         state.cancel(completed)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_5 = __pyx_f_6mpi4py_3MPI_7_p_greq_cancel(__pyx_v_state, __pyx_v_completed); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(13, 134, __pyx_L3_error)

      /* "mpi4py/MPI/reqimpl.pxi":133
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.cancel(completed)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/reqimpl.pxi":135
 *     try:
 *         state.cancel(completed)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.greq_cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(13, 135, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/reqimpl.pxi":136
 *         state.cancel(completed)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/reqimpl.pxi":137
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(13, 137, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(13, 137, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(13, 137, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_5;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/reqimpl.pxi":138
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.greq_cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(13, 138, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);

      /* "mpi4py/MPI/reqimpl.pxi":139
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/reqimpl.pxi":140
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/reqimpl.pxi":133
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.cancel(completed)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/reqimpl.pxi":141
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * # ---
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":128
 *     return ierr
 * 
 * cdef int greq_cancel(void *extra_state, int completed) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_greq state = <_p_greq>extra_state
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.greq_cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":146
 * 
 * @cython.callspec("MPIAPI")
 * cdef int greq_query_fn(void *extra_state, MPI_Status *status) nogil:             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_greq_query_fn(void *__pyx_v_extra_state, MPI_Status *__pyx_v_status) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/reqimpl.pxi":147
 * @cython.callspec("MPIAPI")
 * cdef int greq_query_fn(void *extra_state, MPI_Status *status) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if status == NULL:
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":148
 * cdef int greq_query_fn(void *extra_state, MPI_Status *status) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if status == NULL:
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":147
 * @cython.callspec("MPIAPI")
 * cdef int greq_query_fn(void *extra_state, MPI_Status *status) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if status == NULL:
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":149
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if status == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_status == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":150
 *         return MPI_ERR_INTERN
 *     if status == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":149
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if status == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":151
 *     if status == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return greq_query(extra_state, status)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":152
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     return greq_query(extra_state, status)
 * 
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":151
 *     if status == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return greq_query(extra_state, status)
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":153
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 *     return greq_query(extra_state, status)             # <<<<<<<<<<<<<<
 * 
 * @cython.callspec("MPIAPI")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_greq_query(__pyx_v_extra_state, __pyx_v_status); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(13, 153, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":146
 * 
 * @cython.callspec("MPIAPI")
 * cdef int greq_query_fn(void *extra_state, MPI_Status *status) nogil:             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.greq_query_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":156
 * 
 * @cython.callspec("MPIAPI")
 * cdef int greq_free_fn(void *extra_state) nogil:             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_greq_free_fn(void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/reqimpl.pxi":157
 * @cython.callspec("MPIAPI")
 * cdef int greq_free_fn(void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":158
 * cdef int greq_free_fn(void *extra_state) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":157
 * @cython.callspec("MPIAPI")
 * cdef int greq_free_fn(void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":159
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return greq_free(extra_state)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":160
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     return greq_free(extra_state)
 * 
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":159
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return greq_free(extra_state)
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":161
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 *     return greq_free(extra_state)             # <<<<<<<<<<<<<<
 * 
 * @cython.callspec("MPIAPI")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_greq_free(__pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(13, 161, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":156
 * 
 * @cython.callspec("MPIAPI")
 * cdef int greq_free_fn(void *extra_state) nogil:             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.greq_free_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/reqimpl.pxi":164
 * 
 * @cython.callspec("MPIAPI")
 * cdef int greq_cancel_fn(void *extra_state, int completed) nogil:             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_greq_cancel_fn(void *__pyx_v_extra_state, int __pyx_v_completed) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/reqimpl.pxi":165
 * @cython.callspec("MPIAPI")
 * cdef int greq_cancel_fn(void *extra_state, int completed) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":166
 * cdef int greq_cancel_fn(void *extra_state, int completed) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":165
 * @cython.callspec("MPIAPI")
 * cdef int greq_cancel_fn(void *extra_state, int completed) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":167
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return greq_cancel(extra_state, completed)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/reqimpl.pxi":168
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     return greq_cancel(extra_state, completed)
 * 
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/reqimpl.pxi":167
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return greq_cancel(extra_state, completed)
 */
  }

  /* "mpi4py/MPI/reqimpl.pxi":169
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 *     return greq_cancel(extra_state, completed)             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_greq_cancel(__pyx_v_extra_state, __pyx_v_completed); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(13, 169, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/reqimpl.pxi":164
 * 
 * @cython.callspec("MPIAPI")
 * cdef int greq_cancel_fn(void *extra_state, int completed) nogil:             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.greq_cancel_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":129
 * include "reqimpl.pxi"
 * 
 * cdef inline Request new_Request(MPI_Request ob):             # <<<<<<<<<<<<<<
 *     cdef Request request = <Request>Request.__new__(Request)
 *     request.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIRequestObject *__pyx_f_6mpi4py_3MPI_new_Request(MPI_Request __pyx_v_ob) {
  struct PyMPIRequestObject *__pyx_v_request = 0;
  struct PyMPIRequestObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Request", 0);

  /* "mpi4py/MPI/helpers.pxi":130
 * 
 * cdef inline Request new_Request(MPI_Request ob):
 *     cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *     request.ob_mpi = ob
 *     return request
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 130, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":131
 * cdef inline Request new_Request(MPI_Request ob):
 *     cdef Request request = <Request>Request.__new__(Request)
 *     request.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return request
 * 
 */
  __pyx_v_request->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":132
 *     cdef Request request = <Request>Request.__new__(Request)
 *     request.ob_mpi = ob
 *     return request             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Request(MPI_Request* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = __pyx_v_request;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":129
 * include "reqimpl.pxi"
 * 
 * cdef inline Request new_Request(MPI_Request ob):             # <<<<<<<<<<<<<<
 *     cdef Request request = <Request>Request.__new__(Request)
 *     request.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Request", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":134
 *     return request
 * 
 * cdef inline int del_Request(MPI_Request* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL             : return 0
 *     if ob[0] == MPI_REQUEST_NULL : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Request(MPI_Request *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Request", 0);

  /* "mpi4py/MPI/helpers.pxi":135
 * 
 * cdef inline int del_Request(MPI_Request* ob):
 *     if ob    == NULL             : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REQUEST_NULL : return 0
 *     #
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":136
 * cdef inline int del_Request(MPI_Request* ob):
 *     if ob    == NULL             : return 0
 *     if ob[0] == MPI_REQUEST_NULL : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":138
 *     if ob[0] == MPI_REQUEST_NULL : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Request_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":139
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Request_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Request_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":134
 *     return request
 * 
 * cdef inline int del_Request(MPI_Request* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL             : return 0
 *     if ob[0] == MPI_REQUEST_NULL : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":144
 * # Message
 * 
 * cdef inline Message new_Message(MPI_Message ob):             # <<<<<<<<<<<<<<
 *     cdef Message message = <Message>Message.__new__(Message)
 *     message.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIMessageObject *__pyx_f_6mpi4py_3MPI_new_Message(MPI_Message __pyx_v_ob) {
  struct PyMPIMessageObject *__pyx_v_message = 0;
  struct PyMPIMessageObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Message", 0);

  /* "mpi4py/MPI/helpers.pxi":145
 * 
 * cdef inline Message new_Message(MPI_Message ob):
 *     cdef Message message = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *     message.ob_mpi = ob
 *     return message
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 145, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":146
 * cdef inline Message new_Message(MPI_Message ob):
 *     cdef Message message = <Message>Message.__new__(Message)
 *     message.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return message
 * 
 */
  __pyx_v_message->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":147
 *     cdef Message message = <Message>Message.__new__(Message)
 *     message.ob_mpi = ob
 *     return message             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Message(MPI_Message* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = __pyx_v_message;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":144
 * # Message
 * 
 * cdef inline Message new_Message(MPI_Message ob):             # <<<<<<<<<<<<<<
 *     cdef Message message = <Message>Message.__new__(Message)
 *     message.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Message", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":149
 *     return message
 * 
 * cdef inline int del_Message(MPI_Message* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL                : return 0
 *     if ob[0] == MPI_MESSAGE_NULL    : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Message(MPI_Message *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Message", 0);

  /* "mpi4py/MPI/helpers.pxi":150
 * 
 * cdef inline int del_Message(MPI_Message* ob):
 *     if ob    == NULL                : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_MESSAGE_NULL    : return 0
 *     if ob[0] == MPI_MESSAGE_NO_PROC : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":151
 * cdef inline int del_Message(MPI_Message* ob):
 *     if ob    == NULL                : return 0
 *     if ob[0] == MPI_MESSAGE_NULL    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_MESSAGE_NO_PROC : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_MESSAGE_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":152
 *     if ob    == NULL                : return 0
 *     if ob[0] == MPI_MESSAGE_NULL    : return 0
 *     if ob[0] == MPI_MESSAGE_NO_PROC : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_MESSAGE_NO_PROC) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":154
 *     if ob[0] == MPI_MESSAGE_NO_PROC : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     # ob[0] = MPI_MESSAGE_NULL
 *     return 0
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":156
 *     if not mpi_active(): return 0
 *     # ob[0] = MPI_MESSAGE_NULL
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":149
 *     return message
 * 
 * cdef inline int del_Message(MPI_Message* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL                : return 0
 *     if ob[0] == MPI_MESSAGE_NULL    : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef object _op_MAX(object x, object y):             # <<<<<<<<<<<<<<
 *     """maximum"""
 *     if y > x:
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_MAX(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("_op_MAX", 0);

  /* "mpi4py/MPI/opimpl.pxi":5
 * cdef object _op_MAX(object x, object y):
 *     """maximum"""
 *     if y > x:             # <<<<<<<<<<<<<<
 *         return y
 *     else:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_y, __pyx_v_x, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 5, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(14, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/opimpl.pxi":6
 *     """maximum"""
 *     if y > x:
 *         return y             # <<<<<<<<<<<<<<
 *     else:
 *         return x
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_y);
    __pyx_r = __pyx_v_y;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":5
 * cdef object _op_MAX(object x, object y):
 *     """maximum"""
 *     if y > x:             # <<<<<<<<<<<<<<
 *         return y
 *     else:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":8
 *         return y
 *     else:
 *         return x             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_MIN(object x, object y):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef object _op_MAX(object x, object y):             # <<<<<<<<<<<<<<
 *     """maximum"""
 *     if y > x:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_MAX", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":10
 *         return x
 * 
 * cdef object _op_MIN(object x, object y):             # <<<<<<<<<<<<<<
 *     """minimum"""
 *     if y < x:
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_MIN(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("_op_MIN", 0);

  /* "mpi4py/MPI/opimpl.pxi":12
 * cdef object _op_MIN(object x, object y):
 *     """minimum"""
 *     if y < x:             # <<<<<<<<<<<<<<
 *         return y
 *     else:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_y, __pyx_v_x, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 12, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(14, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/opimpl.pxi":13
 *     """minimum"""
 *     if y < x:
 *         return y             # <<<<<<<<<<<<<<
 *     else:
 *         return x
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_y);
    __pyx_r = __pyx_v_y;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":12
 * cdef object _op_MIN(object x, object y):
 *     """minimum"""
 *     if y < x:             # <<<<<<<<<<<<<<
 *         return y
 *     else:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":15
 *         return y
 *     else:
 *         return x             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_SUM(object x, object y):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_x);
    __pyx_r = __pyx_v_x;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":10
 *         return x
 * 
 * cdef object _op_MIN(object x, object y):             # <<<<<<<<<<<<<<
 *     """minimum"""
 *     if y < x:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_MIN", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":17
 *         return x
 * 
 * cdef object _op_SUM(object x, object y):             # <<<<<<<<<<<<<<
 *     """sum"""
 *     return x + y
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_SUM(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_op_SUM", 0);

  /* "mpi4py/MPI/opimpl.pxi":19
 * cdef object _op_SUM(object x, object y):
 *     """sum"""
 *     return x + y             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_PROD(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyNumber_Add(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":17
 *         return x
 * 
 * cdef object _op_SUM(object x, object y):             # <<<<<<<<<<<<<<
 *     """sum"""
 *     return x + y
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_SUM", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":21
 *     return x + y
 * 
 * cdef object _op_PROD(object x, object y):             # <<<<<<<<<<<<<<
 *     """product"""
 *     return x * y
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_PROD(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_op_PROD", 0);

  /* "mpi4py/MPI/opimpl.pxi":23
 * cdef object _op_PROD(object x, object y):
 *     """product"""
 *     return x * y             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_BAND(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":21
 *     return x + y
 * 
 * cdef object _op_PROD(object x, object y):             # <<<<<<<<<<<<<<
 *     """product"""
 *     return x * y
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_PROD", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":25
 *     return x * y
 * 
 * cdef object _op_BAND(object x, object y):             # <<<<<<<<<<<<<<
 *     """bit-wise and"""
 *     return x & y
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_BAND(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_op_BAND", 0);

  /* "mpi4py/MPI/opimpl.pxi":27
 * cdef object _op_BAND(object x, object y):
 *     """bit-wise and"""
 *     return x & y             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_BOR(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyNumber_And(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":25
 *     return x * y
 * 
 * cdef object _op_BAND(object x, object y):             # <<<<<<<<<<<<<<
 *     """bit-wise and"""
 *     return x & y
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_BAND", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":29
 *     return x & y
 * 
 * cdef object _op_BOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """bit-wise or"""
 *     return x | y
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_BOR(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_op_BOR", 0);

  /* "mpi4py/MPI/opimpl.pxi":31
 * cdef object _op_BOR(object x, object y):
 *     """bit-wise or"""
 *     return x | y             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_BXOR(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyNumber_Or(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":29
 *     return x & y
 * 
 * cdef object _op_BOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """bit-wise or"""
 *     return x | y
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_BOR", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":33
 *     return x | y
 * 
 * cdef object _op_BXOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """bit-wise xor"""
 *     return x ^ y
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_BXOR(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_op_BXOR", 0);

  /* "mpi4py/MPI/opimpl.pxi":35
 * cdef object _op_BXOR(object x, object y):
 *     """bit-wise xor"""
 *     return x ^ y             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_LAND(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyNumber_Xor(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":33
 *     return x | y
 * 
 * cdef object _op_BXOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """bit-wise xor"""
 *     return x ^ y
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._op_BXOR", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":37
 *     return x ^ y
 * 
 * cdef object _op_LAND(object x, object y):             # <<<<<<<<<<<<<<
 *     """logical and"""
 *     return bool(x) & bool(y)
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_LAND(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("_op_LAND", 0);

  /* "mpi4py/MPI/opimpl.pxi":39
 * cdef object _op_LAND(object x, object y):
 *     """logical and"""
 *     return bool(x) & bool(y)             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_LOR(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_x); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 39, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 39, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_And(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":37
 *     return x ^ y
 * 
 * cdef object _op_LAND(object x, object y):             # <<<<<<<<<<<<<<
 *     """logical and"""
 *     return bool(x) & bool(y)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._op_LAND", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":41
 *     return bool(x) & bool(y)
 * 
 * cdef object _op_LOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """logical or"""
 *     return bool(x) | bool(y)
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_LOR(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("_op_LOR", 0);

  /* "mpi4py/MPI/opimpl.pxi":43
 * cdef object _op_LOR(object x, object y):
 *     """logical or"""
 *     return bool(x) | bool(y)             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_LXOR(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_x); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 43, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 43, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Or(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":41
 *     return bool(x) & bool(y)
 * 
 * cdef object _op_LOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """logical or"""
 *     return bool(x) | bool(y)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._op_LOR", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":45
 *     return bool(x) | bool(y)
 * 
 * cdef object _op_LXOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """logical xor"""
 *     return bool(x) ^ bool(y)
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_LXOR(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("_op_LXOR", 0);

  /* "mpi4py/MPI/opimpl.pxi":47
 * cdef object _op_LXOR(object x, object y):
 *     """logical xor"""
 *     return bool(x) ^ bool(y)             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_MAXLOC(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_x); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 47, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_y); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(14, 47, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(!__pyx_t_1))); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyNumber_Xor(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":45
 *     return bool(x) | bool(y)
 * 
 * cdef object _op_LXOR(object x, object y):             # <<<<<<<<<<<<<<
 *     """logical xor"""
 *     return bool(x) ^ bool(y)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._op_LXOR", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":49
 *     return bool(x) ^ bool(y)
 * 
 * cdef object _op_MAXLOC(object x, object y):             # <<<<<<<<<<<<<<
 *     """maximum and location"""
 *     cdef object i, j, u, v
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_MAXLOC(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_v_i = 0;
  PyObject *__pyx_v_j = 0;
  PyObject *__pyx_v_u = 0;
  PyObject *__pyx_v_v = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("_op_MAXLOC", 0);

  /* "mpi4py/MPI/opimpl.pxi":52
 *     """maximum and location"""
 *     cdef object i, j, u, v
 *     u, i = x             # <<<<<<<<<<<<<<
 *     v, j = y
 *     if u > v:
 */
  if ((likely(PyTuple_CheckExact(__pyx_v_x))) || (PyList_CheckExact(__pyx_v_x))) {
    PyObject* sequence = __pyx_v_x;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(14, 52, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(14, 52, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(14, 52, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_u = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_i = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/opimpl.pxi":53
 *     cdef object i, j, u, v
 *     u, i = x
 *     v, j = y             # <<<<<<<<<<<<<<
 *     if u > v:
 *         return u, i
 */
  if ((likely(PyTuple_CheckExact(__pyx_v_y))) || (PyList_CheckExact(__pyx_v_y))) {
    PyObject* sequence = __pyx_v_y;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(14, 53, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(14, 53, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(14, 53, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_v = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_j = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/opimpl.pxi":54
 *     u, i = x
 *     v, j = y
 *     if u > v:             # <<<<<<<<<<<<<<
 *         return u, i
 *     elif v > u:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_u, __pyx_v_v, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 54, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(14, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "mpi4py/MPI/opimpl.pxi":55
 *     v, j = y
 *     if u > v:
 *         return u, i             # <<<<<<<<<<<<<<
 *     elif v > u:
 *         return v, j
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 55, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_u);
    __Pyx_GIVEREF(__pyx_v_u);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_u);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_i);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":54
 *     u, i = x
 *     v, j = y
 *     if u > v:             # <<<<<<<<<<<<<<
 *         return u, i
 *     elif v > u:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":56
 *     if u > v:
 *         return u, i
 *     elif v > u:             # <<<<<<<<<<<<<<
 *         return v, j
 *     elif j < i:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_v, __pyx_v_u, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 56, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(14, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "mpi4py/MPI/opimpl.pxi":57
 *         return u, i
 *     elif v > u:
 *         return v, j             # <<<<<<<<<<<<<<
 *     elif j < i:
 *         return v, j
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_v);
    __Pyx_GIVEREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_v);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_j);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":56
 *     if u > v:
 *         return u, i
 *     elif v > u:             # <<<<<<<<<<<<<<
 *         return v, j
 *     elif j < i:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":58
 *     elif v > u:
 *         return v, j
 *     elif j < i:             # <<<<<<<<<<<<<<
 *         return v, j
 *     else:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_j, __pyx_v_i, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 58, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(14, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "mpi4py/MPI/opimpl.pxi":59
 *         return v, j
 *     elif j < i:
 *         return v, j             # <<<<<<<<<<<<<<
 *     else:
 *         return u, i
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 59, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_v);
    __Pyx_GIVEREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_v);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_j);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":58
 *     elif v > u:
 *         return v, j
 *     elif j < i:             # <<<<<<<<<<<<<<
 *         return v, j
 *     else:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":61
 *         return v, j
 *     else:
 *         return u, i             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_MINLOC(object x, object y):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 61, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_u);
    __Pyx_GIVEREF(__pyx_v_u);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_u);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_i);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":49
 *     return bool(x) ^ bool(y)
 * 
 * cdef object _op_MAXLOC(object x, object y):             # <<<<<<<<<<<<<<
 *     """maximum and location"""
 *     cdef object i, j, u, v
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._op_MAXLOC", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_u);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":63
 *         return u, i
 * 
 * cdef object _op_MINLOC(object x, object y):             # <<<<<<<<<<<<<<
 *     """minimum and location"""
 *     cdef object i, j, u, v
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_MINLOC(PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_v_i = 0;
  PyObject *__pyx_v_j = 0;
  PyObject *__pyx_v_u = 0;
  PyObject *__pyx_v_v = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("_op_MINLOC", 0);

  /* "mpi4py/MPI/opimpl.pxi":66
 *     """minimum and location"""
 *     cdef object i, j, u, v
 *     u, i = x             # <<<<<<<<<<<<<<
 *     v, j = y
 *     if u < v:
 */
  if ((likely(PyTuple_CheckExact(__pyx_v_x))) || (PyList_CheckExact(__pyx_v_x))) {
    PyObject* sequence = __pyx_v_x;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(14, 66, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(14, 66, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(14, 66, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_u = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_i = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/opimpl.pxi":67
 *     cdef object i, j, u, v
 *     u, i = x
 *     v, j = y             # <<<<<<<<<<<<<<
 *     if u < v:
 *         return u, i
 */
  if ((likely(PyTuple_CheckExact(__pyx_v_y))) || (PyList_CheckExact(__pyx_v_y))) {
    PyObject* sequence = __pyx_v_y;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(14, 67, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 67, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 67, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_y); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 67, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(14, 67, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(14, 67, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_v = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_j = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/opimpl.pxi":68
 *     u, i = x
 *     v, j = y
 *     if u < v:             # <<<<<<<<<<<<<<
 *         return u, i
 *     elif v < u:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_u, __pyx_v_v, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 68, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(14, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "mpi4py/MPI/opimpl.pxi":69
 *     v, j = y
 *     if u < v:
 *         return u, i             # <<<<<<<<<<<<<<
 *     elif v < u:
 *         return v, j
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_u);
    __Pyx_GIVEREF(__pyx_v_u);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_u);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_i);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":68
 *     u, i = x
 *     v, j = y
 *     if u < v:             # <<<<<<<<<<<<<<
 *         return u, i
 *     elif v < u:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":70
 *     if u < v:
 *         return u, i
 *     elif v < u:             # <<<<<<<<<<<<<<
 *         return v, j
 *     elif j < i:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_v, __pyx_v_u, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 70, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(14, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "mpi4py/MPI/opimpl.pxi":71
 *         return u, i
 *     elif v < u:
 *         return v, j             # <<<<<<<<<<<<<<
 *     elif j < i:
 *         return v, j
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_v);
    __Pyx_GIVEREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_v);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_j);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":70
 *     if u < v:
 *         return u, i
 *     elif v < u:             # <<<<<<<<<<<<<<
 *         return v, j
 *     elif j < i:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":72
 *     elif v < u:
 *         return v, j
 *     elif j < i:             # <<<<<<<<<<<<<<
 *         return v, j
 *     else:
 */
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_j, __pyx_v_i, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 72, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(14, 72, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "mpi4py/MPI/opimpl.pxi":73
 *         return v, j
 *     elif j < i:
 *         return v, j             # <<<<<<<<<<<<<<
 *     else:
 *         return u, i
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_v);
    __Pyx_GIVEREF(__pyx_v_v);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_v);
    __Pyx_INCREF(__pyx_v_j);
    __Pyx_GIVEREF(__pyx_v_j);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_j);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/opimpl.pxi":72
 *     elif v < u:
 *         return v, j
 *     elif j < i:             # <<<<<<<<<<<<<<
 *         return v, j
 *     else:
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":75
 *         return v, j
 *     else:
 *         return u, i             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_REPLACE(object x, object y):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_u);
    __Pyx_GIVEREF(__pyx_v_u);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_u);
    __Pyx_INCREF(__pyx_v_i);
    __Pyx_GIVEREF(__pyx_v_i);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_i);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":63
 *         return u, i
 * 
 * cdef object _op_MINLOC(object x, object y):             # <<<<<<<<<<<<<<
 *     """minimum and location"""
 *     cdef object i, j, u, v
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._op_MINLOC", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_j);
  __Pyx_XDECREF(__pyx_v_u);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":77
 *         return u, i
 * 
 * cdef object _op_REPLACE(object x, object y):             # <<<<<<<<<<<<<<
 *     """replace,  (x, y) -> y"""
 *     return y
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_REPLACE(CYTHON_UNUSED PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_op_REPLACE", 0);

  /* "mpi4py/MPI/opimpl.pxi":79
 * cdef object _op_REPLACE(object x, object y):
 *     """replace,  (x, y) -> y"""
 *     return y             # <<<<<<<<<<<<<<
 * 
 * cdef object _op_NO_OP(object x, object y):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_y);
  __pyx_r = __pyx_v_y;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":77
 *         return u, i
 * 
 * cdef object _op_REPLACE(object x, object y):             # <<<<<<<<<<<<<<
 *     """replace,  (x, y) -> y"""
 *     return y
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":81
 *     return y
 * 
 * cdef object _op_NO_OP(object x, object y):             # <<<<<<<<<<<<<<
 *     """no-op,  (x, y) -> x"""
 *     return x
 */

static PyObject *__pyx_f_6mpi4py_3MPI__op_NO_OP(PyObject *__pyx_v_x, CYTHON_UNUSED PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_op_NO_OP", 0);

  /* "mpi4py/MPI/opimpl.pxi":83
 * cdef object _op_NO_OP(object x, object y):
 *     """no-op,  (x, y) -> x"""
 *     return x             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_x);
  __pyx_r = __pyx_v_x;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":81
 *     return y
 * 
 * cdef object _op_NO_OP(object x, object y):             # <<<<<<<<<<<<<<
 *     """no-op,  (x, y) -> x"""
 *     return x
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":89
 * cdef list op_user_registry = [None]*(1+32)
 * 
 * cdef inline object op_user_py(int index, object x, object y, object dt):             # <<<<<<<<<<<<<<
 *     return op_user_registry[index](x, y, dt)
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_op_user_py(int __pyx_v_index, PyObject *__pyx_v_x, PyObject *__pyx_v_y, PyObject *__pyx_v_dt) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("op_user_py", 0);

  /* "mpi4py/MPI/opimpl.pxi":90
 * 
 * cdef inline object op_user_py(int index, object x, object y, object dt):
 *     return op_user_registry[index](x, y, dt)             # <<<<<<<<<<<<<<
 * 
 * cdef inline void op_user_mpi(
 */
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_6mpi4py_3MPI_op_user_registry == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(14, 90, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_6mpi4py_3MPI_op_user_registry, __pyx_v_index, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_x, __pyx_v_y, __pyx_v_dt};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 90, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_v_x, __pyx_v_y, __pyx_v_dt};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 90, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 90, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_x);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_y);
    __Pyx_INCREF(__pyx_v_dt);
    __Pyx_GIVEREF(__pyx_v_dt);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_dt);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 90, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":89
 * cdef list op_user_registry = [None]*(1+32)
 * 
 * cdef inline object op_user_py(int index, object x, object y, object dt):             # <<<<<<<<<<<<<<
 *     return op_user_registry[index](x, y, dt)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.op_user_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":92
 *     return op_user_registry[index](x, y, dt)
 * 
 * cdef inline void op_user_mpi(             # <<<<<<<<<<<<<<
 *     int index, void *a, void *b, MPI_Aint n, MPI_Datatype *t) with gil:
 *     cdef Datatype datatype
 */

static CYTHON_INLINE void __pyx_f_6mpi4py_3MPI_op_user_mpi(int __pyx_v_index, void *__pyx_v_a, void *__pyx_v_b, MPI_Aint __pyx_v_n, MPI_Datatype *__pyx_v_t) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_t_8;
  char const *__pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("op_user_mpi", 0);

  /* "mpi4py/MPI/opimpl.pxi":96
 *     cdef Datatype datatype
 *     # errors in user-defined reduction operations are unrecoverable
 *     try:             # <<<<<<<<<<<<<<
 *         datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = t[0]
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/opimpl.pxi":97
 *     # errors in user-defined reduction operations are unrecoverable
 *     try:
 *         datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         datatype.ob_mpi = t[0]
 *         try: op_user_py(index, tomemory(a, n), tomemory(b, n), datatype)
 */
      __pyx_t_4 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 97, __pyx_L3_error)
      __Pyx_GOTREF(((PyObject *)__pyx_t_4));
      __pyx_t_5 = ((PyObject *)__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
      __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_5);
      __pyx_t_5 = 0;

      /* "mpi4py/MPI/opimpl.pxi":98
 *     try:
 *         datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = t[0]             # <<<<<<<<<<<<<<
 *         try: op_user_py(index, tomemory(a, n), tomemory(b, n), datatype)
 *         finally: datatype.ob_mpi = MPI_DATATYPE_NULL
 */
      __pyx_v_datatype->ob_mpi = (__pyx_v_t[0]);

      /* "mpi4py/MPI/opimpl.pxi":99
 *         datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = t[0]
 *         try: op_user_py(index, tomemory(a, n), tomemory(b, n), datatype)             # <<<<<<<<<<<<<<
 *         finally: datatype.ob_mpi = MPI_DATATYPE_NULL
 *     except:
 */
      /*try:*/ {
        __pyx_t_5 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_a, __pyx_v_n)); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 99, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_b, __pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 99, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __pyx_f_6mpi4py_3MPI_op_user_py(__pyx_v_index, __pyx_t_5, __pyx_t_4, ((PyObject *)__pyx_v_datatype)); if (unlikely(!__pyx_t_6)) __PYX_ERR(14, 99, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }

      /* "mpi4py/MPI/opimpl.pxi":100
 *         datatype.ob_mpi = t[0]
 *         try: op_user_py(index, tomemory(a, n), tomemory(b, n), datatype)
 *         finally: datatype.ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *     except:
 *         # print the full exception traceback and abort.
 */
      /*finally:*/ {
        /*normal exit:*/{
          __pyx_v_datatype->ob_mpi = MPI_DATATYPE_NULL;
          goto __pyx_L11;
        }
        __pyx_L10_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_15);
          __pyx_t_7 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
          {
            __pyx_v_datatype->ob_mpi = MPI_DATATYPE_NULL;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_13);
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
          }
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
          __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
          __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
          goto __pyx_L3_error;
        }
        __pyx_L11:;
      }

      /* "mpi4py/MPI/opimpl.pxi":96
 *     cdef Datatype datatype
 *     # errors in user-defined reduction operations are unrecoverable
 *     try:             # <<<<<<<<<<<<<<
 *         datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = t[0]
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/opimpl.pxi":101
 *         try: op_user_py(index, tomemory(a, n), tomemory(b, n), datatype)
 *         finally: datatype.ob_mpi = MPI_DATATYPE_NULL
 *     except:             # <<<<<<<<<<<<<<
 *         # print the full exception traceback and abort.
 *         PySys_WriteStderr(b"Fatal Python error: %s\n",
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.op_user_mpi", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(14, 101, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/opimpl.pxi":103
 *     except:
 *         # print the full exception traceback and abort.
 *         PySys_WriteStderr(b"Fatal Python error: %s\n",             # <<<<<<<<<<<<<<
 *                           b"exception in user-defined reduction operation")
 *         try: print_traceback()
 */
      PySys_WriteStderr(((char *)"Fatal Python error: %s\n"), ((char *)"exception in user-defined reduction operation"));

      /* "mpi4py/MPI/opimpl.pxi":105
 *         PySys_WriteStderr(b"Fatal Python error: %s\n",
 *                           b"exception in user-defined reduction operation")
 *         try: print_traceback()             # <<<<<<<<<<<<<<
 *         finally: <void>MPI_Abort(MPI_COMM_WORLD, 1)
 * 
 */
      /*try:*/ {
        __pyx_f_6mpi4py_3MPI_print_traceback();
      }

      /* "mpi4py/MPI/opimpl.pxi":106
 *                           b"exception in user-defined reduction operation")
 *         try: print_traceback()
 *         finally: <void>MPI_Abort(MPI_COMM_WORLD, 1)             # <<<<<<<<<<<<<<
 * 
 * cdef inline void op_user_call(
 */
      /*finally:*/ {
        /*normal exit:*/{
          ((void)MPI_Abort(MPI_COMM_WORLD, 1));
          goto __pyx_L20;
        }
        __pyx_L20:;
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/opimpl.pxi":96
 *     cdef Datatype datatype
 *     # errors in user-defined reduction operations are unrecoverable
 *     try:             # <<<<<<<<<<<<<<
 *         datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = t[0]
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/opimpl.pxi":92
 *     return op_user_registry[index](x, y, dt)
 * 
 * cdef inline void op_user_mpi(             # <<<<<<<<<<<<<<
 *     int index, void *a, void *b, MPI_Aint n, MPI_Datatype *t) with gil:
 *     cdef Datatype datatype
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("mpi4py.MPI.op_user_mpi", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
}

/* "mpi4py/MPI/opimpl.pxi":108
 *         finally: <void>MPI_Abort(MPI_COMM_WORLD, 1)
 * 
 * cdef inline void op_user_call(             # <<<<<<<<<<<<<<
 *     int index, void *a, void *b, int *plen, MPI_Datatype *t) nogil:
 *     # make it abort if Python has finalized
 */

static CYTHON_INLINE void __pyx_f_6mpi4py_3MPI_op_user_call(int __pyx_v_index, void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_plen, MPI_Datatype *__pyx_v_t) {
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  MPI_Aint __pyx_v_n;
  int __pyx_t_1;

  /* "mpi4py/MPI/opimpl.pxi":111
 *     int index, void *a, void *b, int *plen, MPI_Datatype *t) nogil:
 *     # make it abort if Python has finalized
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # make it abort if module clenaup has been done
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/opimpl.pxi":112
 *     # make it abort if Python has finalized
 *     if not Py_IsInitialized():
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)             # <<<<<<<<<<<<<<
 *     # make it abort if module clenaup has been done
 *     if (<void*>op_user_registry) == NULL:
 */
    ((void)MPI_Abort(MPI_COMM_WORLD, 1));

    /* "mpi4py/MPI/opimpl.pxi":111
 *     int index, void *a, void *b, int *plen, MPI_Datatype *t) nogil:
 *     # make it abort if Python has finalized
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # make it abort if module clenaup has been done
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":114
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # make it abort if module clenaup has been done
 *     if (<void*>op_user_registry) == NULL:             # <<<<<<<<<<<<<<
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # compute the byte-size of memory buffers
 */
  __pyx_t_1 = ((((void *)__pyx_v_6mpi4py_3MPI_op_user_registry) == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/opimpl.pxi":115
 *     # make it abort if module clenaup has been done
 *     if (<void*>op_user_registry) == NULL:
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)             # <<<<<<<<<<<<<<
 *     # compute the byte-size of memory buffers
 *     cdef MPI_Aint lb=0, extent=0
 */
    ((void)MPI_Abort(MPI_COMM_WORLD, 1));

    /* "mpi4py/MPI/opimpl.pxi":114
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # make it abort if module clenaup has been done
 *     if (<void*>op_user_registry) == NULL:             # <<<<<<<<<<<<<<
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # compute the byte-size of memory buffers
 */
  }

  /* "mpi4py/MPI/opimpl.pxi":117
 *         <void>MPI_Abort(MPI_COMM_WORLD, 1)
 *     # compute the byte-size of memory buffers
 *     cdef MPI_Aint lb=0, extent=0             # <<<<<<<<<<<<<<
 *     <void>MPI_Type_get_extent(t[0], &lb, &extent)
 *     cdef MPI_Aint n = <MPI_Aint>plen[0] * extent
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/opimpl.pxi":118
 *     # compute the byte-size of memory buffers
 *     cdef MPI_Aint lb=0, extent=0
 *     <void>MPI_Type_get_extent(t[0], &lb, &extent)             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint n = <MPI_Aint>plen[0] * extent
 *     # make the actual GIL-safe Python call
 */
  ((void)MPI_Type_get_extent((__pyx_v_t[0]), (&__pyx_v_lb), (&__pyx_v_extent)));

  /* "mpi4py/MPI/opimpl.pxi":119
 *     cdef MPI_Aint lb=0, extent=0
 *     <void>MPI_Type_get_extent(t[0], &lb, &extent)
 *     cdef MPI_Aint n = <MPI_Aint>plen[0] * extent             # <<<<<<<<<<<<<<
 *     # make the actual GIL-safe Python call
 *     op_user_mpi(index, a, b, n, t)
 */
  __pyx_v_n = (((MPI_Aint)(__pyx_v_plen[0])) * __pyx_v_extent);

  /* "mpi4py/MPI/opimpl.pxi":121
 *     cdef MPI_Aint n = <MPI_Aint>plen[0] * extent
 *     # make the actual GIL-safe Python call
 *     op_user_mpi(index, a, b, n, t)             # <<<<<<<<<<<<<<
 * 
 * @cython.callspec("MPIAPI")
 */
  __pyx_f_6mpi4py_3MPI_op_user_mpi(__pyx_v_index, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":108
 *         finally: <void>MPI_Abort(MPI_COMM_WORLD, 1)
 * 
 * cdef inline void op_user_call(             # <<<<<<<<<<<<<<
 *     int index, void *a, void *b, int *plen, MPI_Datatype *t) nogil:
 *     # make it abort if Python has finalized
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":124
 * 
 * @cython.callspec("MPIAPI")
 * cdef void op_user_01(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 1, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_01(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":125
 * @cython.callspec("MPIAPI")
 * cdef void op_user_01(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 1, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_02(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(1, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":124
 * 
 * @cython.callspec("MPIAPI")
 * cdef void op_user_01(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 1, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":127
 *     op_user_call( 1, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_02(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 2, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_02(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":128
 * @cython.callspec("MPIAPI")
 * cdef void op_user_02(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 2, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_03(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(2, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":127
 *     op_user_call( 1, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_02(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 2, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":130
 *     op_user_call( 2, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_03(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 3, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_03(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":131
 * @cython.callspec("MPIAPI")
 * cdef void op_user_03(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 3, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_04(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(3, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":130
 *     op_user_call( 2, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_03(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 3, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":133
 *     op_user_call( 3, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_04(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 4, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_04(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":134
 * @cython.callspec("MPIAPI")
 * cdef void op_user_04(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 4, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_05(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(4, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":133
 *     op_user_call( 3, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_04(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 4, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":136
 *     op_user_call( 4, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_05(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 5, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_05(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":137
 * @cython.callspec("MPIAPI")
 * cdef void op_user_05(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 5, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_06(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(5, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":136
 *     op_user_call( 4, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_05(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 5, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":139
 *     op_user_call( 5, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_06(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 6, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_06(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":140
 * @cython.callspec("MPIAPI")
 * cdef void op_user_06(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 6, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_07(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(6, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":139
 *     op_user_call( 5, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_06(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 6, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":142
 *     op_user_call( 6, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_07(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 7, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_07(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":143
 * @cython.callspec("MPIAPI")
 * cdef void op_user_07(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 7, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_08(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(7, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":142
 *     op_user_call( 6, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_07(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 7, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":145
 *     op_user_call( 7, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_08(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 8, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_08(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":146
 * @cython.callspec("MPIAPI")
 * cdef void op_user_08(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 8, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_09(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(8, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":145
 *     op_user_call( 7, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_08(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 8, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":148
 *     op_user_call( 8, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_09(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 9, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_09(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":149
 * @cython.callspec("MPIAPI")
 * cdef void op_user_09(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call( 9, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_10(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(9, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":148
 *     op_user_call( 8, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_09(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call( 9, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":151
 *     op_user_call( 9, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_10(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(10, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_10(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":152
 * @cython.callspec("MPIAPI")
 * cdef void op_user_10(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(10, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_11(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(10, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":151
 *     op_user_call( 9, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_10(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(10, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":154
 *     op_user_call(10, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_11(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(11, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_11(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":155
 * @cython.callspec("MPIAPI")
 * cdef void op_user_11(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(11, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_12(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(11, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":154
 *     op_user_call(10, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_11(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(11, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":157
 *     op_user_call(11, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_12(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(12, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_12(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":158
 * @cython.callspec("MPIAPI")
 * cdef void op_user_12(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(12, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_13(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(12, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":157
 *     op_user_call(11, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_12(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(12, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":160
 *     op_user_call(12, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_13(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(13, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_13(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":161
 * @cython.callspec("MPIAPI")
 * cdef void op_user_13(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(13, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_14(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(13, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":160
 *     op_user_call(12, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_13(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(13, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":163
 *     op_user_call(13, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_14(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(14, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_14(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":164
 * @cython.callspec("MPIAPI")
 * cdef void op_user_14(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(14, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_15(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(14, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":163
 *     op_user_call(13, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_14(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(14, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":166
 *     op_user_call(14, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_15(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(15, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_15(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":167
 * @cython.callspec("MPIAPI")
 * cdef void op_user_15(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(15, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_16(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(15, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":166
 *     op_user_call(14, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_15(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(15, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":169
 *     op_user_call(15, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_16(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(16, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_16(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":170
 * @cython.callspec("MPIAPI")
 * cdef void op_user_16(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(16, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_17(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(16, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":169
 *     op_user_call(15, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_16(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(16, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":172
 *     op_user_call(16, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_17(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(17, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_17(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":173
 * @cython.callspec("MPIAPI")
 * cdef void op_user_17(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(17, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_18(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(17, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":172
 *     op_user_call(16, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_17(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(17, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":175
 *     op_user_call(17, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_18(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(18, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_18(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":176
 * @cython.callspec("MPIAPI")
 * cdef void op_user_18(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(18, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_19(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(18, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":175
 *     op_user_call(17, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_18(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(18, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":178
 *     op_user_call(18, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_19(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(19, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_19(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":179
 * @cython.callspec("MPIAPI")
 * cdef void op_user_19(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(19, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_20(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(19, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":178
 *     op_user_call(18, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_19(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(19, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":181
 *     op_user_call(19, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_20(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(20, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_20(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":182
 * @cython.callspec("MPIAPI")
 * cdef void op_user_20(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(20, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_21(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(20, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":181
 *     op_user_call(19, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_20(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(20, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":184
 *     op_user_call(20, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_21(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(21, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_21(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":185
 * @cython.callspec("MPIAPI")
 * cdef void op_user_21(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(21, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_22(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(21, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":184
 *     op_user_call(20, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_21(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(21, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":187
 *     op_user_call(21, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_22(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(22, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_22(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":188
 * @cython.callspec("MPIAPI")
 * cdef void op_user_22(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(22, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_23(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(22, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":187
 *     op_user_call(21, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_22(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(22, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":190
 *     op_user_call(22, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_23(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(23, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_23(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":191
 * @cython.callspec("MPIAPI")
 * cdef void op_user_23(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(23, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_24(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(23, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":190
 *     op_user_call(22, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_23(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(23, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":193
 *     op_user_call(23, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_24(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(24, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_24(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":194
 * @cython.callspec("MPIAPI")
 * cdef void op_user_24(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(24, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_25(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(24, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":193
 *     op_user_call(23, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_24(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(24, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":196
 *     op_user_call(24, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_25(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(25, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_25(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":197
 * @cython.callspec("MPIAPI")
 * cdef void op_user_25(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(25, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_26(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(25, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":196
 *     op_user_call(24, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_25(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(25, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":199
 *     op_user_call(25, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_26(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(26, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_26(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":200
 * @cython.callspec("MPIAPI")
 * cdef void op_user_26(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(26, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_27(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(26, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":199
 *     op_user_call(25, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_26(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(26, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":202
 *     op_user_call(26, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_27(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(27, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_27(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":203
 * @cython.callspec("MPIAPI")
 * cdef void op_user_27(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(27, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_28(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(27, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":202
 *     op_user_call(26, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_27(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(27, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":205
 *     op_user_call(27, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_28(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(28, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_28(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":206
 * @cython.callspec("MPIAPI")
 * cdef void op_user_28(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(28, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_29(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(28, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":205
 *     op_user_call(27, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_28(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(28, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":208
 *     op_user_call(28, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_29(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(29, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_29(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":209
 * @cython.callspec("MPIAPI")
 * cdef void op_user_29(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(29, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_30(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(29, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":208
 *     op_user_call(28, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_29(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(29, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":211
 *     op_user_call(29, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_30(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(30, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_30(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":212
 * @cython.callspec("MPIAPI")
 * cdef void op_user_30(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(30, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_31(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(30, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":211
 *     op_user_call(29, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_30(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(30, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":214
 *     op_user_call(30, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_31(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(31, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_31(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":215
 * @cython.callspec("MPIAPI")
 * cdef void op_user_31(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(31, a, b, n, t)             # <<<<<<<<<<<<<<
 * @cython.callspec("MPIAPI")
 * cdef void op_user_32(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(31, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":214
 *     op_user_call(30, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_31(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(31, a, b, n, t)
 * @cython.callspec("MPIAPI")
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":217
 *     op_user_call(31, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_32(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(32, a, b, n, t)
 * 
 */

static void MPIAPI __pyx_f_6mpi4py_3MPI_op_user_32(void *__pyx_v_a, void *__pyx_v_b, int *__pyx_v_n, MPI_Datatype *__pyx_v_t) {

  /* "mpi4py/MPI/opimpl.pxi":218
 * @cython.callspec("MPIAPI")
 * cdef void op_user_32(void *a, void *b, int *n, MPI_Datatype *t) nogil:
 *     op_user_call(32, a, b, n, t)             # <<<<<<<<<<<<<<
 * 
 * cdef MPI_User_function *op_user_map(int index) nogil:
 */
  __pyx_f_6mpi4py_3MPI_op_user_call(32, __pyx_v_a, __pyx_v_b, __pyx_v_n, __pyx_v_t);

  /* "mpi4py/MPI/opimpl.pxi":217
 *     op_user_call(31, a, b, n, t)
 * @cython.callspec("MPIAPI")
 * cdef void op_user_32(void *a, void *b, int *n, MPI_Datatype *t) nogil:             # <<<<<<<<<<<<<<
 *     op_user_call(32, a, b, n, t)
 * 
 */

  /* function exit code */
}

/* "mpi4py/MPI/opimpl.pxi":220
 *     op_user_call(32, a, b, n, t)
 * 
 * cdef MPI_User_function *op_user_map(int index) nogil:             # <<<<<<<<<<<<<<
 *     if   index ==  1: return op_user_01
 *     elif index ==  2: return op_user_02
 */

static MPI_User_function *__pyx_f_6mpi4py_3MPI_op_user_map(int __pyx_v_index) {
  MPI_User_function *__pyx_r;
  int __pyx_t_1;

  /* "mpi4py/MPI/opimpl.pxi":221
 * 
 * cdef MPI_User_function *op_user_map(int index) nogil:
 *     if   index ==  1: return op_user_01             # <<<<<<<<<<<<<<
 *     elif index ==  2: return op_user_02
 *     elif index ==  3: return op_user_03
 */
  __pyx_t_1 = ((__pyx_v_index == 1) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_01;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":222
 * cdef MPI_User_function *op_user_map(int index) nogil:
 *     if   index ==  1: return op_user_01
 *     elif index ==  2: return op_user_02             # <<<<<<<<<<<<<<
 *     elif index ==  3: return op_user_03
 *     elif index ==  4: return op_user_04
 */
  __pyx_t_1 = ((__pyx_v_index == 2) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_02;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":223
 *     if   index ==  1: return op_user_01
 *     elif index ==  2: return op_user_02
 *     elif index ==  3: return op_user_03             # <<<<<<<<<<<<<<
 *     elif index ==  4: return op_user_04
 *     elif index ==  5: return op_user_05
 */
  __pyx_t_1 = ((__pyx_v_index == 3) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_03;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":224
 *     elif index ==  2: return op_user_02
 *     elif index ==  3: return op_user_03
 *     elif index ==  4: return op_user_04             # <<<<<<<<<<<<<<
 *     elif index ==  5: return op_user_05
 *     elif index ==  6: return op_user_06
 */
  __pyx_t_1 = ((__pyx_v_index == 4) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_04;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":225
 *     elif index ==  3: return op_user_03
 *     elif index ==  4: return op_user_04
 *     elif index ==  5: return op_user_05             # <<<<<<<<<<<<<<
 *     elif index ==  6: return op_user_06
 *     elif index ==  7: return op_user_07
 */
  __pyx_t_1 = ((__pyx_v_index == 5) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_05;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":226
 *     elif index ==  4: return op_user_04
 *     elif index ==  5: return op_user_05
 *     elif index ==  6: return op_user_06             # <<<<<<<<<<<<<<
 *     elif index ==  7: return op_user_07
 *     elif index ==  8: return op_user_08
 */
  __pyx_t_1 = ((__pyx_v_index == 6) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_06;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":227
 *     elif index ==  5: return op_user_05
 *     elif index ==  6: return op_user_06
 *     elif index ==  7: return op_user_07             # <<<<<<<<<<<<<<
 *     elif index ==  8: return op_user_08
 *     elif index ==  9: return op_user_09
 */
  __pyx_t_1 = ((__pyx_v_index == 7) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_07;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":228
 *     elif index ==  6: return op_user_06
 *     elif index ==  7: return op_user_07
 *     elif index ==  8: return op_user_08             # <<<<<<<<<<<<<<
 *     elif index ==  9: return op_user_09
 *     elif index == 10: return op_user_10
 */
  __pyx_t_1 = ((__pyx_v_index == 8) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_08;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":229
 *     elif index ==  7: return op_user_07
 *     elif index ==  8: return op_user_08
 *     elif index ==  9: return op_user_09             # <<<<<<<<<<<<<<
 *     elif index == 10: return op_user_10
 *     elif index == 11: return op_user_11
 */
  __pyx_t_1 = ((__pyx_v_index == 9) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_09;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":230
 *     elif index ==  8: return op_user_08
 *     elif index ==  9: return op_user_09
 *     elif index == 10: return op_user_10             # <<<<<<<<<<<<<<
 *     elif index == 11: return op_user_11
 *     elif index == 12: return op_user_12
 */
  __pyx_t_1 = ((__pyx_v_index == 10) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_10;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":231
 *     elif index ==  9: return op_user_09
 *     elif index == 10: return op_user_10
 *     elif index == 11: return op_user_11             # <<<<<<<<<<<<<<
 *     elif index == 12: return op_user_12
 *     elif index == 13: return op_user_13
 */
  __pyx_t_1 = ((__pyx_v_index == 11) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_11;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":232
 *     elif index == 10: return op_user_10
 *     elif index == 11: return op_user_11
 *     elif index == 12: return op_user_12             # <<<<<<<<<<<<<<
 *     elif index == 13: return op_user_13
 *     elif index == 14: return op_user_14
 */
  __pyx_t_1 = ((__pyx_v_index == 12) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_12;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":233
 *     elif index == 11: return op_user_11
 *     elif index == 12: return op_user_12
 *     elif index == 13: return op_user_13             # <<<<<<<<<<<<<<
 *     elif index == 14: return op_user_14
 *     elif index == 15: return op_user_15
 */
  __pyx_t_1 = ((__pyx_v_index == 13) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_13;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":234
 *     elif index == 12: return op_user_12
 *     elif index == 13: return op_user_13
 *     elif index == 14: return op_user_14             # <<<<<<<<<<<<<<
 *     elif index == 15: return op_user_15
 *     elif index == 16: return op_user_16
 */
  __pyx_t_1 = ((__pyx_v_index == 14) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_14;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":235
 *     elif index == 13: return op_user_13
 *     elif index == 14: return op_user_14
 *     elif index == 15: return op_user_15             # <<<<<<<<<<<<<<
 *     elif index == 16: return op_user_16
 *     elif index == 17: return op_user_17
 */
  __pyx_t_1 = ((__pyx_v_index == 15) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_15;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":236
 *     elif index == 14: return op_user_14
 *     elif index == 15: return op_user_15
 *     elif index == 16: return op_user_16             # <<<<<<<<<<<<<<
 *     elif index == 17: return op_user_17
 *     elif index == 18: return op_user_18
 */
  __pyx_t_1 = ((__pyx_v_index == 16) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_16;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":237
 *     elif index == 15: return op_user_15
 *     elif index == 16: return op_user_16
 *     elif index == 17: return op_user_17             # <<<<<<<<<<<<<<
 *     elif index == 18: return op_user_18
 *     elif index == 19: return op_user_19
 */
  __pyx_t_1 = ((__pyx_v_index == 17) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_17;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":238
 *     elif index == 16: return op_user_16
 *     elif index == 17: return op_user_17
 *     elif index == 18: return op_user_18             # <<<<<<<<<<<<<<
 *     elif index == 19: return op_user_19
 *     elif index == 20: return op_user_20
 */
  __pyx_t_1 = ((__pyx_v_index == 18) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_18;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":239
 *     elif index == 17: return op_user_17
 *     elif index == 18: return op_user_18
 *     elif index == 19: return op_user_19             # <<<<<<<<<<<<<<
 *     elif index == 20: return op_user_20
 *     elif index == 21: return op_user_21
 */
  __pyx_t_1 = ((__pyx_v_index == 19) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_19;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":240
 *     elif index == 18: return op_user_18
 *     elif index == 19: return op_user_19
 *     elif index == 20: return op_user_20             # <<<<<<<<<<<<<<
 *     elif index == 21: return op_user_21
 *     elif index == 22: return op_user_22
 */
  __pyx_t_1 = ((__pyx_v_index == 20) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_20;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":241
 *     elif index == 19: return op_user_19
 *     elif index == 20: return op_user_20
 *     elif index == 21: return op_user_21             # <<<<<<<<<<<<<<
 *     elif index == 22: return op_user_22
 *     elif index == 23: return op_user_23
 */
  __pyx_t_1 = ((__pyx_v_index == 21) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_21;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":242
 *     elif index == 20: return op_user_20
 *     elif index == 21: return op_user_21
 *     elif index == 22: return op_user_22             # <<<<<<<<<<<<<<
 *     elif index == 23: return op_user_23
 *     elif index == 24: return op_user_24
 */
  __pyx_t_1 = ((__pyx_v_index == 22) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_22;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":243
 *     elif index == 21: return op_user_21
 *     elif index == 22: return op_user_22
 *     elif index == 23: return op_user_23             # <<<<<<<<<<<<<<
 *     elif index == 24: return op_user_24
 *     elif index == 25: return op_user_25
 */
  __pyx_t_1 = ((__pyx_v_index == 23) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_23;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":244
 *     elif index == 22: return op_user_22
 *     elif index == 23: return op_user_23
 *     elif index == 24: return op_user_24             # <<<<<<<<<<<<<<
 *     elif index == 25: return op_user_25
 *     elif index == 26: return op_user_26
 */
  __pyx_t_1 = ((__pyx_v_index == 24) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_24;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":245
 *     elif index == 23: return op_user_23
 *     elif index == 24: return op_user_24
 *     elif index == 25: return op_user_25             # <<<<<<<<<<<<<<
 *     elif index == 26: return op_user_26
 *     elif index == 27: return op_user_27
 */
  __pyx_t_1 = ((__pyx_v_index == 25) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_25;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":246
 *     elif index == 24: return op_user_24
 *     elif index == 25: return op_user_25
 *     elif index == 26: return op_user_26             # <<<<<<<<<<<<<<
 *     elif index == 27: return op_user_27
 *     elif index == 28: return op_user_28
 */
  __pyx_t_1 = ((__pyx_v_index == 26) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_26;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":247
 *     elif index == 25: return op_user_25
 *     elif index == 26: return op_user_26
 *     elif index == 27: return op_user_27             # <<<<<<<<<<<<<<
 *     elif index == 28: return op_user_28
 *     elif index == 29: return op_user_29
 */
  __pyx_t_1 = ((__pyx_v_index == 27) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_27;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":248
 *     elif index == 26: return op_user_26
 *     elif index == 27: return op_user_27
 *     elif index == 28: return op_user_28             # <<<<<<<<<<<<<<
 *     elif index == 29: return op_user_29
 *     elif index == 30: return op_user_30
 */
  __pyx_t_1 = ((__pyx_v_index == 28) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_28;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":249
 *     elif index == 27: return op_user_27
 *     elif index == 28: return op_user_28
 *     elif index == 29: return op_user_29             # <<<<<<<<<<<<<<
 *     elif index == 30: return op_user_30
 *     elif index == 31: return op_user_31
 */
  __pyx_t_1 = ((__pyx_v_index == 29) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_29;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":250
 *     elif index == 28: return op_user_28
 *     elif index == 29: return op_user_29
 *     elif index == 30: return op_user_30             # <<<<<<<<<<<<<<
 *     elif index == 31: return op_user_31
 *     elif index == 32: return op_user_32
 */
  __pyx_t_1 = ((__pyx_v_index == 30) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_30;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":251
 *     elif index == 29: return op_user_29
 *     elif index == 30: return op_user_30
 *     elif index == 31: return op_user_31             # <<<<<<<<<<<<<<
 *     elif index == 32: return op_user_32
 *     else:             return NULL
 */
  __pyx_t_1 = ((__pyx_v_index == 31) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_31;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":252
 *     elif index == 30: return op_user_30
 *     elif index == 31: return op_user_31
 *     elif index == 32: return op_user_32             # <<<<<<<<<<<<<<
 *     else:             return NULL
 * 
 */
  __pyx_t_1 = ((__pyx_v_index == 32) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_f_6mpi4py_3MPI_op_user_32;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":253
 *     elif index == 31: return op_user_31
 *     elif index == 32: return op_user_32
 *     else:             return NULL             # <<<<<<<<<<<<<<
 * 
 * cdef int op_user_new(object function, MPI_User_function **cfunction) except -1:
 */
  /*else*/ {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/opimpl.pxi":220
 *     op_user_call(32, a, b, n, t)
 * 
 * cdef MPI_User_function *op_user_map(int index) nogil:             # <<<<<<<<<<<<<<
 *     if   index ==  1: return op_user_01
 *     elif index ==  2: return op_user_02
 */

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":255
 *     else:             return NULL
 * 
 * cdef int op_user_new(object function, MPI_User_function **cfunction) except -1:             # <<<<<<<<<<<<<<
 *     # find a free slot in the registry
 *     cdef int index = 0
 */

static int __pyx_f_6mpi4py_3MPI_op_user_new(PyObject *__pyx_v_function, MPI_User_function **__pyx_v_cfunction) {
  int __pyx_v_index;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  __Pyx_RefNannySetupContext("op_user_new", 0);

  /* "mpi4py/MPI/opimpl.pxi":257
 * cdef int op_user_new(object function, MPI_User_function **cfunction) except -1:
 *     # find a free slot in the registry
 *     cdef int index = 0             # <<<<<<<<<<<<<<
 *     try:
 *         index = op_user_registry.index(None, 1)
 */
  __pyx_v_index = 0;

  /* "mpi4py/MPI/opimpl.pxi":258
 *     # find a free slot in the registry
 *     cdef int index = 0
 *     try:             # <<<<<<<<<<<<<<
 *         index = op_user_registry.index(None, 1)
 *     except ValueError:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/opimpl.pxi":259
 *     cdef int index = 0
 *     try:
 *         index = op_user_registry.index(None, 1)             # <<<<<<<<<<<<<<
 *     except ValueError:
 *         raise RuntimeError("cannot create too many "
 */
      __pyx_t_4 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyList_Type_index, __pyx_v_6mpi4py_3MPI_op_user_registry, Py_None, __pyx_int_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 259, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(14, 259, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_index = __pyx_t_5;

      /* "mpi4py/MPI/opimpl.pxi":258
 *     # find a free slot in the registry
 *     cdef int index = 0
 *     try:             # <<<<<<<<<<<<<<
 *         index = op_user_registry.index(None, 1)
 *     except ValueError:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/opimpl.pxi":260
 *     try:
 *         index = op_user_registry.index(None, 1)
 *     except ValueError:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("cannot create too many "
 *                            "user-defined reduction operations")
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ValueError);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.op_user_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(14, 260, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);

      /* "mpi4py/MPI/opimpl.pxi":261
 *         index = op_user_registry.index(None, 1)
 *     except ValueError:
 *         raise RuntimeError("cannot create too many "             # <<<<<<<<<<<<<<
 *                            "user-defined reduction operations")
 *     # the line below will fail
 */
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 261, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(14, 261, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/opimpl.pxi":258
 *     # find a free slot in the registry
 *     cdef int index = 0
 *     try:             # <<<<<<<<<<<<<<
 *         index = op_user_registry.index(None, 1)
 *     except ValueError:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/opimpl.pxi":265
 *     # the line below will fail
 *     # if the function is not callable
 *     function.__call__             # <<<<<<<<<<<<<<
 *     # register the Python function,
 *     # map it to the associated C function,
 */
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_function, __pyx_n_s_call); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "mpi4py/MPI/opimpl.pxi":269
 *     # map it to the associated C function,
 *     # and return the slot index in registry
 *     op_user_registry[index] = function             # <<<<<<<<<<<<<<
 *     cfunction[0] = op_user_map(index)
 *     return index
 */
  if (unlikely(__pyx_v_6mpi4py_3MPI_op_user_registry == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(14, 269, __pyx_L1_error)
  }
  if (unlikely(__Pyx_SetItemInt(__pyx_v_6mpi4py_3MPI_op_user_registry, __pyx_v_index, __pyx_v_function, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(14, 269, __pyx_L1_error)

  /* "mpi4py/MPI/opimpl.pxi":270
 *     # and return the slot index in registry
 *     op_user_registry[index] = function
 *     cfunction[0] = op_user_map(index)             # <<<<<<<<<<<<<<
 *     return index
 * 
 */
  (__pyx_v_cfunction[0]) = __pyx_f_6mpi4py_3MPI_op_user_map(__pyx_v_index);

  /* "mpi4py/MPI/opimpl.pxi":271
 *     op_user_registry[index] = function
 *     cfunction[0] = op_user_map(index)
 *     return index             # <<<<<<<<<<<<<<
 * 
 * cdef int op_user_del(int *indexp) except -1:
 */
  __pyx_r = __pyx_v_index;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":255
 *     else:             return NULL
 * 
 * cdef int op_user_new(object function, MPI_User_function **cfunction) except -1:             # <<<<<<<<<<<<<<
 *     # find a free slot in the registry
 *     cdef int index = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mpi4py.MPI.op_user_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/opimpl.pxi":273
 *     return index
 * 
 * cdef int op_user_del(int *indexp) except -1:             # <<<<<<<<<<<<<<
 *     # free slot in the registry
 *     cdef int index = indexp[0]
 */

static int __pyx_f_6mpi4py_3MPI_op_user_del(int *__pyx_v_indexp) {
  int __pyx_v_index;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("op_user_del", 0);

  /* "mpi4py/MPI/opimpl.pxi":275
 * cdef int op_user_del(int *indexp) except -1:
 *     # free slot in the registry
 *     cdef int index = indexp[0]             # <<<<<<<<<<<<<<
 *     indexp[0] = 0 # clear the value
 *     op_user_registry[index] = None
 */
  __pyx_v_index = (__pyx_v_indexp[0]);

  /* "mpi4py/MPI/opimpl.pxi":276
 *     # free slot in the registry
 *     cdef int index = indexp[0]
 *     indexp[0] = 0 # clear the value             # <<<<<<<<<<<<<<
 *     op_user_registry[index] = None
 *     return 0
 */
  (__pyx_v_indexp[0]) = 0;

  /* "mpi4py/MPI/opimpl.pxi":277
 *     cdef int index = indexp[0]
 *     indexp[0] = 0 # clear the value
 *     op_user_registry[index] = None             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  if (unlikely(__pyx_v_6mpi4py_3MPI_op_user_registry == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(14, 277, __pyx_L1_error)
  }
  if (unlikely(__Pyx_SetItemInt(__pyx_v_6mpi4py_3MPI_op_user_registry, __pyx_v_index, Py_None, int, 1, __Pyx_PyInt_From_int, 1, 1, 1) < 0)) __PYX_ERR(14, 277, __pyx_L1_error)

  /* "mpi4py/MPI/opimpl.pxi":278
 *     indexp[0] = 0 # clear the value
 *     op_user_registry[index] = None
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/opimpl.pxi":273
 *     return index
 * 
 * cdef int op_user_del(int *indexp) except -1:             # <<<<<<<<<<<<<<
 *     # free slot in the registry
 *     cdef int index = indexp[0]
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.op_user_del", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":163
 * include "opimpl.pxi"
 * 
 * cdef inline Op new_Op(MPI_Op ob):             # <<<<<<<<<<<<<<
 *     cdef Op op = <Op>Op.__new__(Op)
 *     op.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIOpObject *__pyx_f_6mpi4py_3MPI_new_Op(MPI_Op __pyx_v_ob) {
  struct PyMPIOpObject *__pyx_v_op = 0;
  struct PyMPIOpObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("new_Op", 0);

  /* "mpi4py/MPI/helpers.pxi":164
 * 
 * cdef inline Op new_Op(MPI_Op ob):
 *     cdef Op op = <Op>Op.__new__(Op)             # <<<<<<<<<<<<<<
 *     op.ob_mpi = ob
 *     if   ob == MPI_OP_NULL : op.ob_func = NULL
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Op(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Op), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 164, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_op = ((struct PyMPIOpObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":165
 * cdef inline Op new_Op(MPI_Op ob):
 *     cdef Op op = <Op>Op.__new__(Op)
 *     op.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     if   ob == MPI_OP_NULL : op.ob_func = NULL
 *     elif ob == MPI_MAX     : op.ob_func = _op_MAX
 */
  __pyx_v_op->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":166
 *     cdef Op op = <Op>Op.__new__(Op)
 *     op.ob_mpi = ob
 *     if   ob == MPI_OP_NULL : op.ob_func = NULL             # <<<<<<<<<<<<<<
 *     elif ob == MPI_MAX     : op.ob_func = _op_MAX
 *     elif ob == MPI_MIN     : op.ob_func = _op_MIN
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_OP_NULL) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = NULL;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":167
 *     op.ob_mpi = ob
 *     if   ob == MPI_OP_NULL : op.ob_func = NULL
 *     elif ob == MPI_MAX     : op.ob_func = _op_MAX             # <<<<<<<<<<<<<<
 *     elif ob == MPI_MIN     : op.ob_func = _op_MIN
 *     elif ob == MPI_SUM     : op.ob_func = _op_SUM
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_MAX) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_MAX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":168
 *     if   ob == MPI_OP_NULL : op.ob_func = NULL
 *     elif ob == MPI_MAX     : op.ob_func = _op_MAX
 *     elif ob == MPI_MIN     : op.ob_func = _op_MIN             # <<<<<<<<<<<<<<
 *     elif ob == MPI_SUM     : op.ob_func = _op_SUM
 *     elif ob == MPI_PROD    : op.ob_func = _op_PROD
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_MIN) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_MIN;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":169
 *     elif ob == MPI_MAX     : op.ob_func = _op_MAX
 *     elif ob == MPI_MIN     : op.ob_func = _op_MIN
 *     elif ob == MPI_SUM     : op.ob_func = _op_SUM             # <<<<<<<<<<<<<<
 *     elif ob == MPI_PROD    : op.ob_func = _op_PROD
 *     elif ob == MPI_LAND    : op.ob_func = _op_LAND
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_SUM) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_SUM;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":170
 *     elif ob == MPI_MIN     : op.ob_func = _op_MIN
 *     elif ob == MPI_SUM     : op.ob_func = _op_SUM
 *     elif ob == MPI_PROD    : op.ob_func = _op_PROD             # <<<<<<<<<<<<<<
 *     elif ob == MPI_LAND    : op.ob_func = _op_LAND
 *     elif ob == MPI_BAND    : op.ob_func = _op_BAND
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_PROD) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_PROD;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":171
 *     elif ob == MPI_SUM     : op.ob_func = _op_SUM
 *     elif ob == MPI_PROD    : op.ob_func = _op_PROD
 *     elif ob == MPI_LAND    : op.ob_func = _op_LAND             # <<<<<<<<<<<<<<
 *     elif ob == MPI_BAND    : op.ob_func = _op_BAND
 *     elif ob == MPI_LOR     : op.ob_func = _op_LOR
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_LAND) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_LAND;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":172
 *     elif ob == MPI_PROD    : op.ob_func = _op_PROD
 *     elif ob == MPI_LAND    : op.ob_func = _op_LAND
 *     elif ob == MPI_BAND    : op.ob_func = _op_BAND             # <<<<<<<<<<<<<<
 *     elif ob == MPI_LOR     : op.ob_func = _op_LOR
 *     elif ob == MPI_BOR     : op.ob_func = _op_BOR
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_BAND) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_BAND;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":173
 *     elif ob == MPI_LAND    : op.ob_func = _op_LAND
 *     elif ob == MPI_BAND    : op.ob_func = _op_BAND
 *     elif ob == MPI_LOR     : op.ob_func = _op_LOR             # <<<<<<<<<<<<<<
 *     elif ob == MPI_BOR     : op.ob_func = _op_BOR
 *     elif ob == MPI_LXOR    : op.ob_func = _op_LXOR
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_LOR) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_LOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":174
 *     elif ob == MPI_BAND    : op.ob_func = _op_BAND
 *     elif ob == MPI_LOR     : op.ob_func = _op_LOR
 *     elif ob == MPI_BOR     : op.ob_func = _op_BOR             # <<<<<<<<<<<<<<
 *     elif ob == MPI_LXOR    : op.ob_func = _op_LXOR
 *     elif ob == MPI_BXOR    : op.ob_func = _op_BXOR
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_BOR) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_BOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":175
 *     elif ob == MPI_LOR     : op.ob_func = _op_LOR
 *     elif ob == MPI_BOR     : op.ob_func = _op_BOR
 *     elif ob == MPI_LXOR    : op.ob_func = _op_LXOR             # <<<<<<<<<<<<<<
 *     elif ob == MPI_BXOR    : op.ob_func = _op_BXOR
 *     elif ob == MPI_MAXLOC  : op.ob_func = _op_MAXLOC
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_LXOR) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_LXOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":176
 *     elif ob == MPI_BOR     : op.ob_func = _op_BOR
 *     elif ob == MPI_LXOR    : op.ob_func = _op_LXOR
 *     elif ob == MPI_BXOR    : op.ob_func = _op_BXOR             # <<<<<<<<<<<<<<
 *     elif ob == MPI_MAXLOC  : op.ob_func = _op_MAXLOC
 *     elif ob == MPI_MINLOC  : op.ob_func = _op_MINLOC
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_BXOR) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_BXOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":177
 *     elif ob == MPI_LXOR    : op.ob_func = _op_LXOR
 *     elif ob == MPI_BXOR    : op.ob_func = _op_BXOR
 *     elif ob == MPI_MAXLOC  : op.ob_func = _op_MAXLOC             # <<<<<<<<<<<<<<
 *     elif ob == MPI_MINLOC  : op.ob_func = _op_MINLOC
 *     elif ob == MPI_REPLACE : op.ob_func = _op_REPLACE
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_MAXLOC) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_MAXLOC;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":178
 *     elif ob == MPI_BXOR    : op.ob_func = _op_BXOR
 *     elif ob == MPI_MAXLOC  : op.ob_func = _op_MAXLOC
 *     elif ob == MPI_MINLOC  : op.ob_func = _op_MINLOC             # <<<<<<<<<<<<<<
 *     elif ob == MPI_REPLACE : op.ob_func = _op_REPLACE
 *     elif ob == MPI_NO_OP   : op.ob_func = _op_NO_OP
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_MINLOC) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_MINLOC;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":179
 *     elif ob == MPI_MAXLOC  : op.ob_func = _op_MAXLOC
 *     elif ob == MPI_MINLOC  : op.ob_func = _op_MINLOC
 *     elif ob == MPI_REPLACE : op.ob_func = _op_REPLACE             # <<<<<<<<<<<<<<
 *     elif ob == MPI_NO_OP   : op.ob_func = _op_NO_OP
 *     return op
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_REPLACE) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_REPLACE;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/helpers.pxi":180
 *     elif ob == MPI_MINLOC  : op.ob_func = _op_MINLOC
 *     elif ob == MPI_REPLACE : op.ob_func = _op_REPLACE
 *     elif ob == MPI_NO_OP   : op.ob_func = _op_NO_OP             # <<<<<<<<<<<<<<
 *     return op
 * 
 */
  __pyx_t_3 = ((__pyx_v_ob == MPI_NO_OP) != 0);
  if (__pyx_t_3) {
    __pyx_v_op->ob_func = __pyx_f_6mpi4py_3MPI__op_NO_OP;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/helpers.pxi":181
 *     elif ob == MPI_REPLACE : op.ob_func = _op_REPLACE
 *     elif ob == MPI_NO_OP   : op.ob_func = _op_NO_OP
 *     return op             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Op(MPI_Op* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_op));
  __pyx_r = __pyx_v_op;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":163
 * include "opimpl.pxi"
 * 
 * cdef inline Op new_Op(MPI_Op ob):             # <<<<<<<<<<<<<<
 *     cdef Op op = <Op>Op.__new__(Op)
 *     op.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Op", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_op);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":183
 *     return op
 * 
 * cdef inline int del_Op(MPI_Op* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL        : return 0
 *     if ob[0] == MPI_OP_NULL : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Op(MPI_Op *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Op", 0);

  /* "mpi4py/MPI/helpers.pxi":184
 * 
 * cdef inline int del_Op(MPI_Op* ob):
 *     if ob    == NULL        : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_OP_NULL : return 0
 *     if ob[0] == MPI_MAX     : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":185
 * cdef inline int del_Op(MPI_Op* ob):
 *     if ob    == NULL        : return 0
 *     if ob[0] == MPI_OP_NULL : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_MAX     : return 0
 *     if ob[0] == MPI_MIN     : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_OP_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":186
 *     if ob    == NULL        : return 0
 *     if ob[0] == MPI_OP_NULL : return 0
 *     if ob[0] == MPI_MAX     : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_MIN     : return 0
 *     if ob[0] == MPI_SUM     : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_MAX) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":187
 *     if ob[0] == MPI_OP_NULL : return 0
 *     if ob[0] == MPI_MAX     : return 0
 *     if ob[0] == MPI_MIN     : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_SUM     : return 0
 *     if ob[0] == MPI_PROD    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_MIN) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":188
 *     if ob[0] == MPI_MAX     : return 0
 *     if ob[0] == MPI_MIN     : return 0
 *     if ob[0] == MPI_SUM     : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_PROD    : return 0
 *     if ob[0] == MPI_LAND    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_SUM) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":189
 *     if ob[0] == MPI_MIN     : return 0
 *     if ob[0] == MPI_SUM     : return 0
 *     if ob[0] == MPI_PROD    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LAND    : return 0
 *     if ob[0] == MPI_BAND    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_PROD) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":190
 *     if ob[0] == MPI_SUM     : return 0
 *     if ob[0] == MPI_PROD    : return 0
 *     if ob[0] == MPI_LAND    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_BAND    : return 0
 *     if ob[0] == MPI_LOR     : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LAND) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":191
 *     if ob[0] == MPI_PROD    : return 0
 *     if ob[0] == MPI_LAND    : return 0
 *     if ob[0] == MPI_BAND    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LOR     : return 0
 *     if ob[0] == MPI_BOR     : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_BAND) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":192
 *     if ob[0] == MPI_LAND    : return 0
 *     if ob[0] == MPI_BAND    : return 0
 *     if ob[0] == MPI_LOR     : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_BOR     : return 0
 *     if ob[0] == MPI_LXOR    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LOR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":193
 *     if ob[0] == MPI_BAND    : return 0
 *     if ob[0] == MPI_LOR     : return 0
 *     if ob[0] == MPI_BOR     : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_LXOR    : return 0
 *     if ob[0] == MPI_BXOR    : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_BOR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":194
 *     if ob[0] == MPI_LOR     : return 0
 *     if ob[0] == MPI_BOR     : return 0
 *     if ob[0] == MPI_LXOR    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_BXOR    : return 0
 *     if ob[0] == MPI_MAXLOC  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_LXOR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":195
 *     if ob[0] == MPI_BOR     : return 0
 *     if ob[0] == MPI_LXOR    : return 0
 *     if ob[0] == MPI_BXOR    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_MAXLOC  : return 0
 *     if ob[0] == MPI_MINLOC  : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_BXOR) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":196
 *     if ob[0] == MPI_LXOR    : return 0
 *     if ob[0] == MPI_BXOR    : return 0
 *     if ob[0] == MPI_MAXLOC  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_MINLOC  : return 0
 *     if ob[0] == MPI_REPLACE : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_MAXLOC) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":197
 *     if ob[0] == MPI_BXOR    : return 0
 *     if ob[0] == MPI_MAXLOC  : return 0
 *     if ob[0] == MPI_MINLOC  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_REPLACE : return 0
 *     if ob[0] == MPI_NO_OP   : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_MINLOC) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":198
 *     if ob[0] == MPI_MAXLOC  : return 0
 *     if ob[0] == MPI_MINLOC  : return 0
 *     if ob[0] == MPI_REPLACE : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_NO_OP   : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_REPLACE) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":199
 *     if ob[0] == MPI_MINLOC  : return 0
 *     if ob[0] == MPI_REPLACE : return 0
 *     if ob[0] == MPI_NO_OP   : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_NO_OP) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":201
 *     if ob[0] == MPI_NO_OP   : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Op_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":202
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Op_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Op_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":183
 *     return op
 * 
 * cdef inline int del_Op(MPI_Op* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL        : return 0
 *     if ob[0] == MPI_OP_NULL : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":207
 * # Info
 * 
 * cdef inline Info new_Info(MPI_Info ob):             # <<<<<<<<<<<<<<
 *     cdef Info info = <Info>Info.__new__(Info)
 *     info.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIInfoObject *__pyx_f_6mpi4py_3MPI_new_Info(MPI_Info __pyx_v_ob) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  struct PyMPIInfoObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Info", 0);

  /* "mpi4py/MPI/helpers.pxi":208
 * 
 * cdef inline Info new_Info(MPI_Info ob):
 *     cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *     info.ob_mpi = ob
 *     return info
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 208, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":209
 * cdef inline Info new_Info(MPI_Info ob):
 *     cdef Info info = <Info>Info.__new__(Info)
 *     info.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return info
 * 
 */
  __pyx_v_info->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":210
 *     cdef Info info = <Info>Info.__new__(Info)
 *     info.ob_mpi = ob
 *     return info             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Info(MPI_Info* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = __pyx_v_info;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":207
 * # Info
 * 
 * cdef inline Info new_Info(MPI_Info ob):             # <<<<<<<<<<<<<<
 *     cdef Info info = <Info>Info.__new__(Info)
 *     info.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":212
 *     return info
 * 
 * cdef inline int del_Info(MPI_Info* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_INFO_NULL : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Info(MPI_Info *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Info", 0);

  /* "mpi4py/MPI/helpers.pxi":213
 * 
 * cdef inline int del_Info(MPI_Info* ob):
 *     if ob    == NULL          : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INFO_NULL : return 0
 *     if ob[0] == MPI_INFO_ENV  : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":214
 * cdef inline int del_Info(MPI_Info* ob):
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_INFO_NULL : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_INFO_ENV  : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INFO_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":215
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_INFO_NULL : return 0
 *     if ob[0] == MPI_INFO_ENV  : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_INFO_ENV) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":217
 *     if ob[0] == MPI_INFO_ENV  : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Info_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":218
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Info_free(ob)             # <<<<<<<<<<<<<<
 * 
 * cdef inline MPI_Info arg_Info(object info):
 */
  __pyx_r = MPI_Info_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":212
 *     return info
 * 
 * cdef inline int del_Info(MPI_Info* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_INFO_NULL : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":220
 *     return MPI_Info_free(ob)
 * 
 * cdef inline MPI_Info arg_Info(object info):             # <<<<<<<<<<<<<<
 *     if info is None: return MPI_INFO_NULL
 *     return (<Info>info).ob_mpi
 */

static CYTHON_INLINE MPI_Info __pyx_f_6mpi4py_3MPI_arg_Info(PyObject *__pyx_v_info) {
  MPI_Info __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("arg_Info", 0);

  /* "mpi4py/MPI/helpers.pxi":221
 * 
 * cdef inline MPI_Info arg_Info(object info):
 *     if info is None: return MPI_INFO_NULL             # <<<<<<<<<<<<<<
 *     return (<Info>info).ob_mpi
 * 
 */
  __pyx_t_1 = (__pyx_v_info == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = MPI_INFO_NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":222
 * cdef inline MPI_Info arg_Info(object info):
 *     if info is None: return MPI_INFO_NULL
 *     return (<Info>info).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = ((struct PyMPIInfoObject *)__pyx_v_info)->ob_mpi;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":220
 *     return MPI_Info_free(ob)
 * 
 * cdef inline MPI_Info arg_Info(object info):             # <<<<<<<<<<<<<<
 *     if info is None: return MPI_INFO_NULL
 *     return (<Info>info).ob_mpi
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":227
 * # Group
 * 
 * cdef inline Group new_Group(MPI_Group ob):             # <<<<<<<<<<<<<<
 *     cdef Group group = <Group>Group.__new__(Group)
 *     group.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIGroupObject *__pyx_f_6mpi4py_3MPI_new_Group(MPI_Group __pyx_v_ob) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  struct PyMPIGroupObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Group", 0);

  /* "mpi4py/MPI/helpers.pxi":228
 * 
 * cdef inline Group new_Group(MPI_Group ob):
 *     cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *     group.ob_mpi = ob
 *     return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 228, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":229
 * cdef inline Group new_Group(MPI_Group ob):
 *     cdef Group group = <Group>Group.__new__(Group)
 *     group.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return group
 * 
 */
  __pyx_v_group->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":230
 *     cdef Group group = <Group>Group.__new__(Group)
 *     group.ob_mpi = ob
 *     return group             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = __pyx_v_group;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":227
 * # Group
 * 
 * cdef inline Group new_Group(MPI_Group ob):             # <<<<<<<<<<<<<<
 *     cdef Group group = <Group>Group.__new__(Group)
 *     group.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":233
 * 
 * 
 * cdef inline int del_Group(MPI_Group* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL            : return 0
 *     if ob[0] == MPI_GROUP_NULL  : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Group(MPI_Group *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Group", 0);

  /* "mpi4py/MPI/helpers.pxi":234
 * 
 * cdef inline int del_Group(MPI_Group* ob):
 *     if ob    == NULL            : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_GROUP_NULL  : return 0
 *     if ob[0] == MPI_GROUP_EMPTY : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":235
 * cdef inline int del_Group(MPI_Group* ob):
 *     if ob    == NULL            : return 0
 *     if ob[0] == MPI_GROUP_NULL  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_GROUP_EMPTY : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_GROUP_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":236
 *     if ob    == NULL            : return 0
 *     if ob[0] == MPI_GROUP_NULL  : return 0
 *     if ob[0] == MPI_GROUP_EMPTY : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_GROUP_EMPTY) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":238
 *     if ob[0] == MPI_GROUP_EMPTY : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Group_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":239
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Group_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Group_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":233
 * 
 * 
 * cdef inline int del_Group(MPI_Group* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL            : return 0
 *     if ob[0] == MPI_GROUP_NULL  : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":5
 * cdef memory _buffer = None
 * 
 * cdef inline int attach_buffer(ob, void **p, int *n) except -1:             # <<<<<<<<<<<<<<
 *     global _buffer
 *     cdef void *bptr = NULL
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_attach_buffer(PyObject *__pyx_v_ob, void **__pyx_v_p, int *__pyx_v_n) {
  void *__pyx_v_bptr;
  MPI_Aint __pyx_v_blen;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("attach_buffer", 0);

  /* "mpi4py/MPI/commimpl.pxi":7
 * cdef inline int attach_buffer(ob, void **p, int *n) except -1:
 *     global _buffer
 *     cdef void *bptr = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint blen = 0
 *     _buffer = getbuffer_w(ob, &bptr, &blen)
 */
  __pyx_v_bptr = NULL;

  /* "mpi4py/MPI/commimpl.pxi":8
 *     global _buffer
 *     cdef void *bptr = NULL
 *     cdef MPI_Aint blen = 0             # <<<<<<<<<<<<<<
 *     _buffer = getbuffer_w(ob, &bptr, &blen)
 *     p[0] = bptr
 */
  __pyx_v_blen = 0;

  /* "mpi4py/MPI/commimpl.pxi":9
 *     cdef void *bptr = NULL
 *     cdef MPI_Aint blen = 0
 *     _buffer = getbuffer_w(ob, &bptr, &blen)             # <<<<<<<<<<<<<<
 *     p[0] = bptr
 *     n[0] = clipcount(blen)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_ob, (&__pyx_v_bptr), (&__pyx_v_blen))); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI__buffer));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI__buffer, ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/commimpl.pxi":10
 *     cdef MPI_Aint blen = 0
 *     _buffer = getbuffer_w(ob, &bptr, &blen)
 *     p[0] = bptr             # <<<<<<<<<<<<<<
 *     n[0] = clipcount(blen)
 *     return 0
 */
  (__pyx_v_p[0]) = __pyx_v_bptr;

  /* "mpi4py/MPI/commimpl.pxi":11
 *     _buffer = getbuffer_w(ob, &bptr, &blen)
 *     p[0] = bptr
 *     n[0] = clipcount(blen)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  (__pyx_v_n[0]) = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_blen);

  /* "mpi4py/MPI/commimpl.pxi":12
 *     p[0] = bptr
 *     n[0] = clipcount(blen)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline object detach_buffer(void *p, int n):
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":5
 * cdef memory _buffer = None
 * 
 * cdef inline int attach_buffer(ob, void **p, int *n) except -1:             # <<<<<<<<<<<<<<
 *     global _buffer
 *     cdef void *bptr = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.attach_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":14
 *     return 0
 * 
 * cdef inline object detach_buffer(void *p, int n):             # <<<<<<<<<<<<<<
 *     global _buffer
 *     cdef object ob = None
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_detach_buffer(void *__pyx_v_p, int __pyx_v_n) {
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  __Pyx_RefNannySetupContext("detach_buffer", 0);

  /* "mpi4py/MPI/commimpl.pxi":16
 * cdef inline object detach_buffer(void *p, int n):
 *     global _buffer
 *     cdef object ob = None             # <<<<<<<<<<<<<<
 *     try:
 *         if (_buffer is not None and
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_ob = Py_None;

  /* "mpi4py/MPI/commimpl.pxi":17
 *     global _buffer
 *     cdef object ob = None
 *     try:             # <<<<<<<<<<<<<<
 *         if (_buffer is not None and
 *             _buffer.view.buf == p and
 */
  /*try:*/ {

    /* "mpi4py/MPI/commimpl.pxi":18
 *     cdef object ob = None
 *     try:
 *         if (_buffer is not None and             # <<<<<<<<<<<<<<
 *             _buffer.view.buf == p and
 *             _buffer.view.obj != NULL):
 */
    __pyx_t_2 = (((PyObject *)__pyx_v_6mpi4py_3MPI__buffer) != Py_None);
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L7_bool_binop_done;
    }

    /* "mpi4py/MPI/commimpl.pxi":19
 *     try:
 *         if (_buffer is not None and
 *             _buffer.view.buf == p and             # <<<<<<<<<<<<<<
 *             _buffer.view.obj != NULL):
 *             ob = <object>_buffer.view.obj
 */
    __pyx_t_3 = ((__pyx_v_6mpi4py_3MPI__buffer->view.buf == __pyx_v_p) != 0);
    if (__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L7_bool_binop_done;
    }

    /* "mpi4py/MPI/commimpl.pxi":20
 *         if (_buffer is not None and
 *             _buffer.view.buf == p and
 *             _buffer.view.obj != NULL):             # <<<<<<<<<<<<<<
 *             ob = <object>_buffer.view.obj
 *         else:
 */
    __pyx_t_3 = ((__pyx_v_6mpi4py_3MPI__buffer->view.obj != NULL) != 0);
    __pyx_t_1 = __pyx_t_3;
    __pyx_L7_bool_binop_done:;

    /* "mpi4py/MPI/commimpl.pxi":18
 *     cdef object ob = None
 *     try:
 *         if (_buffer is not None and             # <<<<<<<<<<<<<<
 *             _buffer.view.buf == p and
 *             _buffer.view.obj != NULL):
 */
    if (__pyx_t_1) {

      /* "mpi4py/MPI/commimpl.pxi":21
 *             _buffer.view.buf == p and
 *             _buffer.view.obj != NULL):
 *             ob = <object>_buffer.view.obj             # <<<<<<<<<<<<<<
 *         else:
 *             ob = tomemory(p, n)
 */
      __pyx_t_4 = ((PyObject *)__pyx_v_6mpi4py_3MPI__buffer->view.obj);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_ob, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "mpi4py/MPI/commimpl.pxi":18
 *     cdef object ob = None
 *     try:
 *         if (_buffer is not None and             # <<<<<<<<<<<<<<
 *             _buffer.view.buf == p and
 *             _buffer.view.obj != NULL):
 */
      goto __pyx_L6;
    }

    /* "mpi4py/MPI/commimpl.pxi":23
 *             ob = <object>_buffer.view.obj
 *         else:
 *             ob = tomemory(p, n)             # <<<<<<<<<<<<<<
 *     finally:
 *         _buffer = None
 */
    /*else*/ {
      __pyx_t_4 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_p, __pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 23, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_ob, __pyx_t_4);
      __pyx_t_4 = 0;
    }
    __pyx_L6:;
  }

  /* "mpi4py/MPI/commimpl.pxi":25
 *             ob = tomemory(p, n)
 *     finally:
 *         _buffer = None             # <<<<<<<<<<<<<<
 *     return ob
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __Pyx_INCREF(Py_None);
      __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI__buffer));
      __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI__buffer, ((struct __pyx_obj_6mpi4py_3MPI_memory *)Py_None));
      __Pyx_GIVEREF(Py_None);
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __Pyx_INCREF(Py_None);
        __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI__buffer));
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI__buffer, ((struct __pyx_obj_6mpi4py_3MPI_memory *)Py_None));
        __Pyx_GIVEREF(Py_None);
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/commimpl.pxi":26
 *     finally:
 *         _buffer = None
 *     return ob             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ob);
  __pyx_r = __pyx_v_ob;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":14
 *     return 0
 * 
 * cdef inline object detach_buffer(void *p, int n):             # <<<<<<<<<<<<<<
 *     global _buffer
 *     cdef object ob = None
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.detach_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":34
 * cdef object __WEIGHTS_EMPTY__ = <MPI_Aint>MPI_WEIGHTS_EMPTY
 * 
 * cdef object asarray_weights(object weights, int nweight, int **iweight):             # <<<<<<<<<<<<<<
 *     if weights is None:
 *         iweight[0] = MPI_UNWEIGHTED
 */

static PyObject *__pyx_f_6mpi4py_3MPI_asarray_weights(PyObject *__pyx_v_weights, int __pyx_v_nweight, int **__pyx_v_iweight) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("asarray_weights", 0);

  /* "mpi4py/MPI/commimpl.pxi":35
 * 
 * cdef object asarray_weights(object weights, int nweight, int **iweight):
 *     if weights is None:             # <<<<<<<<<<<<<<
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 */
  __pyx_t_1 = (__pyx_v_weights == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/commimpl.pxi":36
 * cdef object asarray_weights(object weights, int nweight, int **iweight):
 *     if weights is None:
 *         iweight[0] = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         return None
 *     if weights is __UNWEIGHTED__:
 */
    (__pyx_v_iweight[0]) = MPI_UNWEIGHTED;

    /* "mpi4py/MPI/commimpl.pxi":37
 *     if weights is None:
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None             # <<<<<<<<<<<<<<
 *     if weights is __UNWEIGHTED__:
 *         iweight[0] = MPI_UNWEIGHTED
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/commimpl.pxi":35
 * 
 * cdef object asarray_weights(object weights, int nweight, int **iweight):
 *     if weights is None:             # <<<<<<<<<<<<<<
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":38
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 *     if weights is __UNWEIGHTED__:             # <<<<<<<<<<<<<<
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 */
  __pyx_t_2 = (__pyx_v_weights == __pyx_v_6mpi4py_3MPI___UNWEIGHTED__);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/commimpl.pxi":39
 *         return None
 *     if weights is __UNWEIGHTED__:
 *         iweight[0] = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         return None
 *     if weights is __WEIGHTS_EMPTY__:
 */
    (__pyx_v_iweight[0]) = MPI_UNWEIGHTED;

    /* "mpi4py/MPI/commimpl.pxi":40
 *     if weights is __UNWEIGHTED__:
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None             # <<<<<<<<<<<<<<
 *     if weights is __WEIGHTS_EMPTY__:
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/commimpl.pxi":38
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 *     if weights is __UNWEIGHTED__:             # <<<<<<<<<<<<<<
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":41
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 *     if weights is __WEIGHTS_EMPTY__:             # <<<<<<<<<<<<<<
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")
 *         iweight[0] = MPI_WEIGHTS_EMPTY
 */
  __pyx_t_1 = (__pyx_v_weights == __pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/commimpl.pxi":42
 *         return None
 *     if weights is __WEIGHTS_EMPTY__:
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")             # <<<<<<<<<<<<<<
 *         iweight[0] = MPI_WEIGHTS_EMPTY
 *         return None
 */
    __pyx_t_2 = ((__pyx_v_nweight > 0) != 0);
    if (unlikely(__pyx_t_2)) {
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 42, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(3, 42, __pyx_L1_error)
    }

    /* "mpi4py/MPI/commimpl.pxi":43
 *     if weights is __WEIGHTS_EMPTY__:
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")
 *         iweight[0] = MPI_WEIGHTS_EMPTY             # <<<<<<<<<<<<<<
 *         return None
 *     return chkarray(weights, nweight, iweight)
 */
    (__pyx_v_iweight[0]) = MPI_WEIGHTS_EMPTY;

    /* "mpi4py/MPI/commimpl.pxi":44
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")
 *         iweight[0] = MPI_WEIGHTS_EMPTY
 *         return None             # <<<<<<<<<<<<<<
 *     return chkarray(weights, nweight, iweight)
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/commimpl.pxi":41
 *         iweight[0] = MPI_UNWEIGHTED
 *         return None
 *     if weights is __WEIGHTS_EMPTY__:             # <<<<<<<<<<<<<<
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")
 *         iweight[0] = MPI_WEIGHTS_EMPTY
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":45
 *         iweight[0] = MPI_WEIGHTS_EMPTY
 *         return None
 *     return chkarray(weights, nweight, iweight)             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_weights, __pyx_v_nweight, __pyx_v_iweight); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":34
 * cdef object __WEIGHTS_EMPTY__ = <MPI_Aint>MPI_WEIGHTS_EMPTY
 * 
 * cdef object asarray_weights(object weights, int nweight, int **iweight):             # <<<<<<<<<<<<<<
 *     if weights is None:
 *         iweight[0] = MPI_UNWEIGHTED
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.asarray_weights", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":49
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int comm_neighbors_count(MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                                      int *incoming,
 *                                      int *outgoing,
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_comm_neighbors_count(MPI_Comm __pyx_v_comm, int *__pyx_v_incoming, int *__pyx_v_outgoing) {
  int __pyx_v_topo;
  int __pyx_v_size;
  int __pyx_v_ndims;
  int __pyx_v_rank;
  int __pyx_v_nneighbors;
  int __pyx_v_indegree;
  int __pyx_v_outdegree;
  int __pyx_v_weighted;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("comm_neighbors_count", 0);

  /* "mpi4py/MPI/commimpl.pxi":53
 *                                      int *outgoing,
 *                                      ) except -1:
 *     cdef int topo = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef int size=0, ndims=0, rank=0, nneighbors=0
 *     cdef int indegree=0, outdegree=0, weighted=0
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/commimpl.pxi":54
 *                                      ) except -1:
 *     cdef int topo = MPI_UNDEFINED
 *     cdef int size=0, ndims=0, rank=0, nneighbors=0             # <<<<<<<<<<<<<<
 *     cdef int indegree=0, outdegree=0, weighted=0
 *     CHKERR( MPI_Topo_test(comm, &topo) )
 */
  __pyx_v_size = 0;
  __pyx_v_ndims = 0;
  __pyx_v_rank = 0;
  __pyx_v_nneighbors = 0;

  /* "mpi4py/MPI/commimpl.pxi":55
 *     cdef int topo = MPI_UNDEFINED
 *     cdef int size=0, ndims=0, rank=0, nneighbors=0
 *     cdef int indegree=0, outdegree=0, weighted=0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Topo_test(comm, &topo) )
 *     if topo == MPI_UNDEFINED: # XXX
 */
  __pyx_v_indegree = 0;
  __pyx_v_outdegree = 0;
  __pyx_v_weighted = 0;

  /* "mpi4py/MPI/commimpl.pxi":56
 *     cdef int size=0, ndims=0, rank=0, nneighbors=0
 *     cdef int indegree=0, outdegree=0, weighted=0
 *     CHKERR( MPI_Topo_test(comm, &topo) )             # <<<<<<<<<<<<<<
 *     if topo == MPI_UNDEFINED: # XXX
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_comm, (&__pyx_v_topo))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 56, __pyx_L1_error)

  /* "mpi4py/MPI/commimpl.pxi":57
 *     cdef int indegree=0, outdegree=0, weighted=0
 *     CHKERR( MPI_Topo_test(comm, &topo) )
 *     if topo == MPI_UNDEFINED: # XXX             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         indegree = outdegree = size
 */
  __pyx_t_2 = ((__pyx_v_topo == MPI_UNDEFINED) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/commimpl.pxi":58
 *     CHKERR( MPI_Topo_test(comm, &topo) )
 *     if topo == MPI_UNDEFINED: # XXX
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         indegree = outdegree = size
 *     elif topo == MPI_CART:
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 58, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":59
 *     if topo == MPI_UNDEFINED: # XXX
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         indegree = outdegree = size             # <<<<<<<<<<<<<<
 *     elif topo == MPI_CART:
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )
 */
    __pyx_v_indegree = __pyx_v_size;
    __pyx_v_outdegree = __pyx_v_size;

    /* "mpi4py/MPI/commimpl.pxi":57
 *     cdef int indegree=0, outdegree=0, weighted=0
 *     CHKERR( MPI_Topo_test(comm, &topo) )
 *     if topo == MPI_UNDEFINED: # XXX             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         indegree = outdegree = size
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/commimpl.pxi":60
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         indegree = outdegree = size
 *     elif topo == MPI_CART:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )
 *         indegree = outdegree = <int>2*ndims
 */
  __pyx_t_2 = ((__pyx_v_topo == MPI_CART) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/commimpl.pxi":61
 *         indegree = outdegree = size
 *     elif topo == MPI_CART:
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )             # <<<<<<<<<<<<<<
 *         indegree = outdegree = <int>2*ndims
 *     elif topo == MPI_GRAPH:
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cartdim_get(__pyx_v_comm, (&__pyx_v_ndims))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 61, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":62
 *     elif topo == MPI_CART:
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )
 *         indegree = outdegree = <int>2*ndims             # <<<<<<<<<<<<<<
 *     elif topo == MPI_GRAPH:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 */
    __pyx_t_1 = (((int)2) * __pyx_v_ndims);
    __pyx_v_indegree = __pyx_t_1;
    __pyx_v_outdegree = __pyx_t_1;

    /* "mpi4py/MPI/commimpl.pxi":60
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         indegree = outdegree = size
 *     elif topo == MPI_CART:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )
 *         indegree = outdegree = <int>2*ndims
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/commimpl.pxi":63
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )
 *         indegree = outdegree = <int>2*ndims
 *     elif topo == MPI_GRAPH:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         CHKERR( MPI_Graph_neighbors_count(
 */
  __pyx_t_2 = ((__pyx_v_topo == MPI_GRAPH) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/commimpl.pxi":64
 *         indegree = outdegree = <int>2*ndims
 *     elif topo == MPI_GRAPH:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graph_neighbors_count(
 *                 comm, rank, &nneighbors) )
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 64, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":65
 *     elif topo == MPI_GRAPH:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         CHKERR( MPI_Graph_neighbors_count(             # <<<<<<<<<<<<<<
 *                 comm, rank, &nneighbors) )
 *         indegree = outdegree = nneighbors
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_neighbors_count(__pyx_v_comm, __pyx_v_rank, (&__pyx_v_nneighbors))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 65, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":67
 *         CHKERR( MPI_Graph_neighbors_count(
 *                 comm, rank, &nneighbors) )
 *         indegree = outdegree = nneighbors             # <<<<<<<<<<<<<<
 *     elif topo == MPI_DIST_GRAPH:
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 */
    __pyx_v_indegree = __pyx_v_nneighbors;
    __pyx_v_outdegree = __pyx_v_nneighbors;

    /* "mpi4py/MPI/commimpl.pxi":63
 *         CHKERR( MPI_Cartdim_get(comm, &ndims) )
 *         indegree = outdegree = <int>2*ndims
 *     elif topo == MPI_GRAPH:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         CHKERR( MPI_Graph_neighbors_count(
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/commimpl.pxi":68
 *                 comm, rank, &nneighbors) )
 *         indegree = outdegree = nneighbors
 *     elif topo == MPI_DIST_GRAPH:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 *                 comm, &indegree, &outdegree, &weighted) )
 */
  __pyx_t_2 = ((__pyx_v_topo == MPI_DIST_GRAPH) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/commimpl.pxi":69
 *         indegree = outdegree = nneighbors
 *     elif topo == MPI_DIST_GRAPH:
 *         CHKERR( MPI_Dist_graph_neighbors_count(             # <<<<<<<<<<<<<<
 *                 comm, &indegree, &outdegree, &weighted) )
 *     if incoming != NULL: incoming[0] = indegree
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dist_graph_neighbors_count(__pyx_v_comm, (&__pyx_v_indegree), (&__pyx_v_outdegree), (&__pyx_v_weighted))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 69, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":68
 *                 comm, rank, &nneighbors) )
 *         indegree = outdegree = nneighbors
 *     elif topo == MPI_DIST_GRAPH:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 *                 comm, &indegree, &outdegree, &weighted) )
 */
  }
  __pyx_L3:;

  /* "mpi4py/MPI/commimpl.pxi":71
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 *                 comm, &indegree, &outdegree, &weighted) )
 *     if incoming != NULL: incoming[0] = indegree             # <<<<<<<<<<<<<<
 *     if outgoing != NULL: outgoing[0] = outdegree
 *     return 0
 */
  __pyx_t_2 = ((__pyx_v_incoming != NULL) != 0);
  if (__pyx_t_2) {
    (__pyx_v_incoming[0]) = __pyx_v_indegree;
  }

  /* "mpi4py/MPI/commimpl.pxi":72
 *                 comm, &indegree, &outdegree, &weighted) )
 *     if incoming != NULL: incoming[0] = indegree
 *     if outgoing != NULL: outgoing[0] = outdegree             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_2 = ((__pyx_v_outgoing != NULL) != 0);
  if (__pyx_t_2) {
    (__pyx_v_outgoing[0]) = __pyx_v_outdegree;
  }

  /* "mpi4py/MPI/commimpl.pxi":73
 *     if incoming != NULL: incoming[0] = indegree
 *     if outgoing != NULL: outgoing[0] = outdegree
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":49
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int comm_neighbors_count(MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                                      int *incoming,
 *                                      int *outgoing,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.comm_neighbors_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":92
 * cdef dict lock_registry = {}
 * 
 * cdef inline int lock_free_cb(MPI_Comm comm) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     try: del lock_registry[<Py_uintptr_t>comm]
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_lock_free_cb(MPI_Comm __pyx_v_comm) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("lock_free_cb", 0);

  /* "mpi4py/MPI/commimpl.pxi":94
 * cdef inline int lock_free_cb(MPI_Comm comm) \
 *     except MPI_ERR_UNKNOWN with gil:
 *     try: del lock_registry[<Py_uintptr_t>comm]             # <<<<<<<<<<<<<<
 *     except KeyError: pass
 *     return MPI_SUCCESS
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {
      if (unlikely(__pyx_v_6mpi4py_3MPI_lock_registry == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(3, 94, __pyx_L3_error)
      }
      __pyx_t_4 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)__pyx_v_comm)); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 94, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(PyDict_DelItem(__pyx_v_6mpi4py_3MPI_lock_registry, __pyx_t_4) < 0)) __PYX_ERR(3, 94, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/commimpl.pxi":95
 *     except MPI_ERR_UNKNOWN with gil:
 *     try: del lock_registry[<Py_uintptr_t>comm]
 *     except KeyError: pass             # <<<<<<<<<<<<<<
 *     return MPI_SUCCESS
 * 
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_5) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/commimpl.pxi":94
 * cdef inline int lock_free_cb(MPI_Comm comm) \
 *     except MPI_ERR_UNKNOWN with gil:
 *     try: del lock_registry[<Py_uintptr_t>comm]             # <<<<<<<<<<<<<<
 *     except KeyError: pass
 *     return MPI_SUCCESS
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/commimpl.pxi":96
 *     try: del lock_registry[<Py_uintptr_t>comm]
 *     except KeyError: pass
 *     return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 * @cython.callspec("MPIAPI")
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":92
 * cdef dict lock_registry = {}
 * 
 * cdef inline int lock_free_cb(MPI_Comm comm) \             # <<<<<<<<<<<<<<
 *     except MPI_ERR_UNKNOWN with gil:
 *     try: del lock_registry[<Py_uintptr_t>comm]
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.lock_free_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":99
 * 
 * @cython.callspec("MPIAPI")
 * cdef int lock_free_fn(MPI_Comm comm, int keyval,             # <<<<<<<<<<<<<<
 *                       void *attrval, void *xstate) nogil:
 *     if comm == MPI_COMM_SELF:
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_lock_free_fn(MPI_Comm __pyx_v_comm, CYTHON_UNUSED int __pyx_v_keyval, CYTHON_UNUSED void *__pyx_v_attrval, CYTHON_UNUSED void *__pyx_v_xstate) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/commimpl.pxi":101
 * cdef int lock_free_fn(MPI_Comm comm, int keyval,
 *                       void *attrval, void *xstate) nogil:
 *     if comm == MPI_COMM_SELF:             # <<<<<<<<<<<<<<
 *         return MPI_Comm_free_keyval(&lock_keyval)
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_SELF) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/commimpl.pxi":102
 *                       void *attrval, void *xstate) nogil:
 *     if comm == MPI_COMM_SELF:
 *         return MPI_Comm_free_keyval(&lock_keyval)             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_Comm_free_keyval((&__pyx_v_6mpi4py_3MPI_lock_keyval));
    goto __pyx_L0;

    /* "mpi4py/MPI/commimpl.pxi":101
 * cdef int lock_free_fn(MPI_Comm comm, int keyval,
 *                       void *attrval, void *xstate) nogil:
 *     if comm == MPI_COMM_SELF:             # <<<<<<<<<<<<<<
 *         return MPI_Comm_free_keyval(&lock_keyval)
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":103
 *     if comm == MPI_COMM_SELF:
 *         return MPI_Comm_free_keyval(&lock_keyval)
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     if <void*>lock_registry == NULL:
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/commimpl.pxi":104
 *         return MPI_Comm_free_keyval(&lock_keyval)
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     if <void*>lock_registry == NULL:
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/commimpl.pxi":103
 *     if comm == MPI_COMM_SELF:
 *         return MPI_Comm_free_keyval(&lock_keyval)
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     if <void*>lock_registry == NULL:
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":105
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     if <void*>lock_registry == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return lock_free_cb(comm)
 */
  __pyx_t_1 = ((((void *)__pyx_v_6mpi4py_3MPI_lock_registry) == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/commimpl.pxi":106
 *         return MPI_SUCCESS
 *     if <void*>lock_registry == NULL:
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return lock_free_cb(comm)
 * 
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/commimpl.pxi":105
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     if <void*>lock_registry == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return lock_free_cb(comm)
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":107
 *     if <void*>lock_registry == NULL:
 *         return MPI_SUCCESS
 *     return lock_free_cb(comm)             # <<<<<<<<<<<<<<
 * 
 * cdef inline dict PyMPI_Lock_table(MPI_Comm comm):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_lock_free_cb(__pyx_v_comm); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(3, 107, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":99
 * 
 * @cython.callspec("MPIAPI")
 * cdef int lock_free_fn(MPI_Comm comm, int keyval,             # <<<<<<<<<<<<<<
 *                       void *attrval, void *xstate) nogil:
 *     if comm == MPI_COMM_SELF:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.lock_free_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":109
 *     return lock_free_cb(comm)
 * 
 * cdef inline dict PyMPI_Lock_table(MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef dict table
 *     cdef int  found = 0
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_Lock_table(MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_v_table = 0;
  int __pyx_v_found;
  void *__pyx_v_attrval;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_Lock_table", 0);

  /* "mpi4py/MPI/commimpl.pxi":111
 * cdef inline dict PyMPI_Lock_table(MPI_Comm comm):
 *     cdef dict table
 *     cdef int  found = 0             # <<<<<<<<<<<<<<
 *     cdef void *attrval = NULL
 *     if lock_keyval == MPI_KEYVAL_INVALID:
 */
  __pyx_v_found = 0;

  /* "mpi4py/MPI/commimpl.pxi":112
 *     cdef dict table
 *     cdef int  found = 0
 *     cdef void *attrval = NULL             # <<<<<<<<<<<<<<
 *     if lock_keyval == MPI_KEYVAL_INVALID:
 *         CHKERR( MPI_Comm_create_keyval(
 */
  __pyx_v_attrval = NULL;

  /* "mpi4py/MPI/commimpl.pxi":113
 *     cdef int  found = 0
 *     cdef void *attrval = NULL
 *     if lock_keyval == MPI_KEYVAL_INVALID:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_create_keyval(
 *             MPI_COMM_NULL_COPY_FN, lock_free_fn, &lock_keyval, NULL) )
 */
  __pyx_t_1 = ((__pyx_v_6mpi4py_3MPI_lock_keyval == MPI_KEYVAL_INVALID) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/commimpl.pxi":114
 *     cdef void *attrval = NULL
 *     if lock_keyval == MPI_KEYVAL_INVALID:
 *         CHKERR( MPI_Comm_create_keyval(             # <<<<<<<<<<<<<<
 *             MPI_COMM_NULL_COPY_FN, lock_free_fn, &lock_keyval, NULL) )
 *         lock_registry[<Py_uintptr_t>MPI_COMM_SELF] = table = {}
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_create_keyval(MPI_COMM_NULL_COPY_FN, __pyx_f_6mpi4py_3MPI_lock_free_fn, (&__pyx_v_6mpi4py_3MPI_lock_keyval), NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 114, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":116
 *         CHKERR( MPI_Comm_create_keyval(
 *             MPI_COMM_NULL_COPY_FN, lock_free_fn, &lock_keyval, NULL) )
 *         lock_registry[<Py_uintptr_t>MPI_COMM_SELF] = table = {}             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_set_attr(MPI_COMM_SELF, lock_keyval, <void*> table) )
 *     CHKERR( MPI_Comm_get_attr(comm, lock_keyval, &attrval, &found) )
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__pyx_v_6mpi4py_3MPI_lock_registry == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(3, 116, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)MPI_COMM_SELF)); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(PyDict_SetItem(__pyx_v_6mpi4py_3MPI_lock_registry, __pyx_t_4, __pyx_t_3) < 0)) __PYX_ERR(3, 116, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_table = __pyx_t_3;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/commimpl.pxi":117
 *             MPI_COMM_NULL_COPY_FN, lock_free_fn, &lock_keyval, NULL) )
 *         lock_registry[<Py_uintptr_t>MPI_COMM_SELF] = table = {}
 *         CHKERR( MPI_Comm_set_attr(MPI_COMM_SELF, lock_keyval, <void*> table) )             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_get_attr(comm, lock_keyval, &attrval, &found) )
 *     if not found:
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_attr(MPI_COMM_SELF, __pyx_v_6mpi4py_3MPI_lock_keyval, ((void *)__pyx_v_table))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 117, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":113
 *     cdef int  found = 0
 *     cdef void *attrval = NULL
 *     if lock_keyval == MPI_KEYVAL_INVALID:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_create_keyval(
 *             MPI_COMM_NULL_COPY_FN, lock_free_fn, &lock_keyval, NULL) )
 */
  }

  /* "mpi4py/MPI/commimpl.pxi":118
 *         lock_registry[<Py_uintptr_t>MPI_COMM_SELF] = table = {}
 *         CHKERR( MPI_Comm_set_attr(MPI_COMM_SELF, lock_keyval, <void*> table) )
 *     CHKERR( MPI_Comm_get_attr(comm, lock_keyval, &attrval, &found) )             # <<<<<<<<<<<<<<
 *     if not found:
 *         lock_registry[<Py_uintptr_t>comm] = table = {}
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_get_attr(__pyx_v_comm, __pyx_v_6mpi4py_3MPI_lock_keyval, (&__pyx_v_attrval), (&__pyx_v_found))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 118, __pyx_L1_error)

  /* "mpi4py/MPI/commimpl.pxi":119
 *         CHKERR( MPI_Comm_set_attr(MPI_COMM_SELF, lock_keyval, <void*> table) )
 *     CHKERR( MPI_Comm_get_attr(comm, lock_keyval, &attrval, &found) )
 *     if not found:             # <<<<<<<<<<<<<<
 *         lock_registry[<Py_uintptr_t>comm] = table = {}
 *         CHKERR( MPI_Comm_set_attr(comm, lock_keyval, <void*> table) )
 */
  __pyx_t_1 = ((!(__pyx_v_found != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/commimpl.pxi":120
 *     CHKERR( MPI_Comm_get_attr(comm, lock_keyval, &attrval, &found) )
 *     if not found:
 *         lock_registry[<Py_uintptr_t>comm] = table = {}             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_set_attr(comm, lock_keyval, <void*> table) )
 *     else:
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__pyx_v_6mpi4py_3MPI_lock_registry == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(3, 120, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)__pyx_v_comm)); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(PyDict_SetItem(__pyx_v_6mpi4py_3MPI_lock_registry, __pyx_t_4, __pyx_t_3) < 0)) __PYX_ERR(3, 120, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_table, __pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/commimpl.pxi":121
 *     if not found:
 *         lock_registry[<Py_uintptr_t>comm] = table = {}
 *         CHKERR( MPI_Comm_set_attr(comm, lock_keyval, <void*> table) )             # <<<<<<<<<<<<<<
 *     else:
 *         if PYPY: table = lock_registry[<Py_uintptr_t>comm]
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_attr(__pyx_v_comm, __pyx_v_6mpi4py_3MPI_lock_keyval, ((void *)__pyx_v_table))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 121, __pyx_L1_error)

    /* "mpi4py/MPI/commimpl.pxi":119
 *         CHKERR( MPI_Comm_set_attr(MPI_COMM_SELF, lock_keyval, <void*> table) )
 *     CHKERR( MPI_Comm_get_attr(comm, lock_keyval, &attrval, &found) )
 *     if not found:             # <<<<<<<<<<<<<<
 *         lock_registry[<Py_uintptr_t>comm] = table = {}
 *         CHKERR( MPI_Comm_set_attr(comm, lock_keyval, <void*> table) )
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/commimpl.pxi":123
 *         CHKERR( MPI_Comm_set_attr(comm, lock_keyval, <void*> table) )
 *     else:
 *         if PYPY: table = lock_registry[<Py_uintptr_t>comm]             # <<<<<<<<<<<<<<
 *         else:    table = <dict> attrval
 *     return table
 */
  /*else*/ {
    if (PyMPI_RUNTIME_PYPY) {
      if (unlikely(__pyx_v_6mpi4py_3MPI_lock_registry == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(3, 123, __pyx_L1_error)
      }
      __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)__pyx_v_comm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 123, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_6mpi4py_3MPI_lock_registry, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 123, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(PyDict_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(3, 123, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_table, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/commimpl.pxi":124
 *     else:
 *         if PYPY: table = lock_registry[<Py_uintptr_t>comm]
 *         else:    table = <dict> attrval             # <<<<<<<<<<<<<<
 *     return table
 * 
 */
    /*else*/ {
      __pyx_t_4 = ((PyObject *)__pyx_v_attrval);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_XDECREF_SET(__pyx_v_table, ((PyObject*)__pyx_t_4));
      __pyx_t_4 = 0;
    }
    __pyx_L5:;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/commimpl.pxi":125
 *         if PYPY: table = lock_registry[<Py_uintptr_t>comm]
 *         else:    table = <dict> attrval
 *     return table             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyMPI_Lock(MPI_Comm comm, object key):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_table);
  __pyx_r = __pyx_v_table;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":109
 *     return lock_free_cb(comm)
 * 
 * cdef inline dict PyMPI_Lock_table(MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef dict table
 *     cdef int  found = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Lock_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":127
 *     return table
 * 
 * cdef inline object PyMPI_Lock(MPI_Comm comm, object key):             # <<<<<<<<<<<<<<
 *     cdef dict   table = PyMPI_Lock_table(comm)
 *     cdef object lock
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_Lock(MPI_Comm __pyx_v_comm, PyObject *__pyx_v_key) {
  PyObject *__pyx_v_table = 0;
  PyObject *__pyx_v_lock = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_Lock", 0);

  /* "mpi4py/MPI/commimpl.pxi":128
 * 
 * cdef inline object PyMPI_Lock(MPI_Comm comm, object key):
 *     cdef dict   table = PyMPI_Lock_table(comm)             # <<<<<<<<<<<<<<
 *     cdef object lock
 *     try:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock_table(__pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_table = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/commimpl.pxi":130
 *     cdef dict   table = PyMPI_Lock_table(comm)
 *     cdef object lock
 *     try:             # <<<<<<<<<<<<<<
 *         lock = table[key]
 *     except KeyError:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/commimpl.pxi":131
 *     cdef object lock
 *     try:
 *         lock = table[key]             # <<<<<<<<<<<<<<
 *     except KeyError:
 *         lock = table[key] = allocate_lock()
 */
      if (unlikely(__pyx_v_table == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(3, 131, __pyx_L3_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_table, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 131, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_v_lock = __pyx_t_1;
      __pyx_t_1 = 0;

      /* "mpi4py/MPI/commimpl.pxi":130
 *     cdef dict   table = PyMPI_Lock_table(comm)
 *     cdef object lock
 *     try:             # <<<<<<<<<<<<<<
 *         lock = table[key]
 *     except KeyError:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/commimpl.pxi":132
 *     try:
 *         lock = table[key]
 *     except KeyError:             # <<<<<<<<<<<<<<
 *         lock = table[key] = allocate_lock()
 *     return lock
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(3, 132, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);

      /* "mpi4py/MPI/commimpl.pxi":133
 *         lock = table[key]
 *     except KeyError:
 *         lock = table[key] = allocate_lock()             # <<<<<<<<<<<<<<
 *     return lock
 * 
 */
      __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_allocate_lock);
      __pyx_t_9 = __pyx_v_6mpi4py_3MPI_allocate_lock; __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 133, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_v_lock, __pyx_t_8);
      if (unlikely(__pyx_v_table == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(3, 133, __pyx_L5_except_error)
      }
      if (unlikely(PyDict_SetItem(__pyx_v_table, __pyx_v_key, __pyx_t_8) < 0)) __PYX_ERR(3, 133, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/commimpl.pxi":130
 *     cdef dict   table = PyMPI_Lock_table(comm)
 *     cdef object lock
 *     try:             # <<<<<<<<<<<<<<
 *         lock = table[key]
 *     except KeyError:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/commimpl.pxi":134
 *     except KeyError:
 *         lock = table[key] = allocate_lock()
 *     return lock             # <<<<<<<<<<<<<<
 * 
 * def _lock_table(Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_lock);
  __pyx_r = __pyx_v_lock;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":127
 *     return table
 * 
 * cdef inline object PyMPI_Lock(MPI_Comm comm, object key):             # <<<<<<<<<<<<<<
 *     cdef dict   table = PyMPI_Lock_table(comm)
 *     cdef object lock
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_XDECREF(__pyx_v_lock);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/commimpl.pxi":136
 *     return lock
 * 
 * def _lock_table(Comm comm):             # <<<<<<<<<<<<<<
 *     "Internal communicator lock table"
 *     return PyMPI_Lock_table(comm.ob_mpi)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3_lock_table(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2_lock_table[] = "_lock_table(Comm comm)\nInternal communicator lock table";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_3_lock_table = {"_lock_table", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3_lock_table, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2_lock_table};
static PyObject *__pyx_pw_6mpi4py_3MPI_3_lock_table(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_lock_table (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_lock_table") < 0)) __PYX_ERR(3, 136, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_lock_table", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 136, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._lock_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(3, 136, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2_lock_table(__pyx_self, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2_lock_table(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPICommObject *__pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_lock_table", 0);

  /* "mpi4py/MPI/commimpl.pxi":138
 * def _lock_table(Comm comm):
 *     "Internal communicator lock table"
 *     return PyMPI_Lock_table(comm.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock_table(__pyx_v_comm->ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/commimpl.pxi":136
 *     return lock
 * 
 * def _lock_table(Comm comm):             # <<<<<<<<<<<<<<
 *     "Internal communicator lock table"
 *     return PyMPI_Lock_table(comm.ob_mpi)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._lock_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":246
 * include "commimpl.pxi"
 * 
 * cdef inline Comm new_Comm(MPI_Comm ob):             # <<<<<<<<<<<<<<
 *     cdef Comm comm = <Comm>Comm.__new__(Comm)
 *     comm.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPICommObject *__pyx_f_6mpi4py_3MPI_new_Comm(MPI_Comm __pyx_v_ob) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  struct PyMPICommObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Comm", 0);

  /* "mpi4py/MPI/helpers.pxi":247
 * 
 * cdef inline Comm new_Comm(MPI_Comm ob):
 *     cdef Comm comm = <Comm>Comm.__new__(Comm)             # <<<<<<<<<<<<<<
 *     comm.ob_mpi = ob
 *     return comm
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Comm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Comm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 247, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":248
 * cdef inline Comm new_Comm(MPI_Comm ob):
 *     cdef Comm comm = <Comm>Comm.__new__(Comm)
 *     comm.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return comm
 * 
 */
  __pyx_v_comm->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":249
 *     cdef Comm comm = <Comm>Comm.__new__(Comm)
 *     comm.ob_mpi = ob
 *     return comm             # <<<<<<<<<<<<<<
 * 
 * cdef inline Intracomm new_Intracomm(MPI_Comm ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = __pyx_v_comm;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":246
 * include "commimpl.pxi"
 * 
 * cdef inline Comm new_Comm(MPI_Comm ob):             # <<<<<<<<<<<<<<
 *     cdef Comm comm = <Comm>Comm.__new__(Comm)
 *     comm.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Comm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":251
 *     return comm
 * 
 * cdef inline Intracomm new_Intracomm(MPI_Comm ob):             # <<<<<<<<<<<<<<
 *     cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *     comm.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIIntracommObject *__pyx_f_6mpi4py_3MPI_new_Intracomm(MPI_Comm __pyx_v_ob) {
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  struct PyMPIIntracommObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Intracomm", 0);

  /* "mpi4py/MPI/helpers.pxi":252
 * 
 * cdef inline Intracomm new_Intracomm(MPI_Comm ob):
 *     cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)             # <<<<<<<<<<<<<<
 *     comm.ob_mpi = ob
 *     return comm
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intracomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 252, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIIntracommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":253
 * cdef inline Intracomm new_Intracomm(MPI_Comm ob):
 *     cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *     comm.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return comm
 * 
 */
  __pyx_v_comm->__pyx_base.ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":254
 *     cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *     comm.ob_mpi = ob
 *     return comm             # <<<<<<<<<<<<<<
 * 
 * cdef inline Intercomm new_Intercomm(MPI_Comm ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = __pyx_v_comm;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":251
 *     return comm
 * 
 * cdef inline Intracomm new_Intracomm(MPI_Comm ob):             # <<<<<<<<<<<<<<
 *     cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *     comm.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Intracomm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":256
 *     return comm
 * 
 * cdef inline Intercomm new_Intercomm(MPI_Comm ob):             # <<<<<<<<<<<<<<
 *     cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *     comm.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIIntercommObject *__pyx_f_6mpi4py_3MPI_new_Intercomm(MPI_Comm __pyx_v_ob) {
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  struct PyMPIIntercommObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Intercomm", 0);

  /* "mpi4py/MPI/helpers.pxi":257
 * 
 * cdef inline Intercomm new_Intercomm(MPI_Comm ob):
 *     cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *     comm.ob_mpi = ob
 *     return comm
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 257, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":258
 * cdef inline Intercomm new_Intercomm(MPI_Comm ob):
 *     cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *     comm.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return comm
 * 
 */
  __pyx_v_comm->__pyx_base.ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":259
 *     cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *     comm.ob_mpi = ob
 *     return comm             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Comm(MPI_Comm* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = __pyx_v_comm;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":256
 *     return comm
 * 
 * cdef inline Intercomm new_Intercomm(MPI_Comm ob):             # <<<<<<<<<<<<<<
 *     cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *     comm.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Intercomm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":261
 *     return comm
 * 
 * cdef inline int del_Comm(MPI_Comm* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL           : return 0
 *     if ob[0] == MPI_COMM_NULL  : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Comm(MPI_Comm *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Comm", 0);

  /* "mpi4py/MPI/helpers.pxi":262
 * 
 * cdef inline int del_Comm(MPI_Comm* ob):
 *     if ob    == NULL           : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMM_NULL  : return 0
 *     if ob[0] == MPI_COMM_SELF  : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":263
 * cdef inline int del_Comm(MPI_Comm* ob):
 *     if ob    == NULL           : return 0
 *     if ob[0] == MPI_COMM_NULL  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMM_SELF  : return 0
 *     if ob[0] == MPI_COMM_WORLD : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":264
 *     if ob    == NULL           : return 0
 *     if ob[0] == MPI_COMM_NULL  : return 0
 *     if ob[0] == MPI_COMM_SELF  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_COMM_WORLD : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMM_SELF) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":265
 *     if ob[0] == MPI_COMM_NULL  : return 0
 *     if ob[0] == MPI_COMM_SELF  : return 0
 *     if ob[0] == MPI_COMM_WORLD : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_COMM_WORLD) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":267
 *     if ob[0] == MPI_COMM_WORLD : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Comm_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":268
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Comm_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Comm_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":261
 *     return comm
 * 
 * cdef inline int del_Comm(MPI_Comm* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL           : return 0
 *     if ob[0] == MPI_COMM_NULL  : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/winimpl.pxi":3
 * #------------------------------------------------------------------------------
 * 
 * cdef inline int win_get_base(MPI_Win win,void **base) except -1:             # <<<<<<<<<<<<<<
 *     cdef int flag = 0
 *     cdef void *attr = NULL
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_get_base(MPI_Win __pyx_v_win, void **__pyx_v_base) {
  int __pyx_v_flag;
  void *__pyx_v_attr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("win_get_base", 0);

  /* "mpi4py/MPI/winimpl.pxi":4
 * 
 * cdef inline int win_get_base(MPI_Win win,void **base) except -1:
 *     cdef int flag = 0             # <<<<<<<<<<<<<<
 *     cdef void *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_BASE, &attr, &flag) )
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/winimpl.pxi":5
 * cdef inline int win_get_base(MPI_Win win,void **base) except -1:
 *     cdef int flag = 0
 *     cdef void *attr = NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_BASE, &attr, &flag) )
 *     base[0] = attr if flag and attr != NULL else NULL
 */
  __pyx_v_attr = NULL;

  /* "mpi4py/MPI/winimpl.pxi":6
 *     cdef int flag = 0
 *     cdef void *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_BASE, &attr, &flag) )             # <<<<<<<<<<<<<<
 *     base[0] = attr if flag and attr != NULL else NULL
 *     return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_attr(__pyx_v_win, MPI_WIN_BASE, (&__pyx_v_attr), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(15, 6, __pyx_L1_error)

  /* "mpi4py/MPI/winimpl.pxi":7
 *     cdef void *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_BASE, &attr, &flag) )
 *     base[0] = attr if flag and attr != NULL else NULL             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_4 = (__pyx_v_flag != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_4 = ((__pyx_v_attr != NULL) != 0);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L3_bool_binop_done:;
  if (__pyx_t_3) {
    __pyx_t_2 = __pyx_v_attr;
  } else {
    __pyx_t_2 = NULL;
  }
  (__pyx_v_base[0]) = __pyx_t_2;

  /* "mpi4py/MPI/winimpl.pxi":8
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_BASE, &attr, &flag) )
 *     base[0] = attr if flag and attr != NULL else NULL
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int win_get_size(MPI_Win win,MPI_Aint *size) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/winimpl.pxi":3
 * #------------------------------------------------------------------------------
 * 
 * cdef inline int win_get_base(MPI_Win win,void **base) except -1:             # <<<<<<<<<<<<<<
 *     cdef int flag = 0
 *     cdef void *attr = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.win_get_base", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/winimpl.pxi":10
 *     return 0
 * 
 * cdef inline int win_get_size(MPI_Win win,MPI_Aint *size) except -1:             # <<<<<<<<<<<<<<
 *     cdef int flag = 0
 *     cdef MPI_Aint *attr = NULL
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_get_size(MPI_Win __pyx_v_win, MPI_Aint *__pyx_v_size) {
  int __pyx_v_flag;
  MPI_Aint *__pyx_v_attr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  MPI_Aint __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("win_get_size", 0);

  /* "mpi4py/MPI/winimpl.pxi":11
 * 
 * cdef inline int win_get_size(MPI_Win win,MPI_Aint *size) except -1:
 *     cdef int flag = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_SIZE, &attr, &flag) )
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/winimpl.pxi":12
 * cdef inline int win_get_size(MPI_Win win,MPI_Aint *size) except -1:
 *     cdef int flag = 0
 *     cdef MPI_Aint *attr = NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_SIZE, &attr, &flag) )
 *     size[0] = attr[0] if flag and attr != NULL else 0
 */
  __pyx_v_attr = NULL;

  /* "mpi4py/MPI/winimpl.pxi":13
 *     cdef int flag = 0
 *     cdef MPI_Aint *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_SIZE, &attr, &flag) )             # <<<<<<<<<<<<<<
 *     size[0] = attr[0] if flag and attr != NULL else 0
 *     return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_attr(__pyx_v_win, MPI_WIN_SIZE, (&__pyx_v_attr), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(15, 13, __pyx_L1_error)

  /* "mpi4py/MPI/winimpl.pxi":14
 *     cdef MPI_Aint *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_SIZE, &attr, &flag) )
 *     size[0] = attr[0] if flag and attr != NULL else 0             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_4 = (__pyx_v_flag != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_4 = ((__pyx_v_attr != NULL) != 0);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L3_bool_binop_done:;
  if (__pyx_t_3) {
    __pyx_t_2 = (__pyx_v_attr[0]);
  } else {
    __pyx_t_2 = 0;
  }
  (__pyx_v_size[0]) = __pyx_t_2;

  /* "mpi4py/MPI/winimpl.pxi":15
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_SIZE, &attr, &flag) )
 *     size[0] = attr[0] if flag and attr != NULL else 0
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int win_get_unit(MPI_Win win,int *disp_unit) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/winimpl.pxi":10
 *     return 0
 * 
 * cdef inline int win_get_size(MPI_Win win,MPI_Aint *size) except -1:             # <<<<<<<<<<<<<<
 *     cdef int flag = 0
 *     cdef MPI_Aint *attr = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.win_get_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/winimpl.pxi":17
 *     return 0
 * 
 * cdef inline int win_get_unit(MPI_Win win,int *disp_unit) except -1:             # <<<<<<<<<<<<<<
 *     cdef int flag  = 0
 *     cdef int *attr = NULL
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_get_unit(MPI_Win __pyx_v_win, int *__pyx_v_disp_unit) {
  int __pyx_v_flag;
  int *__pyx_v_attr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("win_get_unit", 0);

  /* "mpi4py/MPI/winimpl.pxi":18
 * 
 * cdef inline int win_get_unit(MPI_Win win,int *disp_unit) except -1:
 *     cdef int flag  = 0             # <<<<<<<<<<<<<<
 *     cdef int *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_DISP_UNIT, &attr, &flag) )
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/winimpl.pxi":19
 * cdef inline int win_get_unit(MPI_Win win,int *disp_unit) except -1:
 *     cdef int flag  = 0
 *     cdef int *attr = NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_DISP_UNIT, &attr, &flag) )
 *     disp_unit[0] = attr[0] if flag and attr != NULL else 1
 */
  __pyx_v_attr = NULL;

  /* "mpi4py/MPI/winimpl.pxi":20
 *     cdef int flag  = 0
 *     cdef int *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_DISP_UNIT, &attr, &flag) )             # <<<<<<<<<<<<<<
 *     disp_unit[0] = attr[0] if flag and attr != NULL else 1
 *     return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_attr(__pyx_v_win, MPI_WIN_DISP_UNIT, (&__pyx_v_attr), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(15, 20, __pyx_L1_error)

  /* "mpi4py/MPI/winimpl.pxi":21
 *     cdef int *attr = NULL
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_DISP_UNIT, &attr, &flag) )
 *     disp_unit[0] = attr[0] if flag and attr != NULL else 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_3 = (__pyx_v_flag != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_attr != NULL) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L3_bool_binop_done:;
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_attr[0]);
  } else {
    __pyx_t_1 = 1;
  }
  (__pyx_v_disp_unit[0]) = __pyx_t_1;

  /* "mpi4py/MPI/winimpl.pxi":22
 *     CHKERR( MPI_Win_get_attr(win, MPI_WIN_DISP_UNIT, &attr, &flag) )
 *     disp_unit[0] = attr[0] if flag and attr != NULL else 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/winimpl.pxi":17
 *     return 0
 * 
 * cdef inline int win_get_unit(MPI_Win win,int *disp_unit) except -1:             # <<<<<<<<<<<<<<
 *     cdef int flag  = 0
 *     cdef int *attr = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.win_get_unit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":275
 * include "winimpl.pxi"
 * 
 * cdef inline Win new_Win(MPI_Win ob):             # <<<<<<<<<<<<<<
 *     cdef Win win = <Win>Win.__new__(Win)
 *     win.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIWinObject *__pyx_f_6mpi4py_3MPI_new_Win(MPI_Win __pyx_v_ob) {
  struct PyMPIWinObject *__pyx_v_win = 0;
  struct PyMPIWinObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Win", 0);

  /* "mpi4py/MPI/helpers.pxi":276
 * 
 * cdef inline Win new_Win(MPI_Win ob):
 *     cdef Win win = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *     win.ob_mpi = ob
 *     return win
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 276, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_win = ((struct PyMPIWinObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":277
 * cdef inline Win new_Win(MPI_Win ob):
 *     cdef Win win = <Win>Win.__new__(Win)
 *     win.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return win
 * 
 */
  __pyx_v_win->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":278
 *     cdef Win win = <Win>Win.__new__(Win)
 *     win.ob_mpi = ob
 *     return win             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Win(MPI_Win* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_win));
  __pyx_r = __pyx_v_win;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":275
 * include "winimpl.pxi"
 * 
 * cdef inline Win new_Win(MPI_Win ob):             # <<<<<<<<<<<<<<
 *     cdef Win win = <Win>Win.__new__(Win)
 *     win.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Win", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_win);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":280
 *     return win
 * 
 * cdef inline int del_Win(MPI_Win* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL         : return 0
 *     if ob[0] == MPI_WIN_NULL : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Win(MPI_Win *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Win", 0);

  /* "mpi4py/MPI/helpers.pxi":281
 * 
 * cdef inline int del_Win(MPI_Win* ob):
 *     if ob    == NULL         : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_WIN_NULL : return 0
 *     #
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":282
 * cdef inline int del_Win(MPI_Win* ob):
 *     if ob    == NULL         : return 0
 *     if ob[0] == MPI_WIN_NULL : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_WIN_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":284
 *     if ob[0] == MPI_WIN_NULL : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Win_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":285
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Win_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Win_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":280
 *     return win
 * 
 * cdef inline int del_Win(MPI_Win* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL         : return 0
 *     if ob[0] == MPI_WIN_NULL : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":13
 *     cdef object extent_fn
 * 
 *     def __cinit__(self, read_fn, write_fn, extent_fn):             # <<<<<<<<<<<<<<
 *         self.read_fn   = read_fn
 *         self.write_fn  = write_fn
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_10_p_datarep_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_10_p_datarep_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_read_fn = 0;
  PyObject *__pyx_v_write_fn = 0;
  PyObject *__pyx_v_extent_fn = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_read_fn,&__pyx_n_s_write_fn,&__pyx_n_s_extent_fn,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_read_fn)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_write_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 1); __PYX_ERR(16, 13, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_extent_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 2); __PYX_ERR(16, 13, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(16, 13, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_read_fn = values[0];
    __pyx_v_write_fn = values[1];
    __pyx_v_extent_fn = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 13, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_datarep.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10_p_datarep___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_datarep *)__pyx_v_self), __pyx_v_read_fn, __pyx_v_write_fn, __pyx_v_extent_fn);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_10_p_datarep___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, PyObject *__pyx_v_read_fn, PyObject *__pyx_v_write_fn, PyObject *__pyx_v_extent_fn) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/drepimpl.pxi":14
 * 
 *     def __cinit__(self, read_fn, write_fn, extent_fn):
 *         self.read_fn   = read_fn             # <<<<<<<<<<<<<<
 *         self.write_fn  = write_fn
 *         self.extent_fn = extent_fn
 */
  __Pyx_INCREF(__pyx_v_read_fn);
  __Pyx_GIVEREF(__pyx_v_read_fn);
  __Pyx_GOTREF(__pyx_v_self->read_fn);
  __Pyx_DECREF(__pyx_v_self->read_fn);
  __pyx_v_self->read_fn = __pyx_v_read_fn;

  /* "mpi4py/MPI/drepimpl.pxi":15
 *     def __cinit__(self, read_fn, write_fn, extent_fn):
 *         self.read_fn   = read_fn
 *         self.write_fn  = write_fn             # <<<<<<<<<<<<<<
 *         self.extent_fn = extent_fn
 * 
 */
  __Pyx_INCREF(__pyx_v_write_fn);
  __Pyx_GIVEREF(__pyx_v_write_fn);
  __Pyx_GOTREF(__pyx_v_self->write_fn);
  __Pyx_DECREF(__pyx_v_self->write_fn);
  __pyx_v_self->write_fn = __pyx_v_write_fn;

  /* "mpi4py/MPI/drepimpl.pxi":16
 *         self.read_fn   = read_fn
 *         self.write_fn  = write_fn
 *         self.extent_fn = extent_fn             # <<<<<<<<<<<<<<
 * 
 *     cdef int read(self,
 */
  __Pyx_INCREF(__pyx_v_extent_fn);
  __Pyx_GIVEREF(__pyx_v_extent_fn);
  __Pyx_GOTREF(__pyx_v_self->extent_fn);
  __Pyx_DECREF(__pyx_v_self->extent_fn);
  __pyx_v_self->extent_fn = __pyx_v_extent_fn;

  /* "mpi4py/MPI/drepimpl.pxi":13
 *     cdef object extent_fn
 * 
 *     def __cinit__(self, read_fn, write_fn, extent_fn):             # <<<<<<<<<<<<<<
 *         self.read_fn   = read_fn
 *         self.write_fn  = write_fn
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":18
 *         self.extent_fn = extent_fn
 * 
 *     cdef int read(self,             # <<<<<<<<<<<<<<
 *                   void *userbuf,
 *                   MPI_Datatype datatype,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_datarep_read(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position) {
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  int __pyx_v_ierr;
  MPI_Aint __pyx_v_ulen;
  MPI_Aint __pyx_v_flen;
  PyObject *__pyx_v_ubuf = 0;
  PyObject *__pyx_v_fbuf = 0;
  struct PyMPIDatatypeObject *__pyx_v_dtype = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  char const *__pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  __Pyx_RefNannySetupContext("read", 0);

  /* "mpi4py/MPI/drepimpl.pxi":25
 *                   MPI_Offset position,
 *                   ) except -1:
 *         cdef MPI_Aint lb=0, extent=0             # <<<<<<<<<<<<<<
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)
 *         if ierr != MPI_SUCCESS: return ierr
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/drepimpl.pxi":26
 *                   ) except -1:
 *         cdef MPI_Aint lb=0, extent=0
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)             # <<<<<<<<<<<<<<
 *         if ierr != MPI_SUCCESS: return ierr
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 */
  __pyx_v_ierr = MPI_Type_get_extent(__pyx_v_datatype, (&__pyx_v_lb), (&__pyx_v_extent));

  /* "mpi4py/MPI/drepimpl.pxi":27
 *         cdef MPI_Aint lb=0, extent=0
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)
 *         if ierr != MPI_SUCCESS: return ierr             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 */
  __pyx_t_1 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_v_ierr;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/drepimpl.pxi":28
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)
 *         if ierr != MPI_SUCCESS: return ierr
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 *         cdef object ubuf = tomemory(userbuf, ulen)
 */
  __pyx_v_ulen = (((MPI_Aint)(__pyx_v_position + __pyx_v_count)) * __pyx_v_extent);

  /* "mpi4py/MPI/drepimpl.pxi":29
 *         if ierr != MPI_SUCCESS: return ierr
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX             # <<<<<<<<<<<<<<
 *         cdef object ubuf = tomemory(userbuf, ulen)
 *         cdef object fbuf = tomemory(filebuf, flen)
 */
  __pyx_v_flen = ((MPI_Aint)PY_SSIZE_T_MAX);

  /* "mpi4py/MPI/drepimpl.pxi":30
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 *         cdef object ubuf = tomemory(userbuf, ulen)             # <<<<<<<<<<<<<<
 *         cdef object fbuf = tomemory(filebuf, flen)
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_userbuf, __pyx_v_ulen)); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_ubuf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":31
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 *         cdef object ubuf = tomemory(userbuf, ulen)
 *         cdef object fbuf = tomemory(filebuf, flen)             # <<<<<<<<<<<<<<
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_filebuf, __pyx_v_flen)); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_fbuf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":32
 *         cdef object ubuf = tomemory(userbuf, ulen)
 *         cdef object fbuf = tomemory(filebuf, flen)
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         dtype.ob_mpi = datatype
 *         try: self.read_fn(ubuf, dtype, count, fbuf, position)
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 32, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_dtype = ((struct PyMPIDatatypeObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":33
 *         cdef object fbuf = tomemory(filebuf, flen)
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype             # <<<<<<<<<<<<<<
 *         try: self.read_fn(ubuf, dtype, count, fbuf, position)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 */
  __pyx_v_dtype->ob_mpi = __pyx_v_datatype;

  /* "mpi4py/MPI/drepimpl.pxi":34
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype
 *         try: self.read_fn(ubuf, dtype, count, fbuf, position)             # <<<<<<<<<<<<<<
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 *         return MPI_SUCCESS
 */
  /*try:*/ {
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 34, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 34, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_self->read_fn);
    __pyx_t_5 = __pyx_v_self->read_fn; __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_ubuf, ((PyObject *)__pyx_v_dtype), __pyx_t_2, __pyx_v_fbuf, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 34, __pyx_L5_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_ubuf, ((PyObject *)__pyx_v_dtype), __pyx_t_2, __pyx_v_fbuf, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 34, __pyx_L5_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(16, 34, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ubuf);
      __Pyx_GIVEREF(__pyx_v_ubuf);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_ubuf);
      __Pyx_INCREF(((PyObject *)__pyx_v_dtype));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_dtype));
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, ((PyObject *)__pyx_v_dtype));
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_2);
      __Pyx_INCREF(__pyx_v_fbuf);
      __Pyx_GIVEREF(__pyx_v_fbuf);
      PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_7, __pyx_v_fbuf);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 4+__pyx_t_7, __pyx_t_4);
      __pyx_t_2 = 0;
      __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 34, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/drepimpl.pxi":35
 *         dtype.ob_mpi = datatype
 *         try: self.read_fn(ubuf, dtype, count, fbuf, position)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_v_dtype->ob_mpi = MPI_DATATYPE_NULL;
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_7 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        __pyx_v_dtype->ob_mpi = MPI_DATATYPE_NULL;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "mpi4py/MPI/drepimpl.pxi":36
 *         try: self.read_fn(ubuf, dtype, count, fbuf, position)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 *     cdef int write(self,
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":18
 *         self.extent_fn = extent_fn
 * 
 *     cdef int read(self,             # <<<<<<<<<<<<<<
 *                   void *userbuf,
 *                   MPI_Datatype datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mpi4py.MPI._p_datarep.read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ubuf);
  __Pyx_XDECREF(__pyx_v_fbuf);
  __Pyx_XDECREF((PyObject *)__pyx_v_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":38
 *         return MPI_SUCCESS
 * 
 *     cdef int write(self,             # <<<<<<<<<<<<<<
 *                   void *userbuf,
 *                   MPI_Datatype datatype,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_datarep_write(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position) {
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  int __pyx_v_ierr;
  MPI_Aint __pyx_v_ulen;
  MPI_Aint __pyx_v_flen;
  PyObject *__pyx_v_ubuf = 0;
  PyObject *__pyx_v_fbuf = 0;
  struct PyMPIDatatypeObject *__pyx_v_dtype = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  char const *__pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  __Pyx_RefNannySetupContext("write", 0);

  /* "mpi4py/MPI/drepimpl.pxi":45
 *                   MPI_Offset position,
 *                   ) except -1:
 *         cdef MPI_Aint lb=0, extent=0             # <<<<<<<<<<<<<<
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)
 *         if ierr != MPI_SUCCESS: return ierr
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/drepimpl.pxi":46
 *                   ) except -1:
 *         cdef MPI_Aint lb=0, extent=0
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)             # <<<<<<<<<<<<<<
 *         if ierr != MPI_SUCCESS: return ierr
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 */
  __pyx_v_ierr = MPI_Type_get_extent(__pyx_v_datatype, (&__pyx_v_lb), (&__pyx_v_extent));

  /* "mpi4py/MPI/drepimpl.pxi":47
 *         cdef MPI_Aint lb=0, extent=0
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)
 *         if ierr != MPI_SUCCESS: return ierr             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 */
  __pyx_t_1 = ((__pyx_v_ierr != MPI_SUCCESS) != 0);
  if (__pyx_t_1) {
    __pyx_r = __pyx_v_ierr;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/drepimpl.pxi":48
 *         cdef int ierr = MPI_Type_get_extent(datatype, &lb, &extent)
 *         if ierr != MPI_SUCCESS: return ierr
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 *         cdef object ubuf = tomemory(userbuf, ulen)
 */
  __pyx_v_ulen = (((MPI_Aint)(__pyx_v_position + __pyx_v_count)) * __pyx_v_extent);

  /* "mpi4py/MPI/drepimpl.pxi":49
 *         if ierr != MPI_SUCCESS: return ierr
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX             # <<<<<<<<<<<<<<
 *         cdef object ubuf = tomemory(userbuf, ulen)
 *         cdef object fbuf = tomemory(filebuf, flen)
 */
  __pyx_v_flen = ((MPI_Aint)PY_SSIZE_T_MAX);

  /* "mpi4py/MPI/drepimpl.pxi":50
 *         cdef MPI_Aint ulen = <MPI_Aint>(position+count) * extent
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 *         cdef object ubuf = tomemory(userbuf, ulen)             # <<<<<<<<<<<<<<
 *         cdef object fbuf = tomemory(filebuf, flen)
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_userbuf, __pyx_v_ulen)); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_ubuf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":51
 *         cdef MPI_Aint flen = <MPI_Aint>PY_SSIZE_T_MAX # XXX
 *         cdef object ubuf = tomemory(userbuf, ulen)
 *         cdef object fbuf = tomemory(filebuf, flen)             # <<<<<<<<<<<<<<
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_filebuf, __pyx_v_flen)); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_fbuf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":52
 *         cdef object ubuf = tomemory(userbuf, ulen)
 *         cdef object fbuf = tomemory(filebuf, flen)
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         dtype.ob_mpi = datatype
 *         try: self.write_fn(ubuf, dtype, count, fbuf, position)
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 52, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_dtype = ((struct PyMPIDatatypeObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":53
 *         cdef object fbuf = tomemory(filebuf, flen)
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype             # <<<<<<<<<<<<<<
 *         try: self.write_fn(ubuf, dtype, count, fbuf, position)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 */
  __pyx_v_dtype->ob_mpi = __pyx_v_datatype;

  /* "mpi4py/MPI/drepimpl.pxi":54
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype
 *         try: self.write_fn(ubuf, dtype, count, fbuf, position)             # <<<<<<<<<<<<<<
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 *         return MPI_SUCCESS
 */
  /*try:*/ {
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 54, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 54, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_self->write_fn);
    __pyx_t_5 = __pyx_v_self->write_fn; __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_ubuf, ((PyObject *)__pyx_v_dtype), __pyx_t_2, __pyx_v_fbuf, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 54, __pyx_L5_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
      PyObject *__pyx_temp[6] = {__pyx_t_6, __pyx_v_ubuf, ((PyObject *)__pyx_v_dtype), __pyx_t_2, __pyx_v_fbuf, __pyx_t_4};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 5+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 54, __pyx_L5_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(5+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(16, 54, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ubuf);
      __Pyx_GIVEREF(__pyx_v_ubuf);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_v_ubuf);
      __Pyx_INCREF(((PyObject *)__pyx_v_dtype));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_dtype));
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, ((PyObject *)__pyx_v_dtype));
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_2);
      __Pyx_INCREF(__pyx_v_fbuf);
      __Pyx_GIVEREF(__pyx_v_fbuf);
      PyTuple_SET_ITEM(__pyx_t_8, 3+__pyx_t_7, __pyx_v_fbuf);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 4+__pyx_t_7, __pyx_t_4);
      __pyx_t_2 = 0;
      __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 54, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/drepimpl.pxi":55
 *         dtype.ob_mpi = datatype
 *         try: self.write_fn(ubuf, dtype, count, fbuf, position)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_v_dtype->ob_mpi = MPI_DATATYPE_NULL;
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_7 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        __pyx_v_dtype->ob_mpi = MPI_DATATYPE_NULL;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "mpi4py/MPI/drepimpl.pxi":56
 *         try: self.write_fn(ubuf, dtype, count, fbuf, position)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 *     cdef int extent(self,
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":38
 *         return MPI_SUCCESS
 * 
 *     cdef int write(self,             # <<<<<<<<<<<<<<
 *                   void *userbuf,
 *                   MPI_Datatype datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mpi4py.MPI._p_datarep.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ubuf);
  __Pyx_XDECREF(__pyx_v_fbuf);
  __Pyx_XDECREF((PyObject *)__pyx_v_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":58
 *         return MPI_SUCCESS
 * 
 *     cdef int extent(self,             # <<<<<<<<<<<<<<
 *                     MPI_Datatype datatype,
 *                     MPI_Aint *file_extent,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_datarep_extent(struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_self, MPI_Datatype __pyx_v_datatype, MPI_Aint *__pyx_v_file_extent) {
  struct PyMPIDatatypeObject *__pyx_v_dtype = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  MPI_Aint __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  __Pyx_RefNannySetupContext("extent", 0);

  /* "mpi4py/MPI/drepimpl.pxi":62
 *                     MPI_Aint *file_extent,
 *                     ) except -1:
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         dtype.ob_mpi = datatype
 *         try: file_extent[0] = self.extent_fn(dtype)
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 62, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_dtype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":63
 *                     ) except -1:
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype             # <<<<<<<<<<<<<<
 *         try: file_extent[0] = self.extent_fn(dtype)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 */
  __pyx_v_dtype->ob_mpi = __pyx_v_datatype;

  /* "mpi4py/MPI/drepimpl.pxi":64
 *         cdef Datatype dtype = <Datatype>Datatype.__new__(Datatype)
 *         dtype.ob_mpi = datatype
 *         try: file_extent[0] = self.extent_fn(dtype)             # <<<<<<<<<<<<<<
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 *         return MPI_SUCCESS
 */
  /*try:*/ {
    __Pyx_INCREF(__pyx_v_self->extent_fn);
    __pyx_t_1 = __pyx_v_self->extent_fn; __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, ((PyObject *)__pyx_v_dtype)) : __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)__pyx_v_dtype));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(16, 64, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyInt_As_MPI_Aint(__pyx_t_2); if (unlikely((__pyx_t_4 == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(16, 64, __pyx_L4_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    (__pyx_v_file_extent[0]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/drepimpl.pxi":65
 *         dtype.ob_mpi = datatype
 *         try: file_extent[0] = self.extent_fn(dtype)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_v_dtype->ob_mpi = MPI_DATATYPE_NULL;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_v_dtype->ob_mpi = MPI_DATATYPE_NULL;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/drepimpl.pxi":66
 *         try: file_extent[0] = self.extent_fn(dtype)
 *         finally: dtype.ob_mpi = MPI_DATATYPE_NULL
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 * # ---
 */
  __pyx_r = MPI_SUCCESS;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":58
 *         return MPI_SUCCESS
 * 
 *     cdef int extent(self,             # <<<<<<<<<<<<<<
 *                     MPI_Datatype datatype,
 *                     MPI_Aint *file_extent,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._p_datarep.extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dtype);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":70
 * # ---
 * 
 * cdef int datarep_read(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

static int __pyx_f_6mpi4py_3MPI_datarep_read(void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position, void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_state = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("datarep_read", 0);

  /* "mpi4py/MPI/drepimpl.pxi":78
 *     void *extra_state,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_datarep state = <_p_datarep>extra_state             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_datarep *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":79
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_datarep state = <_p_datarep>extra_state
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/drepimpl.pxi":81
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.read(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/drepimpl.pxi":82
 *     cdef object exc
 *     try:
 *         state.read(userbuf, datatype, count, filebuf, position)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_5 = __pyx_f_6mpi4py_3MPI_10_p_datarep_read(__pyx_v_state, __pyx_v_userbuf, __pyx_v_datatype, __pyx_v_count, __pyx_v_filebuf, __pyx_v_position); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(16, 82, __pyx_L3_error)

      /* "mpi4py/MPI/drepimpl.pxi":81
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.read(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/drepimpl.pxi":83
 *     try:
 *         state.read(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.datarep_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(16, 83, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/drepimpl.pxi":84
 *         state.read(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/drepimpl.pxi":85
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(16, 85, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(16, 85, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 85, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_5;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/drepimpl.pxi":86
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.datarep_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(16, 86, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);

      /* "mpi4py/MPI/drepimpl.pxi":87
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/drepimpl.pxi":88
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/drepimpl.pxi":81
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.read(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/drepimpl.pxi":89
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef int datarep_write(
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":70
 * # ---
 * 
 * cdef int datarep_read(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.datarep_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":91
 *     return ierr
 * 
 * cdef int datarep_write(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

static int __pyx_f_6mpi4py_3MPI_datarep_write(void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position, void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_state = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("datarep_write", 0);

  /* "mpi4py/MPI/drepimpl.pxi":99
 *     void *extra_state,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_datarep state = <_p_datarep>extra_state             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_datarep *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":100
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_datarep state = <_p_datarep>extra_state
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/drepimpl.pxi":102
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.write(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/drepimpl.pxi":103
 *     cdef object exc
 *     try:
 *         state.write(userbuf, datatype, count, filebuf, position)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_5 = __pyx_f_6mpi4py_3MPI_10_p_datarep_write(__pyx_v_state, __pyx_v_userbuf, __pyx_v_datatype, __pyx_v_count, __pyx_v_filebuf, __pyx_v_position); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(16, 103, __pyx_L3_error)

      /* "mpi4py/MPI/drepimpl.pxi":102
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.write(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/drepimpl.pxi":104
 *     try:
 *         state.write(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.datarep_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(16, 104, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/drepimpl.pxi":105
 *         state.write(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/drepimpl.pxi":106
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(16, 106, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(16, 106, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 106, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_5;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/drepimpl.pxi":107
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.datarep_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(16, 107, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);

      /* "mpi4py/MPI/drepimpl.pxi":108
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/drepimpl.pxi":109
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/drepimpl.pxi":102
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.write(userbuf, datatype, count, filebuf, position)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/drepimpl.pxi":110
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef int datarep_extent(
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":91
 *     return ierr
 * 
 * cdef int datarep_write(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.datarep_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":112
 *     return ierr
 * 
 * cdef int datarep_extent(             # <<<<<<<<<<<<<<
 *     MPI_Datatype datatype,
 *     MPI_Aint *file_extent,
 */

static int __pyx_f_6mpi4py_3MPI_datarep_extent(MPI_Datatype __pyx_v_datatype, MPI_Aint *__pyx_v_file_extent, void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *__pyx_v_state = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("datarep_extent", 0);

  /* "mpi4py/MPI/drepimpl.pxi":117
 *     void *extra_state,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_datarep state = <_p_datarep>extra_state             # <<<<<<<<<<<<<<
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_datarep *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":118
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef _p_datarep state = <_p_datarep>extra_state
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/drepimpl.pxi":120
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.extent(datatype, file_extent)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "mpi4py/MPI/drepimpl.pxi":121
 *     cdef object exc
 *     try:
 *         state.extent(datatype, file_extent)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_5 = __pyx_f_6mpi4py_3MPI_10_p_datarep_extent(__pyx_v_state, __pyx_v_datatype, __pyx_v_file_extent); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(16, 121, __pyx_L3_error)

      /* "mpi4py/MPI/drepimpl.pxi":120
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.extent(datatype, file_extent)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/drepimpl.pxi":122
 *     try:
 *         state.extent(datatype, file_extent)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_5) {
      __Pyx_AddTraceback("mpi4py.MPI.datarep_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(16, 122, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/drepimpl.pxi":123
 *         state.extent(datatype, file_extent)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/drepimpl.pxi":124
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(16, 124, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(16, 124, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 124, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_5;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/drepimpl.pxi":125
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.datarep_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_1) < 0) __PYX_ERR(16, 125, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_1);

      /* "mpi4py/MPI/drepimpl.pxi":126
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/drepimpl.pxi":127
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/drepimpl.pxi":120
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         state.extent(datatype, file_extent)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/drepimpl.pxi":128
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * # ---
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":112
 *     return ierr
 * 
 * cdef int datarep_extent(             # <<<<<<<<<<<<<<
 *     MPI_Datatype datatype,
 *     MPI_Aint *file_extent,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.datarep_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":133
 * 
 * @cython.callspec("MPIAPI")
 * cdef int datarep_read_fn(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_datarep_read_fn(void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position, void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/drepimpl.pxi":141
 *     void *extra_state
 *     ) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/drepimpl.pxi":142
 *     ) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/drepimpl.pxi":141
 *     void *extra_state
 *     ) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/drepimpl.pxi":143
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return datarep_read(userbuf, datatype, count,
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/drepimpl.pxi":144
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     return datarep_read(userbuf, datatype, count,
 *                         filebuf, position, extra_state)
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/drepimpl.pxi":143
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return datarep_read(userbuf, datatype, count,
 */
  }

  /* "mpi4py/MPI/drepimpl.pxi":145
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 *     return datarep_read(userbuf, datatype, count,             # <<<<<<<<<<<<<<
 *                         filebuf, position, extra_state)
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_datarep_read(__pyx_v_userbuf, __pyx_v_datatype, __pyx_v_count, __pyx_v_filebuf, __pyx_v_position, __pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(16, 145, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":133
 * 
 * @cython.callspec("MPIAPI")
 * cdef int datarep_read_fn(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.datarep_read_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":149
 * 
 * @cython.callspec("MPIAPI")
 * cdef int datarep_write_fn(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_datarep_write_fn(void *__pyx_v_userbuf, MPI_Datatype __pyx_v_datatype, int __pyx_v_count, void *__pyx_v_filebuf, MPI_Offset __pyx_v_position, void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/drepimpl.pxi":157
 *     void *extra_state
 *     ) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/drepimpl.pxi":158
 *     ) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/drepimpl.pxi":157
 *     void *extra_state
 *     ) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/drepimpl.pxi":159
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return datarep_write(userbuf, datatype, count,
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/drepimpl.pxi":160
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     return datarep_write(userbuf, datatype, count,
 *                          filebuf, position, extra_state)
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/drepimpl.pxi":159
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return datarep_write(userbuf, datatype, count,
 */
  }

  /* "mpi4py/MPI/drepimpl.pxi":161
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 *     return datarep_write(userbuf, datatype, count,             # <<<<<<<<<<<<<<
 *                          filebuf, position, extra_state)
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_datarep_write(__pyx_v_userbuf, __pyx_v_datatype, __pyx_v_count, __pyx_v_filebuf, __pyx_v_position, __pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(16, 161, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":149
 * 
 * @cython.callspec("MPIAPI")
 * cdef int datarep_write_fn(             # <<<<<<<<<<<<<<
 *     void *userbuf,
 *     MPI_Datatype datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.datarep_write_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/drepimpl.pxi":165
 * 
 * @cython.callspec("MPIAPI")
 * cdef int datarep_extent_fn(             # <<<<<<<<<<<<<<
 *     MPI_Datatype datatype,
 *     MPI_Aint *file_extent,
 */

static int MPIAPI __pyx_f_6mpi4py_3MPI_datarep_extent_fn(MPI_Datatype __pyx_v_datatype, MPI_Aint *__pyx_v_file_extent, void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/drepimpl.pxi":170
 *     void *extra_state
 *     ) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/drepimpl.pxi":171
 *     ) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/drepimpl.pxi":170
 *     void *extra_state
 *     ) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/drepimpl.pxi":172
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return datarep_extent(datatype, file_extent, extra_state)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/drepimpl.pxi":173
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     return datarep_extent(datatype, file_extent, extra_state)
 * 
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/drepimpl.pxi":172
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     return datarep_extent(datatype, file_extent, extra_state)
 */
  }

  /* "mpi4py/MPI/drepimpl.pxi":174
 *     if not Py_IsInitialized():
 *         return MPI_ERR_INTERN
 *     return datarep_extent(datatype, file_extent, extra_state)             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_datarep_extent(__pyx_v_datatype, __pyx_v_file_extent, __pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(16, 174, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/drepimpl.pxi":165
 * 
 * @cython.callspec("MPIAPI")
 * cdef int datarep_extent_fn(             # <<<<<<<<<<<<<<
 *     MPI_Datatype datatype,
 *     MPI_Aint *file_extent,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.datarep_extent_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":292
 * include "drepimpl.pxi"
 * 
 * cdef inline File new_File(MPI_File ob):             # <<<<<<<<<<<<<<
 *     cdef File file = <File>File.__new__(File)
 *     file.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIFileObject *__pyx_f_6mpi4py_3MPI_new_File(MPI_File __pyx_v_ob) {
  struct PyMPIFileObject *__pyx_v_file = 0;
  struct PyMPIFileObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_File", 0);

  /* "mpi4py/MPI/helpers.pxi":293
 * 
 * cdef inline File new_File(MPI_File ob):
 *     cdef File file = <File>File.__new__(File)             # <<<<<<<<<<<<<<
 *     file.ob_mpi = ob
 *     return file
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_File(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_File), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 293, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_file = ((struct PyMPIFileObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":294
 * cdef inline File new_File(MPI_File ob):
 *     cdef File file = <File>File.__new__(File)
 *     file.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return file
 * 
 */
  __pyx_v_file->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":295
 *     cdef File file = <File>File.__new__(File)
 *     file.ob_mpi = ob
 *     return file             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_File(MPI_File* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_file));
  __pyx_r = __pyx_v_file;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":292
 * include "drepimpl.pxi"
 * 
 * cdef inline File new_File(MPI_File ob):             # <<<<<<<<<<<<<<
 *     cdef File file = <File>File.__new__(File)
 *     file.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_File", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_file);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":297
 *     return file
 * 
 * cdef inline int del_File(MPI_File* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_FILE_NULL : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_File(MPI_File *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_File", 0);

  /* "mpi4py/MPI/helpers.pxi":298
 * 
 * cdef inline int del_File(MPI_File* ob):
 *     if ob    == NULL          : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_FILE_NULL : return 0
 *     #
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":299
 * cdef inline int del_File(MPI_File* ob):
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_FILE_NULL : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_FILE_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":301
 *     if ob[0] == MPI_FILE_NULL : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_File_close(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":302
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_File_close(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_File_close(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":297
 *     return file
 * 
 * cdef inline int del_File(MPI_File* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL          : return 0
 *     if ob[0] == MPI_FILE_NULL : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":307
 * # Errhandler
 * 
 * cdef inline Errhandler new_Errhandler(MPI_Errhandler ob):             # <<<<<<<<<<<<<<
 *     cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *     errhandler.ob_mpi = ob
 */

static CYTHON_INLINE struct PyMPIErrhandlerObject *__pyx_f_6mpi4py_3MPI_new_Errhandler(MPI_Errhandler __pyx_v_ob) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  struct PyMPIErrhandlerObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("new_Errhandler", 0);

  /* "mpi4py/MPI/helpers.pxi":308
 * 
 * cdef inline Errhandler new_Errhandler(MPI_Errhandler ob):
 *     cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)             # <<<<<<<<<<<<<<
 *     errhandler.ob_mpi = ob
 *     return errhandler
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Errhandler(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 308, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/helpers.pxi":309
 * cdef inline Errhandler new_Errhandler(MPI_Errhandler ob):
 *     cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *     errhandler.ob_mpi = ob             # <<<<<<<<<<<<<<
 *     return errhandler
 * 
 */
  __pyx_v_errhandler->ob_mpi = __pyx_v_ob;

  /* "mpi4py/MPI/helpers.pxi":310
 *     cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *     errhandler.ob_mpi = ob
 *     return errhandler             # <<<<<<<<<<<<<<
 * 
 * cdef inline int del_Errhandler(MPI_Errhandler* ob):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_errhandler));
  __pyx_r = __pyx_v_errhandler;
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":307
 * # Errhandler
 * 
 * cdef inline Errhandler new_Errhandler(MPI_Errhandler ob):             # <<<<<<<<<<<<<<
 *     cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *     errhandler.ob_mpi = ob
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.new_Errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_errhandler);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/helpers.pxi":312
 *     return errhandler
 * 
 * cdef inline int del_Errhandler(MPI_Errhandler* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL                 : return 0
 *     if ob[0] == MPI_ERRHANDLER_NULL  : return 0
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_del_Errhandler(MPI_Errhandler *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("del_Errhandler", 0);

  /* "mpi4py/MPI/helpers.pxi":313
 * 
 * cdef inline int del_Errhandler(MPI_Errhandler* ob):
 *     if ob    == NULL                 : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_ERRHANDLER_NULL  : return 0
 *     if ob[0] == MPI_ERRORS_RETURN    : return 0
 */
  __pyx_t_1 = ((__pyx_v_ob == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":314
 * cdef inline int del_Errhandler(MPI_Errhandler* ob):
 *     if ob    == NULL                 : return 0
 *     if ob[0] == MPI_ERRHANDLER_NULL  : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_ERRORS_RETURN    : return 0
 *     if ob[0] == MPI_ERRORS_ARE_FATAL : return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_ERRHANDLER_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":315
 *     if ob    == NULL                 : return 0
 *     if ob[0] == MPI_ERRHANDLER_NULL  : return 0
 *     if ob[0] == MPI_ERRORS_RETURN    : return 0             # <<<<<<<<<<<<<<
 *     if ob[0] == MPI_ERRORS_ARE_FATAL : return 0
 *     #
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_ERRORS_RETURN) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":316
 *     if ob[0] == MPI_ERRHANDLER_NULL  : return 0
 *     if ob[0] == MPI_ERRORS_RETURN    : return 0
 *     if ob[0] == MPI_ERRORS_ARE_FATAL : return 0             # <<<<<<<<<<<<<<
 *     #
 *     if not mpi_active(): return 0
 */
  __pyx_t_1 = (((__pyx_v_ob[0]) == MPI_ERRORS_ARE_FATAL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":318
 *     if ob[0] == MPI_ERRORS_ARE_FATAL : return 0
 *     #
 *     if not mpi_active(): return 0             # <<<<<<<<<<<<<<
 *     return MPI_Errhandler_free(ob)
 * 
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/helpers.pxi":319
 *     #
 *     if not mpi_active(): return 0
 *     return MPI_Errhandler_free(ob)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = MPI_Errhandler_free(__pyx_v_ob);
  goto __pyx_L0;

  /* "mpi4py/MPI/helpers.pxi":312
 *     return errhandler
 * 
 * cdef inline int del_Errhandler(MPI_Errhandler* ob):             # <<<<<<<<<<<<<<
 *     if ob    == NULL                 : return 0
 *     if ob[0] == MPI_ERRHANDLER_NULL  : return 0
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":9
 *     cdef public object delete_fn
 *     cdef public bint   nopython
 *     def __cinit__(self, copy_fn, delete_fn, nopython):             # <<<<<<<<<<<<<<
 *         if copy_fn   is False: copy_fn   = None
 *         if delete_fn is False: delete_fn = None
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_copy_fn = 0;
  PyObject *__pyx_v_delete_fn = 0;
  PyObject *__pyx_v_nopython = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_copy_fn,&__pyx_n_s_delete_fn,&__pyx_n_s_nopython,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy_fn)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delete_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 1); __PYX_ERR(4, 9, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nopython)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, 2); __PYX_ERR(4, 9, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(4, 9, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_copy_fn = values[0];
    __pyx_v_delete_fn = values[1];
    __pyx_v_nopython = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 9, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_keyval.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self), __pyx_v_copy_fn, __pyx_v_delete_fn, __pyx_v_nopython);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_keyval___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__cinit__", 0);
  __Pyx_INCREF(__pyx_v_copy_fn);
  __Pyx_INCREF(__pyx_v_delete_fn);

  /* "mpi4py/MPI/attrimpl.pxi":10
 *     cdef public bint   nopython
 *     def __cinit__(self, copy_fn, delete_fn, nopython):
 *         if copy_fn   is False: copy_fn   = None             # <<<<<<<<<<<<<<
 *         if delete_fn is False: delete_fn = None
 *         if delete_fn is True:  delete_fn = None
 */
  __pyx_t_1 = (__pyx_v_copy_fn == Py_False);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_copy_fn, Py_None);
  }

  /* "mpi4py/MPI/attrimpl.pxi":11
 *     def __cinit__(self, copy_fn, delete_fn, nopython):
 *         if copy_fn   is False: copy_fn   = None
 *         if delete_fn is False: delete_fn = None             # <<<<<<<<<<<<<<
 *         if delete_fn is True:  delete_fn = None
 *         self.copy_fn   = copy_fn
 */
  __pyx_t_2 = (__pyx_v_delete_fn == Py_False);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_delete_fn, Py_None);
  }

  /* "mpi4py/MPI/attrimpl.pxi":12
 *         if copy_fn   is False: copy_fn   = None
 *         if delete_fn is False: delete_fn = None
 *         if delete_fn is True:  delete_fn = None             # <<<<<<<<<<<<<<
 *         self.copy_fn   = copy_fn
 *         self.delete_fn = delete_fn
 */
  __pyx_t_1 = (__pyx_v_delete_fn == Py_True);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_delete_fn, Py_None);
  }

  /* "mpi4py/MPI/attrimpl.pxi":13
 *         if delete_fn is False: delete_fn = None
 *         if delete_fn is True:  delete_fn = None
 *         self.copy_fn   = copy_fn             # <<<<<<<<<<<<<<
 *         self.delete_fn = delete_fn
 *         self.nopython  = nopython
 */
  __Pyx_INCREF(__pyx_v_copy_fn);
  __Pyx_GIVEREF(__pyx_v_copy_fn);
  __Pyx_GOTREF(__pyx_v_self->copy_fn);
  __Pyx_DECREF(__pyx_v_self->copy_fn);
  __pyx_v_self->copy_fn = __pyx_v_copy_fn;

  /* "mpi4py/MPI/attrimpl.pxi":14
 *         if delete_fn is True:  delete_fn = None
 *         self.copy_fn   = copy_fn
 *         self.delete_fn = delete_fn             # <<<<<<<<<<<<<<
 *         self.nopython  = nopython
 * 
 */
  __Pyx_INCREF(__pyx_v_delete_fn);
  __Pyx_GIVEREF(__pyx_v_delete_fn);
  __Pyx_GOTREF(__pyx_v_self->delete_fn);
  __Pyx_DECREF(__pyx_v_self->delete_fn);
  __pyx_v_self->delete_fn = __pyx_v_delete_fn;

  /* "mpi4py/MPI/attrimpl.pxi":15
 *         self.copy_fn   = copy_fn
 *         self.delete_fn = delete_fn
 *         self.nopython  = nopython             # <<<<<<<<<<<<<<
 * 
 * cdef dict type_keyval = {}
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_nopython); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 15, __pyx_L1_error)
  __pyx_v_self->nopython = __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":9
 *     cdef public object delete_fn
 *     cdef public bint   nopython
 *     def __cinit__(self, copy_fn, delete_fn, nopython):             # <<<<<<<<<<<<<<
 *         if copy_fn   is False: copy_fn   = None
 *         if delete_fn is False: delete_fn = None
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_keyval.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_copy_fn);
  __Pyx_XDECREF(__pyx_v_delete_fn);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":6
 * @cython.internal
 * cdef class _p_keyval:
 *     cdef public object copy_fn             # <<<<<<<<<<<<<<
 *     cdef public object delete_fn
 *     cdef public bint   nopython
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn___get__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn___get__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->copy_fn);
  __pyx_r = __pyx_v_self->copy_fn;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn_2__set__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn_2__set__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->copy_fn);
  __Pyx_DECREF(__pyx_v_self->copy_fn);
  __pyx_v_self->copy_fn = __pyx_v_value;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn_4__del__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_7copy_fn_4__del__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->copy_fn);
  __Pyx_DECREF(__pyx_v_self->copy_fn);
  __pyx_v_self->copy_fn = Py_None;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":7
 * cdef class _p_keyval:
 *     cdef public object copy_fn
 *     cdef public object delete_fn             # <<<<<<<<<<<<<<
 *     cdef public bint   nopython
 *     def __cinit__(self, copy_fn, delete_fn, nopython):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn___get__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn___get__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->delete_fn);
  __pyx_r = __pyx_v_self->delete_fn;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn_2__set__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn_2__set__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->delete_fn);
  __Pyx_DECREF(__pyx_v_self->delete_fn);
  __pyx_v_self->delete_fn = __pyx_v_value;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn_4__del__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_9delete_fn_4__del__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->delete_fn);
  __Pyx_DECREF(__pyx_v_self->delete_fn);
  __pyx_v_self->delete_fn = Py_None;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":8
 *     cdef public object copy_fn
 *     cdef public object delete_fn
 *     cdef public bint   nopython             # <<<<<<<<<<<<<<
 *     def __cinit__(self, copy_fn, delete_fn, nopython):
 *         if copy_fn   is False: copy_fn   = None
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9_p_keyval_8nopython_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9_p_keyval_8nopython_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_8nopython___get__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9_p_keyval_8nopython___get__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->nopython); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_keyval.nopython.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_8nopython_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_keyval_8nopython_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_keyval_8nopython_2__set__(((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_keyval_8nopython_2__set__(struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 8, __pyx_L1_error)
  __pyx_v_self->nopython = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_keyval.nopython.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":34
 *     MPI_Win
 * 
 * cdef inline object PyMPI_attr_call(             # <<<<<<<<<<<<<<
 *     object function,
 *     PyMPI_attr_type hdl,
 */

static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(PyObject *__pyx_v_function, MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  char const *__pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_call", 0);

  /* "mpi4py/MPI/attrimpl.pxi":42
 *     cdef object result
 *     if PyMPI_attr_type is MPI_Datatype:
 *         ob = new_Datatype(hdl)             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Comm:
 *         ob = new_Comm(hdl)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(__pyx_v_hdl)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ob = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":47
 *     if PyMPI_attr_type is MPI_Win:
 *         ob = new_Win (hdl)
 *     try:             # <<<<<<<<<<<<<<
 *         result = function(ob, keyval, attrval)
 *     finally:
 */
  /*try:*/ {

    /* "mpi4py/MPI/attrimpl.pxi":48
 *         ob = new_Win (hdl)
 *     try:
 *         result = function(ob, keyval, attrval)             # <<<<<<<<<<<<<<
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:
 */
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 48, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_function);
    __pyx_t_3 = __pyx_v_function; __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_ob, __pyx_t_2, __pyx_v_attrval};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_ob, __pyx_t_2, __pyx_v_attrval};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ob);
      __Pyx_GIVEREF(__pyx_v_ob);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_ob);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_2);
      __Pyx_INCREF(__pyx_v_attrval);
      __Pyx_GIVEREF(__pyx_v_attrval);
      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_attrval);
      __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":50
 *         result = function(ob, keyval, attrval)
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:             # <<<<<<<<<<<<<<
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL
 *         if PyMPI_attr_type is MPI_Comm:
 */
  /*finally:*/ {
    /*normal exit:*/{

      /* "mpi4py/MPI/attrimpl.pxi":51
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 */
      ((struct PyMPIDatatypeObject *)__pyx_v_ob)->ob_mpi = MPI_DATATYPE_NULL;

      /* "mpi4py/MPI/attrimpl.pxi":54
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 *         if PyMPI_attr_type is MPI_Win:             # <<<<<<<<<<<<<<
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result
 */
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_5 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {

        /* "mpi4py/MPI/attrimpl.pxi":51
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 */
        ((struct PyMPIDatatypeObject *)__pyx_v_ob)->ob_mpi = MPI_DATATYPE_NULL;

        /* "mpi4py/MPI/attrimpl.pxi":54
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 *         if PyMPI_attr_type is MPI_Win:             # <<<<<<<<<<<<<<
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result
 */
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":56
 *         if PyMPI_attr_type is MPI_Win:
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_copy(
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":34
 *     MPI_Win
 * 
 * cdef inline object PyMPI_attr_call(             # <<<<<<<<<<<<<<
 *     object function,
 *     PyMPI_attr_type hdl,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(PyObject *__pyx_v_function, MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  char const *__pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_call", 0);

  /* "mpi4py/MPI/attrimpl.pxi":44
 *         ob = new_Datatype(hdl)
 *     if PyMPI_attr_type is MPI_Comm:
 *         ob = new_Comm(hdl)             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Win:
 *         ob = new_Win (hdl)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Comm(__pyx_v_hdl)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ob = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":47
 *     if PyMPI_attr_type is MPI_Win:
 *         ob = new_Win (hdl)
 *     try:             # <<<<<<<<<<<<<<
 *         result = function(ob, keyval, attrval)
 *     finally:
 */
  /*try:*/ {

    /* "mpi4py/MPI/attrimpl.pxi":48
 *         ob = new_Win (hdl)
 *     try:
 *         result = function(ob, keyval, attrval)             # <<<<<<<<<<<<<<
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:
 */
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 48, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_function);
    __pyx_t_3 = __pyx_v_function; __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_ob, __pyx_t_2, __pyx_v_attrval};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_ob, __pyx_t_2, __pyx_v_attrval};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ob);
      __Pyx_GIVEREF(__pyx_v_ob);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_ob);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_2);
      __Pyx_INCREF(__pyx_v_attrval);
      __Pyx_GIVEREF(__pyx_v_attrval);
      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_attrval);
      __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":50
 *         result = function(ob, keyval, attrval)
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:             # <<<<<<<<<<<<<<
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL
 *         if PyMPI_attr_type is MPI_Comm:
 */
  /*finally:*/ {
    /*normal exit:*/{

      /* "mpi4py/MPI/attrimpl.pxi":53
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL             # <<<<<<<<<<<<<<
 *         if PyMPI_attr_type is MPI_Win:
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 */
      ((struct PyMPICommObject *)__pyx_v_ob)->ob_mpi = MPI_COMM_NULL;

      /* "mpi4py/MPI/attrimpl.pxi":54
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 *         if PyMPI_attr_type is MPI_Win:             # <<<<<<<<<<<<<<
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result
 */
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_5 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {

        /* "mpi4py/MPI/attrimpl.pxi":53
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL             # <<<<<<<<<<<<<<
 *         if PyMPI_attr_type is MPI_Win:
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 */
        ((struct PyMPICommObject *)__pyx_v_ob)->ob_mpi = MPI_COMM_NULL;

        /* "mpi4py/MPI/attrimpl.pxi":54
 *         if PyMPI_attr_type is MPI_Comm:
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 *         if PyMPI_attr_type is MPI_Win:             # <<<<<<<<<<<<<<
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result
 */
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":56
 *         if PyMPI_attr_type is MPI_Win:
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_copy(
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":34
 *     MPI_Win
 * 
 * cdef inline object PyMPI_attr_call(             # <<<<<<<<<<<<<<
 *     object function,
 *     PyMPI_attr_type hdl,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(PyObject *__pyx_v_function, MPI_Win __pyx_v_hdl, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  PyObject *__pyx_v_ob = 0;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  char const *__pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_call", 0);

  /* "mpi4py/MPI/attrimpl.pxi":46
 *         ob = new_Comm(hdl)
 *     if PyMPI_attr_type is MPI_Win:
 *         ob = new_Win (hdl)             # <<<<<<<<<<<<<<
 *     try:
 *         result = function(ob, keyval, attrval)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Win(__pyx_v_hdl)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ob = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":47
 *     if PyMPI_attr_type is MPI_Win:
 *         ob = new_Win (hdl)
 *     try:             # <<<<<<<<<<<<<<
 *         result = function(ob, keyval, attrval)
 *     finally:
 */
  /*try:*/ {

    /* "mpi4py/MPI/attrimpl.pxi":48
 *         ob = new_Win (hdl)
 *     try:
 *         result = function(ob, keyval, attrval)             # <<<<<<<<<<<<<<
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:
 */
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 48, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_function);
    __pyx_t_3 = __pyx_v_function; __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_ob, __pyx_t_2, __pyx_v_attrval};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[4] = {__pyx_t_4, __pyx_v_ob, __pyx_t_2, __pyx_v_attrval};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_INCREF(__pyx_v_ob);
      __Pyx_GIVEREF(__pyx_v_ob);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_ob);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_2);
      __Pyx_INCREF(__pyx_v_attrval);
      __Pyx_GIVEREF(__pyx_v_attrval);
      PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_attrval);
      __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 48, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_result = __pyx_t_1;
    __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":50
 *         result = function(ob, keyval, attrval)
 *     finally:
 *         if PyMPI_attr_type is MPI_Datatype:             # <<<<<<<<<<<<<<
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL
 *         if PyMPI_attr_type is MPI_Comm:
 */
  /*finally:*/ {
    /*normal exit:*/{

      /* "mpi4py/MPI/attrimpl.pxi":55
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 *         if PyMPI_attr_type is MPI_Win:
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL             # <<<<<<<<<<<<<<
 *     return result
 * 
 */
      ((struct PyMPIWinObject *)__pyx_v_ob)->ob_mpi = MPI_WIN_NULL;
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __pyx_t_5 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
      {

        /* "mpi4py/MPI/attrimpl.pxi":52
 *         if PyMPI_attr_type is MPI_Datatype:
 *             (<Datatype>ob).ob_mpi = MPI_DATATYPE_NULL
 *         if PyMPI_attr_type is MPI_Comm:             # <<<<<<<<<<<<<<
 *             (<Comm>ob).ob_mpi = MPI_COMM_NULL
 *         if PyMPI_attr_type is MPI_Win:
 */
        ((struct PyMPIWinObject *)__pyx_v_ob)->ob_mpi = MPI_WIN_NULL;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":56
 *         if PyMPI_attr_type is MPI_Win:
 *             (<Win>ob).ob_mpi = MPI_WIN_NULL
 *     return result             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_copy(
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":34
 *     MPI_Win
 * 
 * cdef inline object PyMPI_attr_call(             # <<<<<<<<<<<<<<
 *     object function,
 *     PyMPI_attr_type hdl,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_call", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":58
 *     return result
 * 
 * cdef inline int PyMPI_attr_copy(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  int __pyx_v_p;
  PyObject *__pyx_v_attrval = 0;
  void **__pyx_v_outval;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_copy", 0);

  /* "mpi4py/MPI/attrimpl.pxi":65
 *     void *attrval_out,
 *     int *flag) except -1:
 *     if flag != NULL: flag[0] = 0             # <<<<<<<<<<<<<<
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0
 */
  __pyx_t_1 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_1) {
    (__pyx_v_flag[0]) = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":66
 *     int *flag) except -1:
 *     if flag != NULL: flag[0] = 0
 *     cdef _p_keyval state = <_p_keyval>extra_state             # <<<<<<<<<<<<<<
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython
 */
  __pyx_t_2 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":67
 *     if flag != NULL: flag[0] = 0
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0             # <<<<<<<<<<<<<<
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL
 */
  __pyx_t_1 = (__pyx_v_state->copy_fn == Py_None);
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":68
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython             # <<<<<<<<<<<<<<
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 */
  __pyx_v_p = (!(__pyx_v_state->nopython != 0));

  /* "mpi4py/MPI/attrimpl.pxi":69
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL             # <<<<<<<<<<<<<<
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_attrval_in != NULL) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(4, 69, __pyx_L1_error)
      }
    }
    #endif
  }

  /* "mpi4py/MPI/attrimpl.pxi":71
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in             # <<<<<<<<<<<<<<
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    __pyx_t_2 = ((PyObject *)__pyx_v_attrval_in);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_attrval = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L6;
  }

  /* "mpi4py/MPI/attrimpl.pxi":72
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)             # <<<<<<<<<<<<<<
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 */
  /*else*/ {
    __pyx_t_2 = PyLong_FromVoidPtr(__pyx_v_attrval_in); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_attrval = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L6:;

  /* "mpi4py/MPI/attrimpl.pxi":73
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:             # <<<<<<<<<<<<<<
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 */
  __pyx_t_3 = (__pyx_v_state->copy_fn != Py_True);
  __pyx_t_1 = (__pyx_t_3 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":74
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)             # <<<<<<<<<<<<<<
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out
 */
    __pyx_t_2 = __pyx_v_state->copy_fn;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(__pyx_t_2, __pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_attrval, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/attrimpl.pxi":75
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0             # <<<<<<<<<<<<<<
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval
 */
    __pyx_t_1 = (__pyx_v_attrval == __pyx_builtin_NotImplemented);
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
      __pyx_r = 0;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/attrimpl.pxi":73
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:             # <<<<<<<<<<<<<<
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":76
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out             # <<<<<<<<<<<<<<
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 */
  __pyx_v_outval = ((void **)__pyx_v_attrval_out);

  /* "mpi4py/MPI/attrimpl.pxi":77
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval             # <<<<<<<<<<<<<<
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    (__pyx_v_outval[0]) = ((void *)__pyx_v_attrval);
    goto __pyx_L9;
  }

  /* "mpi4py/MPI/attrimpl.pxi":78
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)             # <<<<<<<<<<<<<<
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)
 */
  /*else*/ {
    (__pyx_v_outval[0]) = PyLong_AsVoidPtr(__pyx_v_attrval);
  }
  __pyx_L9:;

  /* "mpi4py/MPI/attrimpl.pxi":79
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1             # <<<<<<<<<<<<<<
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)
 */
  __pyx_t_3 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_3) {
    (__pyx_v_flag[0]) = 1;
  }

  /* "mpi4py/MPI/attrimpl.pxi":80
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)             # <<<<<<<<<<<<<<
 *     Py_INCREF(state)
 *     return 0
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    Py_INCREF(__pyx_v_attrval);
  }

  /* "mpi4py/MPI/attrimpl.pxi":81
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  Py_INCREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/attrimpl.pxi":82
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_delete(
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":58
 *     return result
 * 
 * cdef inline int PyMPI_attr_copy(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_attrval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  int __pyx_v_p;
  PyObject *__pyx_v_attrval = 0;
  void **__pyx_v_outval;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_copy", 0);

  /* "mpi4py/MPI/attrimpl.pxi":65
 *     void *attrval_out,
 *     int *flag) except -1:
 *     if flag != NULL: flag[0] = 0             # <<<<<<<<<<<<<<
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0
 */
  __pyx_t_1 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_1) {
    (__pyx_v_flag[0]) = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":66
 *     int *flag) except -1:
 *     if flag != NULL: flag[0] = 0
 *     cdef _p_keyval state = <_p_keyval>extra_state             # <<<<<<<<<<<<<<
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython
 */
  __pyx_t_2 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":67
 *     if flag != NULL: flag[0] = 0
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0             # <<<<<<<<<<<<<<
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL
 */
  __pyx_t_1 = (__pyx_v_state->copy_fn == Py_None);
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":68
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython             # <<<<<<<<<<<<<<
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 */
  __pyx_v_p = (!(__pyx_v_state->nopython != 0));

  /* "mpi4py/MPI/attrimpl.pxi":69
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL             # <<<<<<<<<<<<<<
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_attrval_in != NULL) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(4, 69, __pyx_L1_error)
      }
    }
    #endif
  }

  /* "mpi4py/MPI/attrimpl.pxi":71
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in             # <<<<<<<<<<<<<<
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    __pyx_t_2 = ((PyObject *)__pyx_v_attrval_in);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_attrval = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L6;
  }

  /* "mpi4py/MPI/attrimpl.pxi":72
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)             # <<<<<<<<<<<<<<
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 */
  /*else*/ {
    __pyx_t_2 = PyLong_FromVoidPtr(__pyx_v_attrval_in); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_attrval = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L6:;

  /* "mpi4py/MPI/attrimpl.pxi":73
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:             # <<<<<<<<<<<<<<
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 */
  __pyx_t_3 = (__pyx_v_state->copy_fn != Py_True);
  __pyx_t_1 = (__pyx_t_3 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":74
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)             # <<<<<<<<<<<<<<
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out
 */
    __pyx_t_2 = __pyx_v_state->copy_fn;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(__pyx_t_2, __pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_attrval, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/attrimpl.pxi":75
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0             # <<<<<<<<<<<<<<
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval
 */
    __pyx_t_1 = (__pyx_v_attrval == __pyx_builtin_NotImplemented);
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
      __pyx_r = 0;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/attrimpl.pxi":73
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:             # <<<<<<<<<<<<<<
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":76
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out             # <<<<<<<<<<<<<<
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 */
  __pyx_v_outval = ((void **)__pyx_v_attrval_out);

  /* "mpi4py/MPI/attrimpl.pxi":77
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval             # <<<<<<<<<<<<<<
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    (__pyx_v_outval[0]) = ((void *)__pyx_v_attrval);
    goto __pyx_L9;
  }

  /* "mpi4py/MPI/attrimpl.pxi":78
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)             # <<<<<<<<<<<<<<
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)
 */
  /*else*/ {
    (__pyx_v_outval[0]) = PyLong_AsVoidPtr(__pyx_v_attrval);
  }
  __pyx_L9:;

  /* "mpi4py/MPI/attrimpl.pxi":79
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1             # <<<<<<<<<<<<<<
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)
 */
  __pyx_t_3 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_3) {
    (__pyx_v_flag[0]) = 1;
  }

  /* "mpi4py/MPI/attrimpl.pxi":80
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)             # <<<<<<<<<<<<<<
 *     Py_INCREF(state)
 *     return 0
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    Py_INCREF(__pyx_v_attrval);
  }

  /* "mpi4py/MPI/attrimpl.pxi":81
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  Py_INCREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/attrimpl.pxi":82
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_delete(
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":58
 *     return result
 * 
 * cdef inline int PyMPI_attr_copy(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_attrval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  int __pyx_v_p;
  PyObject *__pyx_v_attrval = 0;
  void **__pyx_v_outval;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_copy", 0);

  /* "mpi4py/MPI/attrimpl.pxi":65
 *     void *attrval_out,
 *     int *flag) except -1:
 *     if flag != NULL: flag[0] = 0             # <<<<<<<<<<<<<<
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0
 */
  __pyx_t_1 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_1) {
    (__pyx_v_flag[0]) = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":66
 *     int *flag) except -1:
 *     if flag != NULL: flag[0] = 0
 *     cdef _p_keyval state = <_p_keyval>extra_state             # <<<<<<<<<<<<<<
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython
 */
  __pyx_t_2 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":67
 *     if flag != NULL: flag[0] = 0
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0             # <<<<<<<<<<<<<<
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL
 */
  __pyx_t_1 = (__pyx_v_state->copy_fn == Py_None);
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":68
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython             # <<<<<<<<<<<<<<
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 */
  __pyx_v_p = (!(__pyx_v_state->nopython != 0));

  /* "mpi4py/MPI/attrimpl.pxi":69
 *     if state.copy_fn is None: return 0
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL             # <<<<<<<<<<<<<<
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_attrval_in != NULL) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(4, 69, __pyx_L1_error)
      }
    }
    #endif
  }

  /* "mpi4py/MPI/attrimpl.pxi":71
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in             # <<<<<<<<<<<<<<
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    __pyx_t_2 = ((PyObject *)__pyx_v_attrval_in);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v_attrval = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L6;
  }

  /* "mpi4py/MPI/attrimpl.pxi":72
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)             # <<<<<<<<<<<<<<
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 */
  /*else*/ {
    __pyx_t_2 = PyLong_FromVoidPtr(__pyx_v_attrval_in); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_attrval = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L6:;

  /* "mpi4py/MPI/attrimpl.pxi":73
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:             # <<<<<<<<<<<<<<
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 */
  __pyx_t_3 = (__pyx_v_state->copy_fn != Py_True);
  __pyx_t_1 = (__pyx_t_3 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":74
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)             # <<<<<<<<<<<<<<
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out
 */
    __pyx_t_2 = __pyx_v_state->copy_fn;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(__pyx_t_2, __pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_attrval, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/attrimpl.pxi":75
 *     if state.copy_fn is not True:
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0             # <<<<<<<<<<<<<<
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval
 */
    __pyx_t_1 = (__pyx_v_attrval == __pyx_builtin_NotImplemented);
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
      __pyx_r = 0;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/attrimpl.pxi":73
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.copy_fn is not True:             # <<<<<<<<<<<<<<
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":76
 *         attrval = PyMPI_attr_call(state.copy_fn, hdl, keyval, attrval)
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out             # <<<<<<<<<<<<<<
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 */
  __pyx_v_outval = ((void **)__pyx_v_attrval_out);

  /* "mpi4py/MPI/attrimpl.pxi":77
 *         if attrval is NotImplemented: return 0
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval             # <<<<<<<<<<<<<<
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    (__pyx_v_outval[0]) = ((void *)__pyx_v_attrval);
    goto __pyx_L9;
  }

  /* "mpi4py/MPI/attrimpl.pxi":78
 *     cdef void **outval = <void **>attrval_out
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)             # <<<<<<<<<<<<<<
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)
 */
  /*else*/ {
    (__pyx_v_outval[0]) = PyLong_AsVoidPtr(__pyx_v_attrval);
  }
  __pyx_L9:;

  /* "mpi4py/MPI/attrimpl.pxi":79
 *     if p: outval[0] = <void *>attrval
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1             # <<<<<<<<<<<<<<
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)
 */
  __pyx_t_3 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_3) {
    (__pyx_v_flag[0]) = 1;
  }

  /* "mpi4py/MPI/attrimpl.pxi":80
 *     else: outval[0] = PyLong_AsVoidPtr(attrval)
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)             # <<<<<<<<<<<<<<
 *     Py_INCREF(state)
 *     return 0
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    Py_INCREF(__pyx_v_attrval);
  }

  /* "mpi4py/MPI/attrimpl.pxi":81
 *     if flag != NULL: flag[0] = 1
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  Py_INCREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/attrimpl.pxi":82
 *     if p: Py_INCREF(attrval)
 *     Py_INCREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_delete(
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":58
 *     return result
 * 
 * cdef inline int PyMPI_attr_copy(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_attrval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":84
 *     return 0
 * 
 * cdef inline int PyMPI_attr_delete(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval_in, void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  int __pyx_v_p;
  PyObject *__pyx_v_attrval = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_delete", 0);

  /* "mpi4py/MPI/attrimpl.pxi":89
 *     void *attrval_in,
 *     void *extra_state) except -1:
 *     cdef _p_keyval state = <_p_keyval>extra_state             # <<<<<<<<<<<<<<
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":90
 *     void *extra_state) except -1:
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     cdef int p = not state.nopython             # <<<<<<<<<<<<<<
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 */
  __pyx_v_p = (!(__pyx_v_state->nopython != 0));

  /* "mpi4py/MPI/attrimpl.pxi":91
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL             # <<<<<<<<<<<<<<
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 */
  __pyx_t_2 = (__pyx_v_p != 0);
  if (__pyx_t_2) {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_attrval_in != NULL) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(4, 91, __pyx_L1_error)
      }
    }
    #endif
  }

  /* "mpi4py/MPI/attrimpl.pxi":93
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in             # <<<<<<<<<<<<<<
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:
 */
  __pyx_t_2 = (__pyx_v_p != 0);
  if (__pyx_t_2) {
    __pyx_t_1 = ((PyObject *)__pyx_v_attrval_in);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_attrval = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/attrimpl.pxi":94
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)             # <<<<<<<<<<<<<<
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 */
  /*else*/ {
    __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_attrval_in); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_attrval = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/attrimpl.pxi":95
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 */
  __pyx_t_2 = (__pyx_v_state->delete_fn != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/attrimpl.pxi":96
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)             # <<<<<<<<<<<<<<
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)
 */
    __pyx_t_1 = __pyx_v_state->delete_fn;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(__pyx_t_1, __pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/attrimpl.pxi":95
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":97
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)             # <<<<<<<<<<<<<<
 *     Py_DECREF(state)
 *     return 0
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    Py_DECREF(__pyx_v_attrval);
  }

  /* "mpi4py/MPI/attrimpl.pxi":98
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  Py_DECREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/attrimpl.pxi":99
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_copy_cb(
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":84
 *     return 0
 * 
 * cdef inline int PyMPI_attr_delete(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_attrval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval_in, void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  int __pyx_v_p;
  PyObject *__pyx_v_attrval = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_delete", 0);

  /* "mpi4py/MPI/attrimpl.pxi":89
 *     void *attrval_in,
 *     void *extra_state) except -1:
 *     cdef _p_keyval state = <_p_keyval>extra_state             # <<<<<<<<<<<<<<
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":90
 *     void *extra_state) except -1:
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     cdef int p = not state.nopython             # <<<<<<<<<<<<<<
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 */
  __pyx_v_p = (!(__pyx_v_state->nopython != 0));

  /* "mpi4py/MPI/attrimpl.pxi":91
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL             # <<<<<<<<<<<<<<
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 */
  __pyx_t_2 = (__pyx_v_p != 0);
  if (__pyx_t_2) {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_attrval_in != NULL) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(4, 91, __pyx_L1_error)
      }
    }
    #endif
  }

  /* "mpi4py/MPI/attrimpl.pxi":93
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in             # <<<<<<<<<<<<<<
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:
 */
  __pyx_t_2 = (__pyx_v_p != 0);
  if (__pyx_t_2) {
    __pyx_t_1 = ((PyObject *)__pyx_v_attrval_in);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_attrval = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/attrimpl.pxi":94
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)             # <<<<<<<<<<<<<<
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 */
  /*else*/ {
    __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_attrval_in); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_attrval = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/attrimpl.pxi":95
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 */
  __pyx_t_2 = (__pyx_v_state->delete_fn != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/attrimpl.pxi":96
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)             # <<<<<<<<<<<<<<
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)
 */
    __pyx_t_1 = __pyx_v_state->delete_fn;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(__pyx_t_1, __pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/attrimpl.pxi":95
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":97
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)             # <<<<<<<<<<<<<<
 *     Py_DECREF(state)
 *     return 0
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    Py_DECREF(__pyx_v_attrval);
  }

  /* "mpi4py/MPI/attrimpl.pxi":98
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  Py_DECREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/attrimpl.pxi":99
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_copy_cb(
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":84
 *     return 0
 * 
 * cdef inline int PyMPI_attr_delete(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_attrval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval_in, void *__pyx_v_extra_state) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  int __pyx_v_p;
  PyObject *__pyx_v_attrval = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_delete", 0);

  /* "mpi4py/MPI/attrimpl.pxi":89
 *     void *attrval_in,
 *     void *extra_state) except -1:
 *     cdef _p_keyval state = <_p_keyval>extra_state             # <<<<<<<<<<<<<<
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_extra_state);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":90
 *     void *extra_state) except -1:
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     cdef int p = not state.nopython             # <<<<<<<<<<<<<<
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 */
  __pyx_v_p = (!(__pyx_v_state->nopython != 0));

  /* "mpi4py/MPI/attrimpl.pxi":91
 *     cdef _p_keyval state = <_p_keyval>extra_state
 *     cdef int p = not state.nopython
 *     if p: assert attrval_in != NULL             # <<<<<<<<<<<<<<
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 */
  __pyx_t_2 = (__pyx_v_p != 0);
  if (__pyx_t_2) {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!((__pyx_v_attrval_in != NULL) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(4, 91, __pyx_L1_error)
      }
    }
    #endif
  }

  /* "mpi4py/MPI/attrimpl.pxi":93
 *     if p: assert attrval_in != NULL
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in             # <<<<<<<<<<<<<<
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:
 */
  __pyx_t_2 = (__pyx_v_p != 0);
  if (__pyx_t_2) {
    __pyx_t_1 = ((PyObject *)__pyx_v_attrval_in);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_v_attrval = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/attrimpl.pxi":94
 *     cdef object attrval
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)             # <<<<<<<<<<<<<<
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 */
  /*else*/ {
    __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_attrval_in); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_attrval = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/attrimpl.pxi":95
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 */
  __pyx_t_2 = (__pyx_v_state->delete_fn != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/attrimpl.pxi":96
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)             # <<<<<<<<<<<<<<
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)
 */
    __pyx_t_1 = __pyx_v_state->delete_fn;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_call(__pyx_t_1, __pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/attrimpl.pxi":95
 *     if p: attrval = <object>attrval_in
 *     else: attrval = PyLong_FromVoidPtr(attrval_in)
 *     if state.delete_fn is not None:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":97
 *     if state.delete_fn is not None:
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)             # <<<<<<<<<<<<<<
 *     Py_DECREF(state)
 *     return 0
 */
  __pyx_t_3 = (__pyx_v_p != 0);
  if (__pyx_t_3) {
    Py_DECREF(__pyx_v_attrval);
  }

  /* "mpi4py/MPI/attrimpl.pxi":98
 *         PyMPI_attr_call(state.delete_fn, hdl, keyval, attrval)
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  Py_DECREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/attrimpl.pxi":99
 *     if p: Py_DECREF(attrval)
 *     Py_DECREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_copy_cb(
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":84
 *     return 0
 * 
 * cdef inline int PyMPI_attr_delete(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_attrval);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":101
 *     return 0
 * 
 * cdef inline int PyMPI_attr_copy_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_copy_cb", 0);

  /* "mpi4py/MPI/attrimpl.pxi":109
 *     int *flag,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/attrimpl.pxi":112
 *     cdef object exc
 *     try:
 *         PyMPI_attr_copy(hdl, keyval, extra_state,             # <<<<<<<<<<<<<<
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:
 */
      __pyx_t_4 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_extra_state, __pyx_v_attrval_in, __pyx_v_attrval_out, __pyx_v_flag); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 112, __pyx_L3_error)

      /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/attrimpl.pxi":114
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_0PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(4, 114, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/attrimpl.pxi":115
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":116
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/attrimpl.pxi":117
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_0PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(4, 117, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/attrimpl.pxi":118
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":119
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":120
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_delete_cb(
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":101
 *     return 0
 * 
 * cdef inline int PyMPI_attr_copy_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_copy_cb", 0);

  /* "mpi4py/MPI/attrimpl.pxi":109
 *     int *flag,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/attrimpl.pxi":112
 *     cdef object exc
 *     try:
 *         PyMPI_attr_copy(hdl, keyval, extra_state,             # <<<<<<<<<<<<<<
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:
 */
      __pyx_t_4 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_extra_state, __pyx_v_attrval_in, __pyx_v_attrval_out, __pyx_v_flag); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 112, __pyx_L3_error)

      /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/attrimpl.pxi":114
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_1PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(4, 114, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/attrimpl.pxi":115
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":116
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/attrimpl.pxi":117
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_1PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(4, 117, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/attrimpl.pxi":118
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":119
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":120
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_delete_cb(
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":101
 *     return 0
 * 
 * cdef inline int PyMPI_attr_copy_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_copy_cb", 0);

  /* "mpi4py/MPI/attrimpl.pxi":109
 *     int *flag,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/attrimpl.pxi":112
 *     cdef object exc
 *     try:
 *         PyMPI_attr_copy(hdl, keyval, extra_state,             # <<<<<<<<<<<<<<
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:
 */
      __pyx_t_4 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_extra_state, __pyx_v_attrval_in, __pyx_v_attrval_out, __pyx_v_flag); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 112, __pyx_L3_error)

      /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/attrimpl.pxi":114
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_2PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(4, 114, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/attrimpl.pxi":115
 *                         attrval_in, attrval_out, flag)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":116
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 116, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/attrimpl.pxi":117
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_2PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(4, 117, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/attrimpl.pxi":118
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":119
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/attrimpl.pxi":111
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_copy(hdl, keyval, extra_state,
 *                         attrval_in, attrval_out, flag)
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":120
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_delete_cb(
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":101
 *     return 0
 * 
 * cdef inline int PyMPI_attr_copy_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_copy_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":122
 *     return ierr
 * 
 * cdef inline int PyMPI_attr_delete_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval, void *__pyx_v_extra_state) {
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_delete_cb", 0);

  /* "mpi4py/MPI/attrimpl.pxi":128
 *     void *extra_state,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/attrimpl.pxi":131
 *     cdef object exc
 *     try:
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_4 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval, __pyx_v_extra_state); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 131, __pyx_L3_error)

      /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/attrimpl.pxi":132
 *     try:
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_0PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(4, 132, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/attrimpl.pxi":133
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":134
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/attrimpl.pxi":135
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_0PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(4, 135, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/attrimpl.pxi":136
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":137
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":138
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":122
 *     return ierr
 * 
 * cdef inline int PyMPI_attr_delete_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval, void *__pyx_v_extra_state) {
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_delete_cb", 0);

  /* "mpi4py/MPI/attrimpl.pxi":128
 *     void *extra_state,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/attrimpl.pxi":131
 *     cdef object exc
 *     try:
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_4 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval, __pyx_v_extra_state); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 131, __pyx_L3_error)

      /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/attrimpl.pxi":132
 *     try:
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_1PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(4, 132, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/attrimpl.pxi":133
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":134
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/attrimpl.pxi":135
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_1PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(4, 135, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/attrimpl.pxi":136
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":137
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":138
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":122
 *     return ierr
 * 
 * cdef inline int PyMPI_attr_delete_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval, void *__pyx_v_extra_state) {
  int __pyx_v_ierr;
  PyObject *__pyx_v_exc = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  #ifdef WITH_THREAD
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  #endif
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_delete_cb", 0);

  /* "mpi4py/MPI/attrimpl.pxi":128
 *     void *extra_state,
 *     ) except MPI_ERR_UNKNOWN with gil:
 *     cdef int ierr = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     cdef object exc
 *     try:
 */
  __pyx_v_ierr = MPI_SUCCESS;

  /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/attrimpl.pxi":131
 *     cdef object exc
 *     try:
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)             # <<<<<<<<<<<<<<
 *     except MPIException as exc:
 *         print_traceback()
 */
      __pyx_t_4 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval, __pyx_v_extra_state); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(4, 131, __pyx_L3_error)

      /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/attrimpl.pxi":132
 *     try:
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 */
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(__pyx_v_6mpi4py_3MPI_MPIException);
    if (__pyx_t_4) {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_2PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(4, 132, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_exc = __pyx_t_6;

      /* "mpi4py/MPI/attrimpl.pxi":133
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = exc.Get_error_code()
 *     except:
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":134
 *     except MPIException as exc:
 *         print_traceback()
 *         ierr = exc.Get_error_code()             # <<<<<<<<<<<<<<
 *     except:
 *         print_traceback()
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_exc, __pyx_n_s_Get_error_code); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 134, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ierr = __pyx_t_4;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }

    /* "mpi4py/MPI/attrimpl.pxi":135
 *         print_traceback()
 *         ierr = exc.Get_error_code()
 *     except:             # <<<<<<<<<<<<<<
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.__pyx_fuse_2PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(4, 135, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_5);

      /* "mpi4py/MPI/attrimpl.pxi":136
 *         ierr = exc.Get_error_code()
 *     except:
 *         print_traceback()             # <<<<<<<<<<<<<<
 *         ierr = MPI_ERR_OTHER
 *     return ierr
 */
      __pyx_f_6mpi4py_3MPI_print_traceback();

      /* "mpi4py/MPI/attrimpl.pxi":137
 *     except:
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 *     return ierr
 * 
 */
      __pyx_v_ierr = MPI_ERR_OTHER;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/attrimpl.pxi":130
 *     cdef int ierr = MPI_SUCCESS
 *     cdef object exc
 *     try:             # <<<<<<<<<<<<<<
 *         PyMPI_attr_delete(hdl, keyval, attrval, extra_state)
 *     except MPIException as exc:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/attrimpl.pxi":138
 *         print_traceback()
 *         ierr = MPI_ERR_OTHER
 *     return ierr             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = __pyx_v_ierr;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":122
 *     return ierr
 * 
 * cdef inline int PyMPI_attr_delete_cb(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_delete_cb", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = MPI_ERR_UNKNOWN;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_exc);
  __Pyx_RefNannyFinishContext();
  #ifdef WITH_THREAD
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  #endif
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":142
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_copy_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                           int keyval,
 *                           void *extra_state,
 */

static int MPIAPI __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":148
 *                           void *attrval_out,
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */
  __pyx_t_1 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_1) {
    (__pyx_v_flag[0]) = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":149
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":150
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":149
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":151
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_attrval_out == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":152
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":151
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":153
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":154
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 *                               attrval_in, attrval_out, flag)
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":153
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":155
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,             # <<<<<<<<<<<<<<
 *                               attrval_in, attrval_out, flag)
 * 
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_extra_state, __pyx_v_attrval_in, __pyx_v_attrval_out, __pyx_v_flag); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(4, 155, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":142
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_copy_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                           int keyval,
 *                           void *extra_state,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.PyMPI_attr_copy_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int MPIAPI __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":148
 *                           void *attrval_out,
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */
  __pyx_t_1 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_1) {
    (__pyx_v_flag[0]) = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":149
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":150
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":149
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":151
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_attrval_out == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":152
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":151
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":153
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":154
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 *                               attrval_in, attrval_out, flag)
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":153
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":155
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,             # <<<<<<<<<<<<<<
 *                               attrval_in, attrval_out, flag)
 * 
 */
  __pyx_t_2 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_extra_state, __pyx_v_attrval_in, __pyx_v_attrval_out, __pyx_v_flag); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(4, 155, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":142
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_copy_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                           int keyval,
 *                           void *extra_state,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.PyMPI_attr_copy_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int MPIAPI __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_extra_state, void *__pyx_v_attrval_in, void *__pyx_v_attrval_out, int *__pyx_v_flag) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":148
 *                           void *attrval_out,
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0             # <<<<<<<<<<<<<<
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 */
  __pyx_t_1 = ((__pyx_v_flag != NULL) != 0);
  if (__pyx_t_1) {
    (__pyx_v_flag[0]) = 0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":149
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":150
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":149
 *                           int *flag) nogil:
 *     if flag != NULL: flag[0] = 0
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":151
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_attrval_out == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":152
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":151
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if attrval_out == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":153
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":154
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 *                               attrval_in, attrval_out, flag)
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":153
 *     if attrval_out == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":155
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     return PyMPI_attr_copy_cb(hdl, keyval, extra_state,             # <<<<<<<<<<<<<<
 *                               attrval_in, attrval_out, flag)
 * 
 */
  __pyx_t_2 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_cb(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_extra_state, __pyx_v_attrval_in, __pyx_v_attrval_out, __pyx_v_flag); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(4, 155, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":142
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_copy_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                           int keyval,
 *                           void *extra_state,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.PyMPI_attr_copy_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":159
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_delete_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                             int keyval,
 *                             void *attrval,
 */

static int MPIAPI __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval, void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":163
 *                             void *attrval,
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":164
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":163
 *                             void *attrval,
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":165
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":166
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 * 
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":165
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":167
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval, __pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(4, 167, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":159
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_delete_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                             int keyval,
 *                             void *attrval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.PyMPI_attr_delete_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int MPIAPI __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval, void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":163
 *                             void *attrval,
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":164
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":163
 *                             void *attrval,
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":165
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":166
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 * 
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":165
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":167
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_t_2 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval, __pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(4, 167, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":159
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_delete_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                             int keyval,
 *                             void *attrval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.PyMPI_attr_delete_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

static int MPIAPI __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval, void *__pyx_v_extra_state) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/attrimpl.pxi":163
 *                             void *attrval,
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  __pyx_t_1 = ((__pyx_v_extra_state == NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":164
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 */
    __pyx_r = MPI_ERR_INTERN;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":163
 *                             void *attrval,
 *                             void *extra_state) nogil:
 *     if extra_state == NULL:             # <<<<<<<<<<<<<<
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":165
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_Py_IsInitialized() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/attrimpl.pxi":166
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 * 
 */
    __pyx_r = MPI_SUCCESS;
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":165
 *     if extra_state == NULL:
 *         return MPI_ERR_INTERN
 *     if not Py_IsInitialized():             # <<<<<<<<<<<<<<
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":167
 *     if not Py_IsInitialized():
 *         return MPI_SUCCESS
 *     return PyMPI_attr_delete_cb(hdl, keyval, attrval, extra_state)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_t_2 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_cb(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_attrval, __pyx_v_extra_state); if (unlikely(__pyx_t_2 == ((int)MPI_ERR_UNKNOWN))) __PYX_ERR(4, 167, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":159
 * 
 * @cython.callspec("MPIAPI")
 * cdef int PyMPI_attr_delete_fn(PyMPI_attr_type hdl,             # <<<<<<<<<<<<<<
 *                             int keyval,
 *                             void *attrval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.PyMPI_attr_delete_fn", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":171
 * #------------------------------------------------------------------------------
 * 
 * cdef inline _p_keyval PyMPI_attr_state(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval):
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_state", 0);

  /* "mpi4py/MPI/attrimpl.pxi":174
 *     PyMPI_attr_type hdl,
 *     int keyval):
 *     <void>hdl # unused             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Datatype:
 *         return <_p_keyval>type_keyval.get(keyval)
 */
  ((void)__pyx_v_hdl);

  /* "mpi4py/MPI/attrimpl.pxi":176
 *     <void>hdl # unused
 *     if PyMPI_attr_type is MPI_Datatype:
 *         return <_p_keyval>type_keyval.get(keyval)             # <<<<<<<<<<<<<<
 *     elif PyMPI_attr_type is MPI_Comm:
 *         return <_p_keyval>comm_keyval.get(keyval)
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  if (unlikely(__pyx_v_6mpi4py_3MPI_type_keyval == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(4, 176, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_6mpi4py_3MPI_type_keyval, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2)));
  __pyx_r = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":171
 * #------------------------------------------------------------------------------
 * 
 * cdef inline _p_keyval PyMPI_attr_state(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_state", 0);

  /* "mpi4py/MPI/attrimpl.pxi":174
 *     PyMPI_attr_type hdl,
 *     int keyval):
 *     <void>hdl # unused             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Datatype:
 *         return <_p_keyval>type_keyval.get(keyval)
 */
  ((void)__pyx_v_hdl);

  /* "mpi4py/MPI/attrimpl.pxi":178
 *         return <_p_keyval>type_keyval.get(keyval)
 *     elif PyMPI_attr_type is MPI_Comm:
 *         return <_p_keyval>comm_keyval.get(keyval)             # <<<<<<<<<<<<<<
 *     elif PyMPI_attr_type is MPI_Win:
 *         return <_p_keyval>win_keyval.get(keyval)
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  if (unlikely(__pyx_v_6mpi4py_3MPI_comm_keyval == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(4, 178, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_6mpi4py_3MPI_comm_keyval, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2)));
  __pyx_r = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":171
 * #------------------------------------------------------------------------------
 * 
 * cdef inline _p_keyval PyMPI_attr_state(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(MPI_Win __pyx_v_hdl, int __pyx_v_keyval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_state", 0);

  /* "mpi4py/MPI/attrimpl.pxi":174
 *     PyMPI_attr_type hdl,
 *     int keyval):
 *     <void>hdl # unused             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Datatype:
 *         return <_p_keyval>type_keyval.get(keyval)
 */
  ((void)__pyx_v_hdl);

  /* "mpi4py/MPI/attrimpl.pxi":180
 *         return <_p_keyval>comm_keyval.get(keyval)
 *     elif PyMPI_attr_type is MPI_Win:
 *         return <_p_keyval>win_keyval.get(keyval)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyMPI_attr_get(
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  if (unlikely(__pyx_v_6mpi4py_3MPI_win_keyval == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
    __PYX_ERR(4, 180, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_6mpi4py_3MPI_win_keyval, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_INCREF(((PyObject *)((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2)));
  __pyx_r = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":171
 * #------------------------------------------------------------------------------
 * 
 * cdef inline _p_keyval PyMPI_attr_state(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":182
 *         return <_p_keyval>win_keyval.get(keyval)
 * 
 * cdef inline object PyMPI_attr_get(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

static CYTHON_INLINE PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_get", 0);

  /* "mpi4py/MPI/attrimpl.pxi":186
 *     int keyval,
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)             # <<<<<<<<<<<<<<
 *     if state is not None and not state.nopython:
 *         return <object>attrval
 */
  __pyx_t_1 = ((PyObject *)__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(__pyx_v_hdl, __pyx_v_keyval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":187
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         return <object>attrval
 *     else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/attrimpl.pxi":188
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:
 *         return <object>attrval             # <<<<<<<<<<<<<<
 *     else:
 *         return PyLong_FromVoidPtr(attrval)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_attrval));
    __pyx_r = ((PyObject *)__pyx_v_attrval);
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":187
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         return <object>attrval
 *     else:
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":190
 *         return <object>attrval
 *     else:
 *         return PyLong_FromVoidPtr(attrval)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_set(
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_attrval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":182
 *         return <_p_keyval>win_keyval.get(keyval)
 * 
 * cdef inline object PyMPI_attr_get(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_get", 0);

  /* "mpi4py/MPI/attrimpl.pxi":186
 *     int keyval,
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)             # <<<<<<<<<<<<<<
 *     if state is not None and not state.nopython:
 *         return <object>attrval
 */
  __pyx_t_1 = ((PyObject *)__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(__pyx_v_hdl, __pyx_v_keyval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":187
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         return <object>attrval
 *     else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/attrimpl.pxi":188
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:
 *         return <object>attrval             # <<<<<<<<<<<<<<
 *     else:
 *         return PyLong_FromVoidPtr(attrval)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_attrval));
    __pyx_r = ((PyObject *)__pyx_v_attrval);
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":187
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         return <object>attrval
 *     else:
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":190
 *         return <object>attrval
 *     else:
 *         return PyLong_FromVoidPtr(attrval)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_set(
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_attrval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":182
 *         return <_p_keyval>win_keyval.get(keyval)
 * 
 * cdef inline object PyMPI_attr_get(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE PyObject *__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, void *__pyx_v_attrval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_get", 0);

  /* "mpi4py/MPI/attrimpl.pxi":186
 *     int keyval,
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)             # <<<<<<<<<<<<<<
 *     if state is not None and not state.nopython:
 *         return <object>attrval
 */
  __pyx_t_1 = ((PyObject *)__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(__pyx_v_hdl, __pyx_v_keyval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":187
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         return <object>attrval
 *     else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/attrimpl.pxi":188
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:
 *         return <object>attrval             # <<<<<<<<<<<<<<
 *     else:
 *         return PyLong_FromVoidPtr(attrval)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_attrval));
    __pyx_r = ((PyObject *)__pyx_v_attrval);
    goto __pyx_L0;

    /* "mpi4py/MPI/attrimpl.pxi":187
 *     void *attrval):
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         return <object>attrval
 *     else:
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":190
 *         return <object>attrval
 *     else:
 *         return PyLong_FromVoidPtr(attrval)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int PyMPI_attr_set(
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyLong_FromVoidPtr(__pyx_v_attrval); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/attrimpl.pxi":182
 *         return <_p_keyval>win_keyval.get(keyval)
 * 
 * cdef inline object PyMPI_attr_get(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/attrimpl.pxi":192
 *         return PyLong_FromVoidPtr(attrval)
 * 
 * cdef inline int PyMPI_attr_set(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

static CYTHON_INLINE int __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(MPI_Datatype __pyx_v_hdl, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  void *__pyx_v_valptr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("__pyx_fuse_0PyMPI_attr_set", 0);

  /* "mpi4py/MPI/attrimpl.pxi":197
 *     object attrval,
 *     ) except -1:
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)             # <<<<<<<<<<<<<<
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:
 */
  __pyx_t_1 = ((PyObject *)__pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(__pyx_v_hdl, __pyx_v_keyval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":198
 *     ) except -1:
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL             # <<<<<<<<<<<<<<
 *     if state is not None and not state.nopython:
 *         valptr = <void *>attrval
 */
  __pyx_v_valptr = NULL;

  /* "mpi4py/MPI/attrimpl.pxi":199
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         valptr = <void *>attrval
 *     else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/attrimpl.pxi":200
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:
 *         valptr = <void *>attrval             # <<<<<<<<<<<<<<
 *     else:
 *         valptr = PyLong_AsVoidPtr(attrval)
 */
    __pyx_v_valptr = ((void *)__pyx_v_attrval);

    /* "mpi4py/MPI/attrimpl.pxi":199
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         valptr = <void *>attrval
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/attrimpl.pxi":202
 *         valptr = <void *>attrval
 *     else:
 *         valptr = PyLong_AsVoidPtr(attrval)             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Datatype:
 *         CHKERR( MPI_Type_set_attr(hdl, keyval, valptr) )
 */
  /*else*/ {
    __pyx_v_valptr = PyLong_AsVoidPtr(__pyx_v_attrval);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/attrimpl.pxi":204
 *         valptr = PyLong_AsVoidPtr(attrval)
 *     if PyMPI_attr_type is MPI_Datatype:
 *         CHKERR( MPI_Type_set_attr(hdl, keyval, valptr) )             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Comm:
 *         CHKERR( MPI_Comm_set_attr(hdl, keyval, valptr) )
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_set_attr(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_valptr)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(4, 204, __pyx_L1_error)

  /* "mpi4py/MPI/attrimpl.pxi":209
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:             # <<<<<<<<<<<<<<
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/attrimpl.pxi":210
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:
 *         if not state.nopython:             # <<<<<<<<<<<<<<
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 */
    __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
    if (__pyx_t_4) {

      /* "mpi4py/MPI/attrimpl.pxi":211
 *     if state is not None:
 *         if not state.nopython:
 *             Py_INCREF(attrval)             # <<<<<<<<<<<<<<
 *         Py_INCREF(state)
 *     return 0
 */
      Py_INCREF(__pyx_v_attrval);

      /* "mpi4py/MPI/attrimpl.pxi":210
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:
 *         if not state.nopython:             # <<<<<<<<<<<<<<
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 */
    }

    /* "mpi4py/MPI/attrimpl.pxi":212
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    Py_INCREF(((PyObject *)__pyx_v_state));

    /* "mpi4py/MPI/attrimpl.pxi":209
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:             # <<<<<<<<<<<<<<
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":213
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":192
 *         return PyLong_FromVoidPtr(attrval)
 * 
 * cdef inline int PyMPI_attr_set(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(MPI_Comm __pyx_v_hdl, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  void *__pyx_v_valptr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("__pyx_fuse_1PyMPI_attr_set", 0);

  /* "mpi4py/MPI/attrimpl.pxi":197
 *     object attrval,
 *     ) except -1:
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)             # <<<<<<<<<<<<<<
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:
 */
  __pyx_t_1 = ((PyObject *)__pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(__pyx_v_hdl, __pyx_v_keyval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":198
 *     ) except -1:
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL             # <<<<<<<<<<<<<<
 *     if state is not None and not state.nopython:
 *         valptr = <void *>attrval
 */
  __pyx_v_valptr = NULL;

  /* "mpi4py/MPI/attrimpl.pxi":199
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         valptr = <void *>attrval
 *     else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/attrimpl.pxi":200
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:
 *         valptr = <void *>attrval             # <<<<<<<<<<<<<<
 *     else:
 *         valptr = PyLong_AsVoidPtr(attrval)
 */
    __pyx_v_valptr = ((void *)__pyx_v_attrval);

    /* "mpi4py/MPI/attrimpl.pxi":199
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         valptr = <void *>attrval
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/attrimpl.pxi":202
 *         valptr = <void *>attrval
 *     else:
 *         valptr = PyLong_AsVoidPtr(attrval)             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Datatype:
 *         CHKERR( MPI_Type_set_attr(hdl, keyval, valptr) )
 */
  /*else*/ {
    __pyx_v_valptr = PyLong_AsVoidPtr(__pyx_v_attrval);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/attrimpl.pxi":206
 *         CHKERR( MPI_Type_set_attr(hdl, keyval, valptr) )
 *     if PyMPI_attr_type is MPI_Comm:
 *         CHKERR( MPI_Comm_set_attr(hdl, keyval, valptr) )             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_attr(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_valptr)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(4, 206, __pyx_L1_error)

  /* "mpi4py/MPI/attrimpl.pxi":209
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:             # <<<<<<<<<<<<<<
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/attrimpl.pxi":210
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:
 *         if not state.nopython:             # <<<<<<<<<<<<<<
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 */
    __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
    if (__pyx_t_4) {

      /* "mpi4py/MPI/attrimpl.pxi":211
 *     if state is not None:
 *         if not state.nopython:
 *             Py_INCREF(attrval)             # <<<<<<<<<<<<<<
 *         Py_INCREF(state)
 *     return 0
 */
      Py_INCREF(__pyx_v_attrval);

      /* "mpi4py/MPI/attrimpl.pxi":210
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:
 *         if not state.nopython:             # <<<<<<<<<<<<<<
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 */
    }

    /* "mpi4py/MPI/attrimpl.pxi":212
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    Py_INCREF(((PyObject *)__pyx_v_state));

    /* "mpi4py/MPI/attrimpl.pxi":209
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:             # <<<<<<<<<<<<<<
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":213
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":192
 *         return PyLong_FromVoidPtr(attrval)
 * 
 * cdef inline int PyMPI_attr_set(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static CYTHON_INLINE int __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(MPI_Win __pyx_v_hdl, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *__pyx_v_state = 0;
  void *__pyx_v_valptr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("__pyx_fuse_2PyMPI_attr_set", 0);

  /* "mpi4py/MPI/attrimpl.pxi":197
 *     object attrval,
 *     ) except -1:
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)             # <<<<<<<<<<<<<<
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:
 */
  __pyx_t_1 = ((PyObject *)__pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_state(__pyx_v_hdl, __pyx_v_keyval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":198
 *     ) except -1:
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL             # <<<<<<<<<<<<<<
 *     if state is not None and not state.nopython:
 *         valptr = <void *>attrval
 */
  __pyx_v_valptr = NULL;

  /* "mpi4py/MPI/attrimpl.pxi":199
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         valptr = <void *>attrval
 *     else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/attrimpl.pxi":200
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:
 *         valptr = <void *>attrval             # <<<<<<<<<<<<<<
 *     else:
 *         valptr = PyLong_AsVoidPtr(attrval)
 */
    __pyx_v_valptr = ((void *)__pyx_v_attrval);

    /* "mpi4py/MPI/attrimpl.pxi":199
 *     cdef _p_keyval state = PyMPI_attr_state(hdl, keyval)
 *     cdef void *valptr = NULL
 *     if state is not None and not state.nopython:             # <<<<<<<<<<<<<<
 *         valptr = <void *>attrval
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/attrimpl.pxi":202
 *         valptr = <void *>attrval
 *     else:
 *         valptr = PyLong_AsVoidPtr(attrval)             # <<<<<<<<<<<<<<
 *     if PyMPI_attr_type is MPI_Datatype:
 *         CHKERR( MPI_Type_set_attr(hdl, keyval, valptr) )
 */
  /*else*/ {
    __pyx_v_valptr = PyLong_AsVoidPtr(__pyx_v_attrval);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/attrimpl.pxi":208
 *         CHKERR( MPI_Comm_set_attr(hdl, keyval, valptr) )
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )             # <<<<<<<<<<<<<<
 *     if state is not None:
 *         if not state.nopython:
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_set_attr(__pyx_v_hdl, __pyx_v_keyval, __pyx_v_valptr)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(4, 208, __pyx_L1_error)

  /* "mpi4py/MPI/attrimpl.pxi":209
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:             # <<<<<<<<<<<<<<
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_state) != Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/attrimpl.pxi":210
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:
 *         if not state.nopython:             # <<<<<<<<<<<<<<
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 */
    __pyx_t_4 = ((!(__pyx_v_state->nopython != 0)) != 0);
    if (__pyx_t_4) {

      /* "mpi4py/MPI/attrimpl.pxi":211
 *     if state is not None:
 *         if not state.nopython:
 *             Py_INCREF(attrval)             # <<<<<<<<<<<<<<
 *         Py_INCREF(state)
 *     return 0
 */
      Py_INCREF(__pyx_v_attrval);

      /* "mpi4py/MPI/attrimpl.pxi":210
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:
 *         if not state.nopython:             # <<<<<<<<<<<<<<
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 */
    }

    /* "mpi4py/MPI/attrimpl.pxi":212
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    Py_INCREF(((PyObject *)__pyx_v_state));

    /* "mpi4py/MPI/attrimpl.pxi":209
 *     if PyMPI_attr_type is MPI_Win:
 *         CHKERR( MPI_Win_set_attr(hdl, keyval, valptr) )
 *     if state is not None:             # <<<<<<<<<<<<<<
 *         if not state.nopython:
 *             Py_INCREF(attrval)
 */
  }

  /* "mpi4py/MPI/attrimpl.pxi":213
 *             Py_INCREF(attrval)
 *         Py_INCREF(state)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/attrimpl.pxi":192
 *         return PyLong_FromVoidPtr(attrval)
 * 
 * cdef inline int PyMPI_attr_set(             # <<<<<<<<<<<<<<
 *     PyMPI_attr_type hdl,
 *     int keyval,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_attr_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/mpierrhdl.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int comm_set_eh(MPI_Comm ob) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ob == MPI_COMM_NULL: return 0
 *     cdef int opt = options.errors
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_comm_set_eh(MPI_Comm __pyx_v_ob) {
  int __pyx_v_opt;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/mpierrhdl.pxi":4
 * 
 * cdef inline int comm_set_eh(MPI_Comm ob) nogil except -1:
 *     if ob == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *     cdef int opt = options.errors
 *     if   opt == 0: pass
 */
  __pyx_t_1 = ((__pyx_v_ob == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":5
 * cdef inline int comm_set_eh(MPI_Comm ob) nogil except -1:
 *     if ob == MPI_COMM_NULL: return 0
 *     cdef int opt = options.errors             # <<<<<<<<<<<<<<
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_RETURN) )
 */
  __pyx_t_2 = __pyx_v_6mpi4py_3MPI_options.errors;
  __pyx_v_opt = __pyx_t_2;

  /* "mpi4py/MPI/mpierrhdl.pxi":6
 *     if ob == MPI_COMM_NULL: return 0
 *     cdef int opt = options.errors
 *     if   opt == 0: pass             # <<<<<<<<<<<<<<
 *     elif opt == 1: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 */
  __pyx_t_1 = ((__pyx_v_opt == 0) != 0);
  if (__pyx_t_1) {
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":7
 *     cdef int opt = options.errors
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_RETURN) )             # <<<<<<<<<<<<<<
 *     elif opt == 2: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 *     return 0
 */
  __pyx_t_1 = ((__pyx_v_opt == 1) != 0);
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_errhandler(__pyx_v_ob, MPI_ERRORS_RETURN)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(17, 7, __pyx_L1_error)
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":8
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_1 = ((__pyx_v_opt == 2) != 0);
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_errhandler(__pyx_v_ob, MPI_ERRORS_ARE_FATAL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(17, 8, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/mpierrhdl.pxi":9
 *     elif opt == 1: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_Comm_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int win_set_eh(MPI_Win ob) nogil except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/mpierrhdl.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int comm_set_eh(MPI_Comm ob) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ob == MPI_COMM_NULL: return 0
 *     cdef int opt = options.errors
 */

  /* function exit code */
  __pyx_L1_error:;
  {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    __Pyx_AddTraceback("mpi4py.MPI.comm_set_eh", __pyx_clineno, __pyx_lineno, __pyx_filename);
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
  }
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/mpierrhdl.pxi":11
 *     return 0
 * 
 * cdef inline int win_set_eh(MPI_Win ob) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ob == MPI_WIN_NULL: return 0
 *     cdef int opt = options.errors
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_win_set_eh(MPI_Win __pyx_v_ob) {
  int __pyx_v_opt;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/mpierrhdl.pxi":12
 * 
 * cdef inline int win_set_eh(MPI_Win ob) nogil except -1:
 *     if ob == MPI_WIN_NULL: return 0             # <<<<<<<<<<<<<<
 *     cdef int opt = options.errors
 *     if   opt == 0: pass
 */
  __pyx_t_1 = ((__pyx_v_ob == MPI_WIN_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":13
 * cdef inline int win_set_eh(MPI_Win ob) nogil except -1:
 *     if ob == MPI_WIN_NULL: return 0
 *     cdef int opt = options.errors             # <<<<<<<<<<<<<<
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_RETURN) )
 */
  __pyx_t_2 = __pyx_v_6mpi4py_3MPI_options.errors;
  __pyx_v_opt = __pyx_t_2;

  /* "mpi4py/MPI/mpierrhdl.pxi":14
 *     if ob == MPI_WIN_NULL: return 0
 *     cdef int opt = options.errors
 *     if   opt == 0: pass             # <<<<<<<<<<<<<<
 *     elif opt == 1: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 */
  __pyx_t_1 = ((__pyx_v_opt == 0) != 0);
  if (__pyx_t_1) {
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":15
 *     cdef int opt = options.errors
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_RETURN) )             # <<<<<<<<<<<<<<
 *     elif opt == 2: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 *     return 0
 */
  __pyx_t_1 = ((__pyx_v_opt == 1) != 0);
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_set_errhandler(__pyx_v_ob, MPI_ERRORS_RETURN)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(17, 15, __pyx_L1_error)
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":16
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_1 = ((__pyx_v_opt == 2) != 0);
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_set_errhandler(__pyx_v_ob, MPI_ERRORS_ARE_FATAL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(17, 16, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/mpierrhdl.pxi":17
 *     elif opt == 1: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_Win_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline int file_set_eh(MPI_File ob) nogil except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/mpierrhdl.pxi":11
 *     return 0
 * 
 * cdef inline int win_set_eh(MPI_Win ob) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ob == MPI_WIN_NULL: return 0
 *     cdef int opt = options.errors
 */

  /* function exit code */
  __pyx_L1_error:;
  {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    __Pyx_AddTraceback("mpi4py.MPI.win_set_eh", __pyx_clineno, __pyx_lineno, __pyx_filename);
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
  }
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/mpierrhdl.pxi":19
 *     return 0
 * 
 * cdef inline int file_set_eh(MPI_File ob) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ob == MPI_FILE_NULL: return 0
 *     cdef int opt = options.errors
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_file_set_eh(MPI_File __pyx_v_ob) {
  int __pyx_v_opt;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/mpierrhdl.pxi":20
 * 
 * cdef inline int file_set_eh(MPI_File ob) nogil except -1:
 *     if ob == MPI_FILE_NULL: return 0             # <<<<<<<<<<<<<<
 *     cdef int opt = options.errors
 *     if   opt == 0: pass
 */
  __pyx_t_1 = ((__pyx_v_ob == MPI_FILE_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":21
 * cdef inline int file_set_eh(MPI_File ob) nogil except -1:
 *     if ob == MPI_FILE_NULL: return 0
 *     cdef int opt = options.errors             # <<<<<<<<<<<<<<
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_RETURN) )
 */
  __pyx_t_2 = __pyx_v_6mpi4py_3MPI_options.errors;
  __pyx_v_opt = __pyx_t_2;

  /* "mpi4py/MPI/mpierrhdl.pxi":22
 *     if ob == MPI_FILE_NULL: return 0
 *     cdef int opt = options.errors
 *     if   opt == 0: pass             # <<<<<<<<<<<<<<
 *     elif opt == 1: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 */
  __pyx_t_1 = ((__pyx_v_opt == 0) != 0);
  if (__pyx_t_1) {
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":23
 *     cdef int opt = options.errors
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_RETURN) )             # <<<<<<<<<<<<<<
 *     elif opt == 2: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 *     return 0
 */
  __pyx_t_1 = ((__pyx_v_opt == 1) != 0);
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_errhandler(__pyx_v_ob, MPI_ERRORS_RETURN)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(17, 23, __pyx_L1_error)
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/mpierrhdl.pxi":24
 *     if   opt == 0: pass
 *     elif opt == 1: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  __pyx_t_1 = ((__pyx_v_opt == 2) != 0);
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_errhandler(__pyx_v_ob, MPI_ERRORS_ARE_FATAL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(17, 24, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/mpierrhdl.pxi":25
 *     elif opt == 1: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_RETURN) )
 *     elif opt == 2: CHKERR( MPI_File_set_errhandler(ob, MPI_ERRORS_ARE_FATAL) )
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/mpierrhdl.pxi":19
 *     return 0
 * 
 * cdef inline int file_set_eh(MPI_File ob) nogil except -1:             # <<<<<<<<<<<<<<
 *     if ob == MPI_FILE_NULL: return 0
 *     cdef int opt = options.errors
 */

  /* function exit code */
  __pyx_L1_error:;
  {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    __Pyx_AddTraceback("mpi4py.MPI.file_set_eh", __pyx_clineno, __pyx_lineno, __pyx_filename);
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
  }
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":13
 *     Py_ssize_t PySequence_Size(object) except -1
 * 
 * cdef inline int is_integral(object ob):             # <<<<<<<<<<<<<<
 *     if not PyIndex_Check(ob): return 0
 *     if not PySequence_Check(ob): return 1
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_integral(PyObject *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  __Pyx_RefNannySetupContext("is_integral", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":14
 * 
 * cdef inline int is_integral(object ob):
 *     if not PyIndex_Check(ob): return 0             # <<<<<<<<<<<<<<
 *     if not PySequence_Check(ob): return 1
 *     try: PySequence_Size(ob)
 */
  __pyx_t_1 = ((!(PyIndex_Check(__pyx_v_ob) != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":15
 * cdef inline int is_integral(object ob):
 *     if not PyIndex_Check(ob): return 0
 *     if not PySequence_Check(ob): return 1             # <<<<<<<<<<<<<<
 *     try: PySequence_Size(ob)
 *     except: pass
 */
  __pyx_t_1 = ((!(PySequence_Check(__pyx_v_ob) != 0)) != 0);
  if (__pyx_t_1) {
    __pyx_r = 1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":16
 *     if not PyIndex_Check(ob): return 0
 *     if not PySequence_Check(ob): return 1
 *     try: PySequence_Size(ob)             # <<<<<<<<<<<<<<
 *     except: pass
 *     else: return 0
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {
      __pyx_t_5 = PySequence_Size(__pyx_v_ob); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1L))) __PYX_ERR(5, 16, __pyx_L5_error)
    }

    /* "mpi4py/MPI/msgbuffer.pxi":18
 *     try: PySequence_Size(ob)
 *     except: pass
 *     else: return 0             # <<<<<<<<<<<<<<
 *     try: PyNumber_Index(ob)
 *     except: return 0
 */
    /*else:*/ {
      __pyx_r = 0;
      goto __pyx_L8_except_return;
    }
    __pyx_L5_error:;

    /* "mpi4py/MPI/msgbuffer.pxi":17
 *     if not PySequence_Check(ob): return 1
 *     try: PySequence_Size(ob)
 *     except: pass             # <<<<<<<<<<<<<<
 *     else: return 0
 *     try: PyNumber_Index(ob)
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L6_exception_handled;
    }
    __pyx_L8_except_return:;

    /* "mpi4py/MPI/msgbuffer.pxi":16
 *     if not PyIndex_Check(ob): return 0
 *     if not PySequence_Check(ob): return 1
 *     try: PySequence_Size(ob)             # <<<<<<<<<<<<<<
 *     except: pass
 *     else: return 0
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
    __pyx_L6_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
  }

  /* "mpi4py/MPI/msgbuffer.pxi":19
 *     except: pass
 *     else: return 0
 *     try: PyNumber_Index(ob)             # <<<<<<<<<<<<<<
 *     except: return 0
 *     else: return 1
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_3, &__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_2);
    /*try:*/ {
      __pyx_t_6 = PyNumber_Index(__pyx_v_ob); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 19, __pyx_L11_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":21
 *     try: PyNumber_Index(ob)
 *     except: return 0
 *     else: return 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int is_buffer(object ob):
 */
    /*else:*/ {
      __pyx_r = 1;
      goto __pyx_L14_except_return;
    }
    __pyx_L11_error:;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":20
 *     else: return 0
 *     try: PyNumber_Index(ob)
 *     except: return 0             # <<<<<<<<<<<<<<
 *     else: return 1
 * 
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.is_integral", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(5, 20, __pyx_L13_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_r = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L14_except_return;
    }
    __pyx_L13_except_error:;

    /* "mpi4py/MPI/msgbuffer.pxi":19
 *     except: pass
 *     else: return 0
 *     try: PyNumber_Index(ob)             # <<<<<<<<<<<<<<
 *     except: return 0
 *     else: return 1
 */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    goto __pyx_L1_error;
    __pyx_L14_except_return:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_3, __pyx_t_2);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":13
 *     Py_ssize_t PySequence_Size(object) except -1
 * 
 * cdef inline int is_integral(object ob):             # <<<<<<<<<<<<<<
 *     if not PyIndex_Check(ob): return 0
 *     if not PySequence_Check(ob): return 1
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_WriteUnraisable("mpi4py.MPI.is_integral", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":23
 *     else: return 1
 * 
 * cdef inline int is_buffer(object ob):             # <<<<<<<<<<<<<<
 *     if PY3:
 *         return PyObject_CheckBuffer(ob)
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_buffer(PyObject *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("is_buffer", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":24
 * 
 * cdef inline int is_buffer(object ob):
 *     if PY3:             # <<<<<<<<<<<<<<
 *         return PyObject_CheckBuffer(ob)
 *     else:
 */
  if ((PY_MAJOR_VERSION>=3)) {

    /* "mpi4py/MPI/msgbuffer.pxi":25
 * cdef inline int is_buffer(object ob):
 *     if PY3:
 *         return PyObject_CheckBuffer(ob)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyObject_CheckBuffer(ob) or _Py2_IsBuffer(ob)
 */
    __pyx_r = PyObject_CheckBuffer(__pyx_v_ob);
    goto __pyx_L0;

    /* "mpi4py/MPI/msgbuffer.pxi":24
 * 
 * cdef inline int is_buffer(object ob):
 *     if PY3:             # <<<<<<<<<<<<<<
 *         return PyObject_CheckBuffer(ob)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":27
 *         return PyObject_CheckBuffer(ob)
 *     else:
 *         return PyObject_CheckBuffer(ob) or _Py2_IsBuffer(ob)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int is_datatype(object ob):
 */
  /*else*/ {
    __pyx_t_2 = PyObject_CheckBuffer(__pyx_v_ob);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_2 = _Py2_IsBuffer(__pyx_v_ob);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L4_bool_binop_done:;
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":23
 *     else: return 1
 * 
 * cdef inline int is_buffer(object ob):             # <<<<<<<<<<<<<<
 *     if PY3:
 *         return PyObject_CheckBuffer(ob)
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":29
 *         return PyObject_CheckBuffer(ob) or _Py2_IsBuffer(ob)
 * 
 * cdef inline int is_datatype(object ob):             # <<<<<<<<<<<<<<
 *     if isinstance(ob, Datatype): return 1
 *     if PY3:
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_is_datatype(PyObject *__pyx_v_ob) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("is_datatype", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":30
 * 
 * cdef inline int is_datatype(object ob):
 *     if isinstance(ob, Datatype): return 1             # <<<<<<<<<<<<<<
 *     if PY3:
 *         if isinstance(ob, unicode): return 1
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_ob, __pyx_ptype_6mpi4py_3MPI_Datatype); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":31
 * cdef inline int is_datatype(object ob):
 *     if isinstance(ob, Datatype): return 1
 *     if PY3:             # <<<<<<<<<<<<<<
 *         if isinstance(ob, unicode): return 1
 *     else:
 */
  if ((PY_MAJOR_VERSION>=3)) {

    /* "mpi4py/MPI/msgbuffer.pxi":32
 *     if isinstance(ob, Datatype): return 1
 *     if PY3:
 *         if isinstance(ob, unicode): return 1             # <<<<<<<<<<<<<<
 *     else:
 *         if isinstance(ob, bytes): return 1
 */
    __pyx_t_2 = PyUnicode_Check(__pyx_v_ob); 
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {
      __pyx_r = 1;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":31
 * cdef inline int is_datatype(object ob):
 *     if isinstance(ob, Datatype): return 1
 *     if PY3:             # <<<<<<<<<<<<<<
 *         if isinstance(ob, unicode): return 1
 *     else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":34
 *         if isinstance(ob, unicode): return 1
 *     else:
 *         if isinstance(ob, bytes): return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  /*else*/ {
    __pyx_t_1 = PyBytes_Check(__pyx_v_ob); 
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
      __pyx_r = 1;
      goto __pyx_L0;
    }
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":35
 *     else:
 *         if isinstance(ob, bytes): return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":29
 *         return PyObject_CheckBuffer(ob) or _Py2_IsBuffer(ob)
 * 
 * cdef inline int is_datatype(object ob):             # <<<<<<<<<<<<<<
 *     if isinstance(ob, Datatype): return 1
 *     if PY3:
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":42
 *     int INT_MAX
 * 
 * cdef inline int downcast(MPI_Aint value) except? -1:             # <<<<<<<<<<<<<<
 *     if value > <MPI_Aint>INT_MAX:
 *         raise OverflowError("integer %d does not fit in 'int'" % value)
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_downcast(MPI_Aint __pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("downcast", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":43
 * 
 * cdef inline int downcast(MPI_Aint value) except? -1:
 *     if value > <MPI_Aint>INT_MAX:             # <<<<<<<<<<<<<<
 *         raise OverflowError("integer %d does not fit in 'int'" % value)
 *     else:
 */
  __pyx_t_1 = ((__pyx_v_value > ((MPI_Aint)INT_MAX)) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/msgbuffer.pxi":44
 * cdef inline int downcast(MPI_Aint value) except? -1:
 *     if value > <MPI_Aint>INT_MAX:
 *         raise OverflowError("integer %d does not fit in 'int'" % value)             # <<<<<<<<<<<<<<
 *     else:
 *         return <int>value
 */
    __pyx_t_2 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 44, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_integer_d_does_not_fit_in_int, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 44, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_OverflowError, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 44, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(5, 44, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":43
 * 
 * cdef inline int downcast(MPI_Aint value) except? -1:
 *     if value > <MPI_Aint>INT_MAX:             # <<<<<<<<<<<<<<
 *         raise OverflowError("integer %d does not fit in 'int'" % value)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":46
 *         raise OverflowError("integer %d does not fit in 'int'" % value)
 *     else:
 *         return <int>value             # <<<<<<<<<<<<<<
 * 
 * cdef inline int clipcount(MPI_Aint value):
 */
  /*else*/ {
    __pyx_r = ((int)__pyx_v_value);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":42
 *     int INT_MAX
 * 
 * cdef inline int downcast(MPI_Aint value) except? -1:             # <<<<<<<<<<<<<<
 *     if value > <MPI_Aint>INT_MAX:
 *         raise OverflowError("integer %d does not fit in 'int'" % value)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.downcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":48
 *         return <int>value
 * 
 * cdef inline int clipcount(MPI_Aint value):             # <<<<<<<<<<<<<<
 *     if value > <MPI_Aint>INT_MAX:
 *         return INT_MAX
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_clipcount(MPI_Aint __pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("clipcount", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":49
 * 
 * cdef inline int clipcount(MPI_Aint value):
 *     if value > <MPI_Aint>INT_MAX:             # <<<<<<<<<<<<<<
 *         return INT_MAX
 *     else:
 */
  __pyx_t_1 = ((__pyx_v_value > ((MPI_Aint)INT_MAX)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":50
 * cdef inline int clipcount(MPI_Aint value):
 *     if value > <MPI_Aint>INT_MAX:
 *         return INT_MAX             # <<<<<<<<<<<<<<
 *     else:
 *         return <int>value
 */
    __pyx_r = INT_MAX;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgbuffer.pxi":49
 * 
 * cdef inline int clipcount(MPI_Aint value):
 *     if value > <MPI_Aint>INT_MAX:             # <<<<<<<<<<<<<<
 *         return INT_MAX
 *     else:
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":52
 *         return INT_MAX
 *     else:
 *         return <int>value             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  /*else*/ {
    __pyx_r = ((int)__pyx_v_value);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":48
 *         return <int>value
 * 
 * cdef inline int clipcount(MPI_Aint value):             # <<<<<<<<<<<<<<
 *     if value > <MPI_Aint>INT_MAX:
 *         return INT_MAX
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":70
 *     cdef Datatype type
 * 
 * cdef _p_message message_basic(object o_buf,             # <<<<<<<<<<<<<<
 *                               object o_type,
 *                               bint readonly,
 */

static struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_f_6mpi4py_3MPI_message_basic(PyObject *__pyx_v_o_buf, PyObject *__pyx_v_o_type, int __pyx_v_readonly, void **__pyx_v_baddr, MPI_Aint *__pyx_v_bsize, MPI_Datatype *__pyx_v_btype) {
  struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_v_m = 0;
  int __pyx_v_fmt;
  struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  MPI_Datatype __pyx_t_6;
  __Pyx_RefNannySetupContext("message_basic", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":78
 *                               MPI_Datatype *btype,
 *                               ):
 *     cdef _p_message m = <_p_message>_p_message.__new__(_p_message)             # <<<<<<<<<<<<<<
 *     # special-case for BOTTOM or None,
 *     # an explicit MPI datatype is required
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 78, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_message *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":81
 *     # special-case for BOTTOM or None,
 *     # an explicit MPI datatype is required
 *     if o_buf is __BOTTOM__ or o_buf is None:             # <<<<<<<<<<<<<<
 *         if isinstance(o_type, Datatype):
 *             m.type = <Datatype>o_type
 */
  __pyx_t_4 = (__pyx_v_o_buf == __pyx_v_6mpi4py_3MPI___BOTTOM__);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_o_buf == Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":82
 *     # an explicit MPI datatype is required
 *     if o_buf is __BOTTOM__ or o_buf is None:
 *         if isinstance(o_type, Datatype):             # <<<<<<<<<<<<<<
 *             m.type = <Datatype>o_type
 *         else:
 */
    __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_o_type, __pyx_ptype_6mpi4py_3MPI_Datatype); 
    __pyx_t_4 = (__pyx_t_3 != 0);
    if (__pyx_t_4) {

      /* "mpi4py/MPI/msgbuffer.pxi":83
 *     if o_buf is __BOTTOM__ or o_buf is None:
 *         if isinstance(o_type, Datatype):
 *             m.type = <Datatype>o_type             # <<<<<<<<<<<<<<
 *         else:
 *             m.type = TypeDict[o_type]
 */
      __pyx_t_2 = __pyx_v_o_type;
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_v_m->type);
      __Pyx_DECREF(((PyObject *)__pyx_v_m->type));
      __pyx_v_m->type = ((struct PyMPIDatatypeObject *)__pyx_t_2);
      __pyx_t_2 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":82
 *     # an explicit MPI datatype is required
 *     if o_buf is __BOTTOM__ or o_buf is None:
 *         if isinstance(o_type, Datatype):             # <<<<<<<<<<<<<<
 *             m.type = <Datatype>o_type
 *         else:
 */
      goto __pyx_L6;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":85
 *             m.type = <Datatype>o_type
 *         else:
 *             m.type = TypeDict[o_type]             # <<<<<<<<<<<<<<
 *         m.buf = newbuffer()
 *         baddr[0] = MPI_BOTTOM
 */
    /*else*/ {
      if (unlikely(__pyx_v_6mpi4py_3MPI_TypeDict == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(5, 85, __pyx_L1_error)
      }
      __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_6mpi4py_3MPI_TypeDict, __pyx_v_o_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 85, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Datatype))))) __PYX_ERR(5, 85, __pyx_L1_error)
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_v_m->type);
      __Pyx_DECREF(((PyObject *)__pyx_v_m->type));
      __pyx_v_m->type = ((struct PyMPIDatatypeObject *)__pyx_t_2);
      __pyx_t_2 = 0;
    }
    __pyx_L6:;

    /* "mpi4py/MPI/msgbuffer.pxi":86
 *         else:
 *             m.type = TypeDict[o_type]
 *         m.buf = newbuffer()             # <<<<<<<<<<<<<<
 *         baddr[0] = MPI_BOTTOM
 *         bsize[0] = 0
 */
    __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_newbuffer()); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 86, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_m->buf);
    __Pyx_DECREF(((PyObject *)__pyx_v_m->buf));
    __pyx_v_m->buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":87
 *             m.type = TypeDict[o_type]
 *         m.buf = newbuffer()
 *         baddr[0] = MPI_BOTTOM             # <<<<<<<<<<<<<<
 *         bsize[0] = 0
 *         btype[0] = m.type.ob_mpi
 */
    (__pyx_v_baddr[0]) = MPI_BOTTOM;

    /* "mpi4py/MPI/msgbuffer.pxi":88
 *         m.buf = newbuffer()
 *         baddr[0] = MPI_BOTTOM
 *         bsize[0] = 0             # <<<<<<<<<<<<<<
 *         btype[0] = m.type.ob_mpi
 *         return m
 */
    (__pyx_v_bsize[0]) = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":89
 *         baddr[0] = MPI_BOTTOM
 *         bsize[0] = 0
 *         btype[0] = m.type.ob_mpi             # <<<<<<<<<<<<<<
 *         return m
 *     # get buffer base address and length
 */
    __pyx_t_6 = __pyx_v_m->type->ob_mpi;
    (__pyx_v_btype[0]) = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":90
 *         bsize[0] = 0
 *         btype[0] = m.type.ob_mpi
 *         return m             # <<<<<<<<<<<<<<
 *     # get buffer base address and length
 *     cdef bint fmt = (o_type is None)
 */
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __Pyx_INCREF(((PyObject *)__pyx_v_m));
    __pyx_r = __pyx_v_m;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgbuffer.pxi":81
 *     # special-case for BOTTOM or None,
 *     # an explicit MPI datatype is required
 *     if o_buf is __BOTTOM__ or o_buf is None:             # <<<<<<<<<<<<<<
 *         if isinstance(o_type, Datatype):
 *             m.type = <Datatype>o_type
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":92
 *         return m
 *     # get buffer base address and length
 *     cdef bint fmt = (o_type is None)             # <<<<<<<<<<<<<<
 *     m.buf = getbuffer(o_buf, readonly, fmt)
 *     baddr[0] = <void*>    m.buf.view.buf
 */
  __pyx_t_4 = (__pyx_v_o_type == Py_None);
  __pyx_v_fmt = __pyx_t_4;

  /* "mpi4py/MPI/msgbuffer.pxi":93
 *     # get buffer base address and length
 *     cdef bint fmt = (o_type is None)
 *     m.buf = getbuffer(o_buf, readonly, fmt)             # <<<<<<<<<<<<<<
 *     baddr[0] = <void*>    m.buf.view.buf
 *     bsize[0] = <MPI_Aint> m.buf.view.len
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer(__pyx_v_o_buf, __pyx_v_readonly, __pyx_v_fmt)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_m->buf);
  __Pyx_DECREF(((PyObject *)__pyx_v_m->buf));
  __pyx_v_m->buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":94
 *     cdef bint fmt = (o_type is None)
 *     m.buf = getbuffer(o_buf, readonly, fmt)
 *     baddr[0] = <void*>    m.buf.view.buf             # <<<<<<<<<<<<<<
 *     bsize[0] = <MPI_Aint> m.buf.view.len
 *     # lookup datatype if not provided or not a Datatype
 */
  (__pyx_v_baddr[0]) = ((void *)__pyx_v_m->buf->view.buf);

  /* "mpi4py/MPI/msgbuffer.pxi":95
 *     m.buf = getbuffer(o_buf, readonly, fmt)
 *     baddr[0] = <void*>    m.buf.view.buf
 *     bsize[0] = <MPI_Aint> m.buf.view.len             # <<<<<<<<<<<<<<
 *     # lookup datatype if not provided or not a Datatype
 *     if isinstance(o_type, Datatype):
 */
  (__pyx_v_bsize[0]) = ((MPI_Aint)__pyx_v_m->buf->view.len);

  /* "mpi4py/MPI/msgbuffer.pxi":97
 *     bsize[0] = <MPI_Aint> m.buf.view.len
 *     # lookup datatype if not provided or not a Datatype
 *     if isinstance(o_type, Datatype):             # <<<<<<<<<<<<<<
 *         m.type = <Datatype>o_type
 *     elif o_type is None:
 */
  __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_o_type, __pyx_ptype_6mpi4py_3MPI_Datatype); 
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":98
 *     # lookup datatype if not provided or not a Datatype
 *     if isinstance(o_type, Datatype):
 *         m.type = <Datatype>o_type             # <<<<<<<<<<<<<<
 *     elif o_type is None:
 *         m.type = TypeDict[getformat(m.buf)]
 */
    __pyx_t_2 = __pyx_v_o_type;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_m->type);
    __Pyx_DECREF(((PyObject *)__pyx_v_m->type));
    __pyx_v_m->type = ((struct PyMPIDatatypeObject *)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":97
 *     bsize[0] = <MPI_Aint> m.buf.view.len
 *     # lookup datatype if not provided or not a Datatype
 *     if isinstance(o_type, Datatype):             # <<<<<<<<<<<<<<
 *         m.type = <Datatype>o_type
 *     elif o_type is None:
 */
    goto __pyx_L7;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":99
 *     if isinstance(o_type, Datatype):
 *         m.type = <Datatype>o_type
 *     elif o_type is None:             # <<<<<<<<<<<<<<
 *         m.type = TypeDict[getformat(m.buf)]
 *     else:
 */
  __pyx_t_3 = (__pyx_v_o_type == Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/msgbuffer.pxi":100
 *         m.type = <Datatype>o_type
 *     elif o_type is None:
 *         m.type = TypeDict[getformat(m.buf)]             # <<<<<<<<<<<<<<
 *     else:
 *         m.type = TypeDict[o_type]
 */
    if (unlikely(__pyx_v_6mpi4py_3MPI_TypeDict == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(5, 100, __pyx_L1_error)
    }
    __pyx_t_2 = ((PyObject *)__pyx_v_m->buf);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_getformat(((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_6mpi4py_3MPI_TypeDict, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Datatype))))) __PYX_ERR(5, 100, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_m->type);
    __Pyx_DECREF(((PyObject *)__pyx_v_m->type));
    __pyx_v_m->type = ((struct PyMPIDatatypeObject *)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":99
 *     if isinstance(o_type, Datatype):
 *         m.type = <Datatype>o_type
 *     elif o_type is None:             # <<<<<<<<<<<<<<
 *         m.type = TypeDict[getformat(m.buf)]
 *     else:
 */
    goto __pyx_L7;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":102
 *         m.type = TypeDict[getformat(m.buf)]
 *     else:
 *         m.type = TypeDict[o_type]             # <<<<<<<<<<<<<<
 *     btype[0] = m.type.ob_mpi
 *     # and we are done ...
 */
  /*else*/ {
    if (unlikely(__pyx_v_6mpi4py_3MPI_TypeDict == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(5, 102, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_6mpi4py_3MPI_TypeDict, __pyx_v_o_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 102, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_6mpi4py_3MPI_Datatype))))) __PYX_ERR(5, 102, __pyx_L1_error)
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_m->type);
    __Pyx_DECREF(((PyObject *)__pyx_v_m->type));
    __pyx_v_m->type = ((struct PyMPIDatatypeObject *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L7:;

  /* "mpi4py/MPI/msgbuffer.pxi":103
 *     else:
 *         m.type = TypeDict[o_type]
 *     btype[0] = m.type.ob_mpi             # <<<<<<<<<<<<<<
 *     # and we are done ...
 *     return m
 */
  __pyx_t_6 = __pyx_v_m->type->ob_mpi;
  (__pyx_v_btype[0]) = __pyx_t_6;

  /* "mpi4py/MPI/msgbuffer.pxi":105
 *     btype[0] = m.type.ob_mpi
 *     # and we are done ...
 *     return m             # <<<<<<<<<<<<<<
 * 
 * cdef _p_message message_simple(object msg,
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __pyx_r = __pyx_v_m;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":70
 *     cdef Datatype type
 * 
 * cdef _p_message message_basic(object o_buf,             # <<<<<<<<<<<<<<
 *                               object o_type,
 *                               bint readonly,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_basic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":107
 *     return m
 * 
 * cdef _p_message message_simple(object msg,             # <<<<<<<<<<<<<<
 *                                int readonly,
 *                                int rank,
 */

static struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_f_6mpi4py_3MPI_message_simple(PyObject *__pyx_v_msg, int __pyx_v_readonly, int __pyx_v_rank, int __pyx_v_blocks, void **__pyx_v__addr, int *__pyx_v__count, MPI_Datatype *__pyx_v__type) {
  Py_ssize_t __pyx_v_nargs;
  PyObject *__pyx_v_o_buf = 0;
  PyObject *__pyx_v_o_count = 0;
  PyObject *__pyx_v_o_displ = 0;
  PyObject *__pyx_v_o_type = 0;
  void *__pyx_v_baddr;
  MPI_Aint __pyx_v_bsize;
  MPI_Datatype __pyx_v_btype;
  struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_v_m = 0;
  int __pyx_v_count;
  int __pyx_v_displ;
  MPI_Aint __pyx_v_extent;
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_length;
  MPI_Aint __pyx_v_offset;
  struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("message_simple", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":117
 *                                ):
 *     # special-case PROC_NULL target rank
 *     if rank == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         _addr[0]  = NULL
 *         _count[0] = 0
 */
  __pyx_t_1 = ((__pyx_v_rank == MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":118
 *     # special-case PROC_NULL target rank
 *     if rank == MPI_PROC_NULL:
 *         _addr[0]  = NULL             # <<<<<<<<<<<<<<
 *         _count[0] = 0
 *         _type[0]  = MPI_BYTE
 */
    (__pyx_v__addr[0]) = NULL;

    /* "mpi4py/MPI/msgbuffer.pxi":119
 *     if rank == MPI_PROC_NULL:
 *         _addr[0]  = NULL
 *         _count[0] = 0             # <<<<<<<<<<<<<<
 *         _type[0]  = MPI_BYTE
 *         return None
 */
    (__pyx_v__count[0]) = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":120
 *         _addr[0]  = NULL
 *         _count[0] = 0
 *         _type[0]  = MPI_BYTE             # <<<<<<<<<<<<<<
 *         return None
 *     # unpack message list/tuple
 */
    (__pyx_v__type[0]) = MPI_BYTE;

    /* "mpi4py/MPI/msgbuffer.pxi":121
 *         _count[0] = 0
 *         _type[0]  = MPI_BYTE
 *         return None             # <<<<<<<<<<<<<<
 *     # unpack message list/tuple
 *     cdef Py_ssize_t nargs = 0
 */
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __pyx_r = ((struct __pyx_obj_6mpi4py_3MPI__p_message *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/msgbuffer.pxi":117
 *                                ):
 *     # special-case PROC_NULL target rank
 *     if rank == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         _addr[0]  = NULL
 *         _count[0] = 0
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":123
 *         return None
 *     # unpack message list/tuple
 *     cdef Py_ssize_t nargs = 0             # <<<<<<<<<<<<<<
 *     cdef object o_buf   = None
 *     cdef object o_count = None
 */
  __pyx_v_nargs = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":124
 *     # unpack message list/tuple
 *     cdef Py_ssize_t nargs = 0
 *     cdef object o_buf   = None             # <<<<<<<<<<<<<<
 *     cdef object o_count = None
 *     cdef object o_displ = None
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_buf = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":125
 *     cdef Py_ssize_t nargs = 0
 *     cdef object o_buf   = None
 *     cdef object o_count = None             # <<<<<<<<<<<<<<
 *     cdef object o_displ = None
 *     cdef object o_type  = None
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_count = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":126
 *     cdef object o_buf   = None
 *     cdef object o_count = None
 *     cdef object o_displ = None             # <<<<<<<<<<<<<<
 *     cdef object o_type  = None
 *     if is_buffer(msg):
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_displ = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":127
 *     cdef object o_count = None
 *     cdef object o_displ = None
 *     cdef object o_type  = None             # <<<<<<<<<<<<<<
 *     if is_buffer(msg):
 *         o_buf = msg
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_type = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":128
 *     cdef object o_displ = None
 *     cdef object o_type  = None
 *     if is_buffer(msg):             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):
 */
  __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_is_buffer(__pyx_v_msg) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":129
 *     cdef object o_type  = None
 *     if is_buffer(msg):
 *         o_buf = msg             # <<<<<<<<<<<<<<
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)
 */
    __Pyx_INCREF(__pyx_v_msg);
    __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_v_msg);

    /* "mpi4py/MPI/msgbuffer.pxi":128
 *     cdef object o_displ = None
 *     cdef object o_type  = None
 *     if is_buffer(msg):             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":130
 *     if is_buffer(msg):
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):             # <<<<<<<<<<<<<<
 *         nargs = len(msg)
 *         if nargs == 2:
 */
  __pyx_t_2 = (PyList_Check(__pyx_v_msg) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (PyTuple_Check(__pyx_v_msg) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":131
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)             # <<<<<<<<<<<<<<
 *         if nargs == 2:
 *             (o_buf, o_count) = msg
 */
    __pyx_t_3 = PyObject_Length(__pyx_v_msg); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(5, 131, __pyx_L1_error)
    __pyx_v_nargs = __pyx_t_3;

    /* "mpi4py/MPI/msgbuffer.pxi":132
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)
 *         if nargs == 2:             # <<<<<<<<<<<<<<
 *             (o_buf, o_count) = msg
 *             if is_datatype(o_count):
 */
    __pyx_t_1 = ((__pyx_v_nargs == 2) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":133
 *         nargs = len(msg)
 *         if nargs == 2:
 *             (o_buf, o_count) = msg             # <<<<<<<<<<<<<<
 *             if is_datatype(o_count):
 *                 (o_count, o_type) = None, o_count
 */
      if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
        PyObject* sequence = __pyx_v_msg;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(5, 133, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 133, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 133, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_6 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 133, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
        index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(5, 133, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L9_unpacking_done;
        __pyx_L8_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(5, 133, __pyx_L1_error)
        __pyx_L9_unpacking_done:;
      }
      __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_count, __pyx_t_5);
      __pyx_t_5 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":134
 *         if nargs == 2:
 *             (o_buf, o_count) = msg
 *             if is_datatype(o_count):             # <<<<<<<<<<<<<<
 *                 (o_count, o_type) = None, o_count
 *             elif is_tuple(o_count) or is_list(o_count):
 */
      __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_is_datatype(__pyx_v_o_count) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/msgbuffer.pxi":135
 *             (o_buf, o_count) = msg
 *             if is_datatype(o_count):
 *                 (o_count, o_type) = None, o_count             # <<<<<<<<<<<<<<
 *             elif is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count
 */
        __pyx_t_5 = Py_None;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_4 = __pyx_v_o_count;
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_DECREF_SET(__pyx_v_o_count, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_DECREF_SET(__pyx_v_o_type, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":134
 *         if nargs == 2:
 *             (o_buf, o_count) = msg
 *             if is_datatype(o_count):             # <<<<<<<<<<<<<<
 *                 (o_count, o_type) = None, o_count
 *             elif is_tuple(o_count) or is_list(o_count):
 */
        goto __pyx_L10;
      }

      /* "mpi4py/MPI/msgbuffer.pxi":136
 *             if is_datatype(o_count):
 *                 (o_count, o_type) = None, o_count
 *             elif is_tuple(o_count) or is_list(o_count):             # <<<<<<<<<<<<<<
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 3:
 */
      __pyx_t_2 = (PyTuple_Check(__pyx_v_o_count) != 0);
      if (!__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_2 = (PyList_Check(__pyx_v_o_count) != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L11_bool_binop_done:;
      if (__pyx_t_1) {

        /* "mpi4py/MPI/msgbuffer.pxi":137
 *                 (o_count, o_type) = None, o_count
 *             elif is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count             # <<<<<<<<<<<<<<
 *         elif nargs == 3:
 *             (o_buf, o_count, o_type) = msg
 */
        if ((likely(PyTuple_CheckExact(__pyx_v_o_count))) || (PyList_CheckExact(__pyx_v_o_count))) {
          PyObject* sequence = __pyx_v_o_count;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 2)) {
            if (size > 2) __Pyx_RaiseTooManyValuesError(2);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(5, 137, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          #else
          __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          Py_ssize_t index = -1;
          __pyx_t_6 = PyObject_GetIter(__pyx_v_o_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
          index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L13_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_4);
          index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L13_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_5);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(5, 137, __pyx_L1_error)
          __pyx_t_7 = NULL;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L14_unpacking_done;
          __pyx_L13_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_7 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(5, 137, __pyx_L1_error)
          __pyx_L14_unpacking_done:;
        }
        __Pyx_DECREF_SET(__pyx_v_o_count, __pyx_t_4);
        __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_o_displ, __pyx_t_5);
        __pyx_t_5 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":136
 *             if is_datatype(o_count):
 *                 (o_count, o_type) = None, o_count
 *             elif is_tuple(o_count) or is_list(o_count):             # <<<<<<<<<<<<<<
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 3:
 */
      }
      __pyx_L10:;

      /* "mpi4py/MPI/msgbuffer.pxi":132
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)
 *         if nargs == 2:             # <<<<<<<<<<<<<<
 *             (o_buf, o_count) = msg
 *             if is_datatype(o_count):
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":138
 *             elif is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 3:             # <<<<<<<<<<<<<<
 *             (o_buf, o_count, o_type) = msg
 *             if is_tuple(o_count) or is_list(o_count):
 */
    __pyx_t_1 = ((__pyx_v_nargs == 3) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":139
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 3:
 *             (o_buf, o_count, o_type) = msg             # <<<<<<<<<<<<<<
 *             if is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count
 */
      if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
        PyObject* sequence = __pyx_v_msg;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 3)) {
          if (size > 3) __Pyx_RaiseTooManyValuesError(3);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(5, 139, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
        } else {
          __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
        }
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        #else
        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_8 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 139, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext;
        index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 2; __pyx_t_6 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_8), 3) < 0) __PYX_ERR(5, 139, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L16_unpacking_done;
        __pyx_L15_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(5, 139, __pyx_L1_error)
        __pyx_L16_unpacking_done:;
      }
      __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_count, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_type, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":140
 *         elif nargs == 3:
 *             (o_buf, o_count, o_type) = msg
 *             if is_tuple(o_count) or is_list(o_count):             # <<<<<<<<<<<<<<
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 4:
 */
      __pyx_t_2 = (PyTuple_Check(__pyx_v_o_count) != 0);
      if (!__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_2 = (PyList_Check(__pyx_v_o_count) != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L18_bool_binop_done:;
      if (__pyx_t_1) {

        /* "mpi4py/MPI/msgbuffer.pxi":141
 *             (o_buf, o_count, o_type) = msg
 *             if is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count             # <<<<<<<<<<<<<<
 *         elif nargs == 4:
 *             (o_buf, o_count, o_displ, o_type) = msg
 */
        if ((likely(PyTuple_CheckExact(__pyx_v_o_count))) || (PyList_CheckExact(__pyx_v_o_count))) {
          PyObject* sequence = __pyx_v_o_count;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 2)) {
            if (size > 2) __Pyx_RaiseTooManyValuesError(2);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(5, 141, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_4);
          #else
          __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          Py_ssize_t index = -1;
          __pyx_t_5 = PyObject_GetIter(__pyx_v_o_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
          index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_6)) goto __pyx_L20_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_6);
          index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L20_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_4);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(5, 141, __pyx_L1_error)
          __pyx_t_7 = NULL;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L21_unpacking_done;
          __pyx_L20_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_7 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(5, 141, __pyx_L1_error)
          __pyx_L21_unpacking_done:;
        }
        __Pyx_DECREF_SET(__pyx_v_o_count, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_o_displ, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":140
 *         elif nargs == 3:
 *             (o_buf, o_count, o_type) = msg
 *             if is_tuple(o_count) or is_list(o_count):             # <<<<<<<<<<<<<<
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 4:
 */
      }

      /* "mpi4py/MPI/msgbuffer.pxi":138
 *             elif is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 3:             # <<<<<<<<<<<<<<
 *             (o_buf, o_count, o_type) = msg
 *             if is_tuple(o_count) or is_list(o_count):
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":142
 *             if is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 4:             # <<<<<<<<<<<<<<
 *             (o_buf, o_count, o_displ, o_type) = msg
 *         else:
 */
    __pyx_t_1 = ((__pyx_v_nargs == 4) != 0);
    if (likely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":143
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 4:
 *             (o_buf, o_count, o_displ, o_type) = msg             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")
 */
      if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
        PyObject* sequence = __pyx_v_msg;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(5, 143, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_6,&__pyx_t_5,&__pyx_t_8};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(5, 143, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
      } else {
        Py_ssize_t index = -1;
        PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_6,&__pyx_t_5,&__pyx_t_8};
        __pyx_t_9 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 143, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_7 = Py_TYPE(__pyx_t_9)->tp_iternext;
        for (index=0; index < 4; index++) {
          PyObject* item = __pyx_t_7(__pyx_t_9); if (unlikely(!item)) goto __pyx_L22_unpacking_failed;
          __Pyx_GOTREF(item);
          *(temps[index]) = item;
        }
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_9), 4) < 0) __PYX_ERR(5, 143, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L23_unpacking_done;
        __pyx_L22_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(5, 143, __pyx_L1_error)
        __pyx_L23_unpacking_done:;
      }
      __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_count, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_displ, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_type, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":142
 *             if is_tuple(o_count) or is_list(o_count):
 *                 (o_count, o_displ) = o_count
 *         elif nargs == 4:             # <<<<<<<<<<<<<<
 *             (o_buf, o_count, o_displ, o_type) = msg
 *         else:
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":145
 *             (o_buf, o_count, o_displ, o_type) = msg
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")             # <<<<<<<<<<<<<<
 *     elif PYPY:
 *         o_buf = msg
 */
    /*else*/ {
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 145, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(5, 145, __pyx_L1_error)
    }
    __pyx_L7:;

    /* "mpi4py/MPI/msgbuffer.pxi":130
 *     if is_buffer(msg):
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):             # <<<<<<<<<<<<<<
 *         nargs = len(msg)
 *         if nargs == 2:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":146
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")
 *     elif PYPY:             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     else:
 */
  if (likely(PyMPI_RUNTIME_PYPY)) {

    /* "mpi4py/MPI/msgbuffer.pxi":147
 *             raise ValueError("message: expecting 2 to 4 items")
 *     elif PYPY:
 *         o_buf = msg             # <<<<<<<<<<<<<<
 *     else:
 *         raise TypeError("message: expecting buffer or list/tuple")
 */
    __Pyx_INCREF(__pyx_v_msg);
    __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_v_msg);

    /* "mpi4py/MPI/msgbuffer.pxi":146
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")
 *     elif PYPY:             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":149
 *         o_buf = msg
 *     else:
 *         raise TypeError("message: expecting buffer or list/tuple")             # <<<<<<<<<<<<<<
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL
 */
  /*else*/ {
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(5, 149, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":151
 *         raise TypeError("message: expecting buffer or list/tuple")
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint bsize = 0
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL
 */
  __pyx_v_baddr = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":152
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL
 *     cdef MPI_Aint bsize = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL
 *     cdef _p_message m = message_basic(o_buf, o_type, readonly,
 */
  __pyx_v_bsize = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":153
 *     cdef void *baddr = NULL
 *     cdef MPI_Aint bsize = 0
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *     cdef _p_message m = message_basic(o_buf, o_type, readonly,
 *                                       &baddr, &bsize, &btype)
 */
  __pyx_v_btype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":154
 *     cdef MPI_Aint bsize = 0
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL
 *     cdef _p_message m = message_basic(o_buf, o_type, readonly,             # <<<<<<<<<<<<<<
 *                                       &baddr, &bsize, &btype)
 *     # buffer: count and displacement
 */
  __pyx_t_8 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_basic(__pyx_v_o_buf, __pyx_v_o_type, __pyx_v_readonly, (&__pyx_v_baddr), (&__pyx_v_bsize), (&__pyx_v_btype))); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_message *)__pyx_t_8);
  __pyx_t_8 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":157
 *                                       &baddr, &bsize, &btype)
 *     # buffer: count and displacement
 *     cdef int count = 0 # number of datatype entries             # <<<<<<<<<<<<<<
 *     cdef int displ = 0 # from base buffer, in datatype entries
 *     cdef MPI_Aint extent = 0, lb = 0 # datatype extent
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":158
 *     # buffer: count and displacement
 *     cdef int count = 0 # number of datatype entries
 *     cdef int displ = 0 # from base buffer, in datatype entries             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint extent = 0, lb = 0 # datatype extent
 *     cdef MPI_Aint length = bsize     # in bytes
 */
  __pyx_v_displ = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":159
 *     cdef int count = 0 # number of datatype entries
 *     cdef int displ = 0 # from base buffer, in datatype entries
 *     cdef MPI_Aint extent = 0, lb = 0 # datatype extent             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint length = bsize     # in bytes
 *     cdef MPI_Aint offset = 0         # from base buffer, in bytes
 */
  __pyx_v_extent = 0;
  __pyx_v_lb = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":160
 *     cdef int displ = 0 # from base buffer, in datatype entries
 *     cdef MPI_Aint extent = 0, lb = 0 # datatype extent
 *     cdef MPI_Aint length = bsize     # in bytes             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint offset = 0         # from base buffer, in bytes
 *     if o_displ is not None:
 */
  __pyx_v_length = __pyx_v_bsize;

  /* "mpi4py/MPI/msgbuffer.pxi":161
 *     cdef MPI_Aint extent = 0, lb = 0 # datatype extent
 *     cdef MPI_Aint length = bsize     # in bytes
 *     cdef MPI_Aint offset = 0         # from base buffer, in bytes             # <<<<<<<<<<<<<<
 *     if o_displ is not None:
 *         displ = <int> o_displ
 */
  __pyx_v_offset = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":162
 *     cdef MPI_Aint length = bsize     # in bytes
 *     cdef MPI_Aint offset = 0         # from base buffer, in bytes
 *     if o_displ is not None:             # <<<<<<<<<<<<<<
 *         displ = <int> o_displ
 *         if displ < 0: raise ValueError(
 */
  __pyx_t_1 = (__pyx_v_o_displ != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":163
 *     cdef MPI_Aint offset = 0         # from base buffer, in bytes
 *     if o_displ is not None:
 *         displ = <int> o_displ             # <<<<<<<<<<<<<<
 *         if displ < 0: raise ValueError(
 *             "message: negative diplacement %d" % displ)
 */
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_o_displ); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 163, __pyx_L1_error)
    __pyx_v_displ = ((int)__pyx_t_10);

    /* "mpi4py/MPI/msgbuffer.pxi":164
 *     if o_displ is not None:
 *         displ = <int> o_displ
 *         if displ < 0: raise ValueError(             # <<<<<<<<<<<<<<
 *             "message: negative diplacement %d" % displ)
 *         if displ > 0:
 */
    __pyx_t_2 = ((__pyx_v_displ < 0) != 0);
    if (unlikely(__pyx_t_2)) {

      /* "mpi4py/MPI/msgbuffer.pxi":165
 *         displ = <int> o_displ
 *         if displ < 0: raise ValueError(
 *             "message: negative diplacement %d" % displ)             # <<<<<<<<<<<<<<
 *         if displ > 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 */
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_displ); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 165, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_message_negative_diplacement_d, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 165, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":164
 *     if o_displ is not None:
 *         displ = <int> o_displ
 *         if displ < 0: raise ValueError(             # <<<<<<<<<<<<<<
 *             "message: negative diplacement %d" % displ)
 *         if displ > 0:
 */
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 164, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(5, 164, __pyx_L1_error)
    }

    /* "mpi4py/MPI/msgbuffer.pxi":166
 *         if displ < 0: raise ValueError(
 *             "message: negative diplacement %d" % displ)
 *         if displ > 0:             # <<<<<<<<<<<<<<
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot handle diplacement, datatype is null")
 */
    __pyx_t_2 = ((__pyx_v_displ > 0) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgbuffer.pxi":167
 *             "message: negative diplacement %d" % displ)
 *         if displ > 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(             # <<<<<<<<<<<<<<
 *                 "message: cannot handle diplacement, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 */
      __pyx_t_2 = ((__pyx_v_btype == MPI_DATATYPE_NULL) != 0);
      if (unlikely(__pyx_t_2)) {
        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 167, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_Raise(__pyx_t_8, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __PYX_ERR(5, 167, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":169
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot handle diplacement, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )             # <<<<<<<<<<<<<<
 *             if extent <= 0: raise ValueError(
 *                 ("message: cannot handle diplacement, "
 */
      __pyx_t_10 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_btype, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 169, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":170
 *                 "message: cannot handle diplacement, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 *             if extent <= 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot handle diplacement, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 */
      __pyx_t_2 = ((__pyx_v_extent <= 0) != 0);
      if (unlikely(__pyx_t_2)) {

        /* "mpi4py/MPI/msgbuffer.pxi":173
 *                 ("message: cannot handle diplacement, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))             # <<<<<<<<<<<<<<
 *             if displ*extent > length: raise ValueError(
 *                 ("message: displacement %d out of bounds, "
 */
        __pyx_t_8 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_extent); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 173, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_5 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_lb); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 173, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 173, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 173, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_6);
        __pyx_t_8 = 0;
        __pyx_t_5 = 0;
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_message_cannot_handle_diplacemen_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 173, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":170
 *                 "message: cannot handle diplacement, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 *             if extent <= 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot handle diplacement, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 */
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 170, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_Raise(__pyx_t_4, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(5, 170, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":174
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))
 *             if displ*extent > length: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: displacement %d out of bounds, "
 *                  "number of datatype entries %d"
 */
      __pyx_t_2 = (((__pyx_v_displ * __pyx_v_extent) > __pyx_v_length) != 0);
      if (unlikely(__pyx_t_2)) {

        /* "mpi4py/MPI/msgbuffer.pxi":177
 *                 ("message: displacement %d out of bounds, "
 *                  "number of datatype entries %d"
 *                  ) % (displ, length//extent))             # <<<<<<<<<<<<<<
 *             offset = displ*extent
 *             length -= offset
 */
        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_displ); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_length / __pyx_v_extent)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
        __pyx_t_4 = 0;
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_message_displacement_d_out_of_bo, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":174
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))
 *             if displ*extent > length: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: displacement %d out of bounds, "
 *                  "number of datatype entries %d"
 */
        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(5, 174, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":178
 *                  "number of datatype entries %d"
 *                  ) % (displ, length//extent))
 *             offset = displ*extent             # <<<<<<<<<<<<<<
 *             length -= offset
 *     if o_count is not None:
 */
      __pyx_v_offset = (__pyx_v_displ * __pyx_v_extent);

      /* "mpi4py/MPI/msgbuffer.pxi":179
 *                  ) % (displ, length//extent))
 *             offset = displ*extent
 *             length -= offset             # <<<<<<<<<<<<<<
 *     if o_count is not None:
 *         count = <int> o_count
 */
      __pyx_v_length = (__pyx_v_length - __pyx_v_offset);

      /* "mpi4py/MPI/msgbuffer.pxi":166
 *         if displ < 0: raise ValueError(
 *             "message: negative diplacement %d" % displ)
 *         if displ > 0:             # <<<<<<<<<<<<<<
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot handle diplacement, datatype is null")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":162
 *     cdef MPI_Aint length = bsize     # in bytes
 *     cdef MPI_Aint offset = 0         # from base buffer, in bytes
 *     if o_displ is not None:             # <<<<<<<<<<<<<<
 *         displ = <int> o_displ
 *         if displ < 0: raise ValueError(
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":180
 *             offset = displ*extent
 *             length -= offset
 *     if o_count is not None:             # <<<<<<<<<<<<<<
 *         count = <int> o_count
 *         if count < 0: raise ValueError(
 */
  __pyx_t_2 = (__pyx_v_o_count != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":181
 *             length -= offset
 *     if o_count is not None:
 *         count = <int> o_count             # <<<<<<<<<<<<<<
 *         if count < 0: raise ValueError(
 *             "message: negative count %d" % count)
 */
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_o_count); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 181, __pyx_L1_error)
    __pyx_v_count = ((int)__pyx_t_10);

    /* "mpi4py/MPI/msgbuffer.pxi":182
 *     if o_count is not None:
 *         count = <int> o_count
 *         if count < 0: raise ValueError(             # <<<<<<<<<<<<<<
 *             "message: negative count %d" % count)
 *         if count > 0 and o_buf is None: raise ValueError(
 */
    __pyx_t_1 = ((__pyx_v_count < 0) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":183
 *         count = <int> o_count
 *         if count < 0: raise ValueError(
 *             "message: negative count %d" % count)             # <<<<<<<<<<<<<<
 *         if count > 0 and o_buf is None: raise ValueError(
 *             "message: buffer is None but count is %d" % count)
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_message_negative_count_d, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":182
 *     if o_count is not None:
 *         count = <int> o_count
 *         if count < 0: raise ValueError(             # <<<<<<<<<<<<<<
 *             "message: negative count %d" % count)
 *         if count > 0 and o_buf is None: raise ValueError(
 */
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 182, __pyx_L1_error)
    }

    /* "mpi4py/MPI/msgbuffer.pxi":184
 *         if count < 0: raise ValueError(
 *             "message: negative count %d" % count)
 *         if count > 0 and o_buf is None: raise ValueError(             # <<<<<<<<<<<<<<
 *             "message: buffer is None but count is %d" % count)
 *     elif length > 0:
 */
    __pyx_t_2 = ((__pyx_v_count > 0) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L33_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_o_buf == Py_None);
    __pyx_t_11 = (__pyx_t_2 != 0);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L33_bool_binop_done:;
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":185
 *             "message: negative count %d" % count)
 *         if count > 0 and o_buf is None: raise ValueError(
 *             "message: buffer is None but count is %d" % count)             # <<<<<<<<<<<<<<
 *     elif length > 0:
 *         if extent == 0:
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 185, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_message_buffer_is_None_but_count, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 185, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":184
 *         if count < 0: raise ValueError(
 *             "message: negative count %d" % count)
 *         if count > 0 and o_buf is None: raise ValueError(             # <<<<<<<<<<<<<<
 *             "message: buffer is None but count is %d" % count)
 *     elif length > 0:
 */
      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 184, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 184, __pyx_L1_error)
    }

    /* "mpi4py/MPI/msgbuffer.pxi":180
 *             offset = displ*extent
 *             length -= offset
 *     if o_count is not None:             # <<<<<<<<<<<<<<
 *         count = <int> o_count
 *         if count < 0: raise ValueError(
 */
    goto __pyx_L30;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":186
 *         if count > 0 and o_buf is None: raise ValueError(
 *             "message: buffer is None but count is %d" % count)
 *     elif length > 0:             # <<<<<<<<<<<<<<
 *         if extent == 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 */
  __pyx_t_1 = ((__pyx_v_length > 0) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":187
 *             "message: buffer is None but count is %d" % count)
 *     elif length > 0:
 *         if extent == 0:             # <<<<<<<<<<<<<<
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot infer count, datatype is null")
 */
    __pyx_t_1 = ((__pyx_v_extent == 0) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":188
 *     elif length > 0:
 *         if extent == 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(             # <<<<<<<<<<<<<<
 *                 "message: cannot infer count, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 */
      __pyx_t_1 = ((__pyx_v_btype == MPI_DATATYPE_NULL) != 0);
      if (unlikely(__pyx_t_1)) {
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 188, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(5, 188, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":190
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot infer count, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )             # <<<<<<<<<<<<<<
 *             if extent <= 0: raise ValueError(
 *                 ("message: cannot infer count, "
 */
      __pyx_t_10 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_btype, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 190, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":191
 *                 "message: cannot infer count, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 *             if extent <= 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 */
      __pyx_t_1 = ((__pyx_v_extent <= 0) != 0);
      if (unlikely(__pyx_t_1)) {

        /* "mpi4py/MPI/msgbuffer.pxi":194
 *                 ("message: cannot infer count, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))             # <<<<<<<<<<<<<<
 *         if (length % extent) != 0: raise ValueError(
 *             ("message: cannot infer count, "
 */
        __pyx_t_5 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_extent); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 194, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_lb); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 194, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_4 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 194, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 194, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_4);
        __pyx_t_5 = 0;
        __pyx_t_6 = 0;
        __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_message_cannot_infer_count_datat_2, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 194, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":191
 *                 "message: cannot infer count, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 *             if extent <= 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 */
        __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 191, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_Raise(__pyx_t_8, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __PYX_ERR(5, 191, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":187
 *             "message: buffer is None but count is %d" % count)
 *     elif length > 0:
 *         if extent == 0:             # <<<<<<<<<<<<<<
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot infer count, datatype is null")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":195
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))
 *         if (length % extent) != 0: raise ValueError(             # <<<<<<<<<<<<<<
 *             ("message: cannot infer count, "
 *              "buffer length %d is not a multiple of "
 */
    __pyx_t_1 = (((__pyx_v_length % __pyx_v_extent) != 0) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":199
 *              "buffer length %d is not a multiple of "
 *              "datatype extent %d (lb:%d, ub:%d)"
 *              ) % (length, extent, lb, lb+extent))             # <<<<<<<<<<<<<<
 *         if blocks < 2:
 *             count = downcast(length // extent)
 */
      __pyx_t_8 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_length); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_extent); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_lb); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_5);
      __pyx_t_8 = 0;
      __pyx_t_4 = 0;
      __pyx_t_6 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_message_cannot_infer_count_buffe, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 199, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":195
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))
 *         if (length % extent) != 0: raise ValueError(             # <<<<<<<<<<<<<<
 *             ("message: cannot infer count, "
 *              "buffer length %d is not a multiple of "
 */
      __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(5, 195, __pyx_L1_error)
    }

    /* "mpi4py/MPI/msgbuffer.pxi":200
 *              "datatype extent %d (lb:%d, ub:%d)"
 *              ) % (length, extent, lb, lb+extent))
 *         if blocks < 2:             # <<<<<<<<<<<<<<
 *             count = downcast(length // extent)
 *         else:
 */
    __pyx_t_1 = ((__pyx_v_blocks < 2) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":201
 *              ) % (length, extent, lb, lb+extent))
 *         if blocks < 2:
 *             count = downcast(length // extent)             # <<<<<<<<<<<<<<
 *         else:
 *             if ((length // extent) % blocks) != 0: raise ValueError(
 */
      __pyx_t_10 = __pyx_f_6mpi4py_3MPI_downcast((__pyx_v_length / __pyx_v_extent)); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(5, 201, __pyx_L1_error)
      __pyx_v_count = __pyx_t_10;

      /* "mpi4py/MPI/msgbuffer.pxi":200
 *              "datatype extent %d (lb:%d, ub:%d)"
 *              ) % (length, extent, lb, lb+extent))
 *         if blocks < 2:             # <<<<<<<<<<<<<<
 *             count = downcast(length // extent)
 *         else:
 */
      goto __pyx_L39;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":203
 *             count = downcast(length // extent)
 *         else:
 *             if ((length // extent) % blocks) != 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "number of entries %d is not a multiple of "
 */
    /*else*/ {
      __pyx_t_1 = ((((__pyx_v_length / __pyx_v_extent) % __pyx_v_blocks) != 0) != 0);
      if (unlikely(__pyx_t_1)) {

        /* "mpi4py/MPI/msgbuffer.pxi":207
 *                  "number of entries %d is not a multiple of "
 *                  "required number of blocks %d"
 *                  ) %  (length//extent, blocks))             # <<<<<<<<<<<<<<
 *             count = downcast((length // extent) // blocks)
 *     # return collected message data
 */
        __pyx_t_9 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_length / __pyx_v_extent)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_blocks); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
        __pyx_t_9 = 0;
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_message_cannot_infer_count_numbe, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":203
 *             count = downcast(length // extent)
 *         else:
 *             if ((length // extent) % blocks) != 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "number of entries %d is not a multiple of "
 */
        __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 203, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_Raise(__pyx_t_6, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __PYX_ERR(5, 203, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":208
 *                  "required number of blocks %d"
 *                  ) %  (length//extent, blocks))
 *             count = downcast((length // extent) // blocks)             # <<<<<<<<<<<<<<
 *     # return collected message data
 *     m.count = o_count if o_count is not None else count
 */
      __pyx_t_10 = __pyx_f_6mpi4py_3MPI_downcast(((__pyx_v_length / __pyx_v_extent) / __pyx_v_blocks)); if (unlikely(__pyx_t_10 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(5, 208, __pyx_L1_error)
      __pyx_v_count = __pyx_t_10;
    }
    __pyx_L39:;

    /* "mpi4py/MPI/msgbuffer.pxi":186
 *         if count > 0 and o_buf is None: raise ValueError(
 *             "message: buffer is None but count is %d" % count)
 *     elif length > 0:             # <<<<<<<<<<<<<<
 *         if extent == 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 */
  }
  __pyx_L30:;

  /* "mpi4py/MPI/msgbuffer.pxi":210
 *             count = downcast((length // extent) // blocks)
 *     # return collected message data
 *     m.count = o_count if o_count is not None else count             # <<<<<<<<<<<<<<
 *     m.displ = o_displ if o_displ is not None else displ
 *     _addr[0]  = <void*>(<char*>baddr + offset)
 */
  __pyx_t_1 = (__pyx_v_o_count != Py_None);
  if ((__pyx_t_1 != 0)) {
    __Pyx_INCREF(__pyx_v_o_count);
    __pyx_t_6 = __pyx_v_o_count;
  } else {
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_v_m->count);
  __Pyx_DECREF(__pyx_v_m->count);
  __pyx_v_m->count = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":211
 *     # return collected message data
 *     m.count = o_count if o_count is not None else count
 *     m.displ = o_displ if o_displ is not None else displ             # <<<<<<<<<<<<<<
 *     _addr[0]  = <void*>(<char*>baddr + offset)
 *     _count[0] = count
 */
  __pyx_t_1 = (__pyx_v_o_displ != Py_None);
  if ((__pyx_t_1 != 0)) {
    __Pyx_INCREF(__pyx_v_o_displ);
    __pyx_t_6 = __pyx_v_o_displ;
  } else {
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_displ); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 211, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_v_m->displ);
  __Pyx_DECREF(__pyx_v_m->displ);
  __pyx_v_m->displ = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":212
 *     m.count = o_count if o_count is not None else count
 *     m.displ = o_displ if o_displ is not None else displ
 *     _addr[0]  = <void*>(<char*>baddr + offset)             # <<<<<<<<<<<<<<
 *     _count[0] = count
 *     _type[0]  = btype
 */
  (__pyx_v__addr[0]) = ((void *)(((char *)__pyx_v_baddr) + __pyx_v_offset));

  /* "mpi4py/MPI/msgbuffer.pxi":213
 *     m.displ = o_displ if o_displ is not None else displ
 *     _addr[0]  = <void*>(<char*>baddr + offset)
 *     _count[0] = count             # <<<<<<<<<<<<<<
 *     _type[0]  = btype
 *     return m
 */
  (__pyx_v__count[0]) = __pyx_v_count;

  /* "mpi4py/MPI/msgbuffer.pxi":214
 *     _addr[0]  = <void*>(<char*>baddr + offset)
 *     _count[0] = count
 *     _type[0]  = btype             # <<<<<<<<<<<<<<
 *     return m
 * 
 */
  (__pyx_v__type[0]) = __pyx_v_btype;

  /* "mpi4py/MPI/msgbuffer.pxi":215
 *     _count[0] = count
 *     _type[0]  = btype
 *     return m             # <<<<<<<<<<<<<<
 * 
 * cdef _p_message message_vector(object msg,
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __pyx_r = __pyx_v_m;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":107
 *     return m
 * 
 * cdef _p_message message_simple(object msg,             # <<<<<<<<<<<<<<
 *                                int readonly,
 *                                int rank,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI.message_simple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o_buf);
  __Pyx_XDECREF(__pyx_v_o_count);
  __Pyx_XDECREF(__pyx_v_o_displ);
  __Pyx_XDECREF(__pyx_v_o_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":217
 *     return m
 * 
 * cdef _p_message message_vector(object msg,             # <<<<<<<<<<<<<<
 *                                int readonly,
 *                                int rank,
 */

static struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_f_6mpi4py_3MPI_message_vector(PyObject *__pyx_v_msg, int __pyx_v_readonly, int __pyx_v_rank, int __pyx_v_blocks, void **__pyx_v__addr, int **__pyx_v__counts, int **__pyx_v__displs, MPI_Datatype *__pyx_v__type) {
  Py_ssize_t __pyx_v_nargs;
  PyObject *__pyx_v_o_buf = 0;
  PyObject *__pyx_v_o_counts = 0;
  PyObject *__pyx_v_o_displs = 0;
  PyObject *__pyx_v_o_type = 0;
  void *__pyx_v_baddr;
  MPI_Aint __pyx_v_bsize;
  MPI_Datatype __pyx_v_btype;
  struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_v_m = 0;
  int *__pyx_v_counts;
  int *__pyx_v_displs;
  int __pyx_v_i;
  int __pyx_v_val;
  MPI_Aint __pyx_v_extent;
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_asize;
  MPI_Aint __pyx_v_aval;
  struct __pyx_obj_6mpi4py_3MPI__p_message *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("message_vector", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":228
 *                                ):
 *     # special-case PROC_NULL target rank
 *     if rank == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         _addr[0]   = NULL
 *         _counts[0] = NULL
 */
  __pyx_t_1 = ((__pyx_v_rank == MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":229
 *     # special-case PROC_NULL target rank
 *     if rank == MPI_PROC_NULL:
 *         _addr[0]   = NULL             # <<<<<<<<<<<<<<
 *         _counts[0] = NULL
 *         _displs[0] = NULL
 */
    (__pyx_v__addr[0]) = NULL;

    /* "mpi4py/MPI/msgbuffer.pxi":230
 *     if rank == MPI_PROC_NULL:
 *         _addr[0]   = NULL
 *         _counts[0] = NULL             # <<<<<<<<<<<<<<
 *         _displs[0] = NULL
 *         _type[0]   = MPI_BYTE
 */
    (__pyx_v__counts[0]) = NULL;

    /* "mpi4py/MPI/msgbuffer.pxi":231
 *         _addr[0]   = NULL
 *         _counts[0] = NULL
 *         _displs[0] = NULL             # <<<<<<<<<<<<<<
 *         _type[0]   = MPI_BYTE
 *         return None
 */
    (__pyx_v__displs[0]) = NULL;

    /* "mpi4py/MPI/msgbuffer.pxi":232
 *         _counts[0] = NULL
 *         _displs[0] = NULL
 *         _type[0]   = MPI_BYTE             # <<<<<<<<<<<<<<
 *         return None
 *     # unpack message list/tuple
 */
    (__pyx_v__type[0]) = MPI_BYTE;

    /* "mpi4py/MPI/msgbuffer.pxi":233
 *         _displs[0] = NULL
 *         _type[0]   = MPI_BYTE
 *         return None             # <<<<<<<<<<<<<<
 *     # unpack message list/tuple
 *     cdef Py_ssize_t nargs = 0
 */
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __pyx_r = ((struct __pyx_obj_6mpi4py_3MPI__p_message *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/msgbuffer.pxi":228
 *                                ):
 *     # special-case PROC_NULL target rank
 *     if rank == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         _addr[0]   = NULL
 *         _counts[0] = NULL
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":235
 *         return None
 *     # unpack message list/tuple
 *     cdef Py_ssize_t nargs = 0             # <<<<<<<<<<<<<<
 *     cdef object o_buf    = None
 *     cdef object o_counts = None
 */
  __pyx_v_nargs = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":236
 *     # unpack message list/tuple
 *     cdef Py_ssize_t nargs = 0
 *     cdef object o_buf    = None             # <<<<<<<<<<<<<<
 *     cdef object o_counts = None
 *     cdef object o_displs = None
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_buf = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":237
 *     cdef Py_ssize_t nargs = 0
 *     cdef object o_buf    = None
 *     cdef object o_counts = None             # <<<<<<<<<<<<<<
 *     cdef object o_displs = None
 *     cdef object o_type   = None
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_counts = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":238
 *     cdef object o_buf    = None
 *     cdef object o_counts = None
 *     cdef object o_displs = None             # <<<<<<<<<<<<<<
 *     cdef object o_type   = None
 *     if is_buffer(msg):
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_displs = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":239
 *     cdef object o_counts = None
 *     cdef object o_displs = None
 *     cdef object o_type   = None             # <<<<<<<<<<<<<<
 *     if is_buffer(msg):
 *         o_buf = msg
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_o_type = Py_None;

  /* "mpi4py/MPI/msgbuffer.pxi":240
 *     cdef object o_displs = None
 *     cdef object o_type   = None
 *     if is_buffer(msg):             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):
 */
  __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_is_buffer(__pyx_v_msg) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":241
 *     cdef object o_type   = None
 *     if is_buffer(msg):
 *         o_buf = msg             # <<<<<<<<<<<<<<
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)
 */
    __Pyx_INCREF(__pyx_v_msg);
    __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_v_msg);

    /* "mpi4py/MPI/msgbuffer.pxi":240
 *     cdef object o_displs = None
 *     cdef object o_type   = None
 *     if is_buffer(msg):             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":242
 *     if is_buffer(msg):
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):             # <<<<<<<<<<<<<<
 *         nargs = len(msg)
 *         if nargs == 2:
 */
  __pyx_t_2 = (PyList_Check(__pyx_v_msg) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (PyTuple_Check(__pyx_v_msg) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":243
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)             # <<<<<<<<<<<<<<
 *         if nargs == 2:
 *             (o_buf, o_counts) = msg
 */
    __pyx_t_3 = PyObject_Length(__pyx_v_msg); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(5, 243, __pyx_L1_error)
    __pyx_v_nargs = __pyx_t_3;

    /* "mpi4py/MPI/msgbuffer.pxi":244
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)
 *         if nargs == 2:             # <<<<<<<<<<<<<<
 *             (o_buf, o_counts) = msg
 *             if is_datatype(o_counts):
 */
    __pyx_t_1 = ((__pyx_v_nargs == 2) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":245
 *         nargs = len(msg)
 *         if nargs == 2:
 *             (o_buf, o_counts) = msg             # <<<<<<<<<<<<<<
 *             if is_datatype(o_counts):
 *                 (o_counts, o_type) = None, o_counts
 */
      if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
        PyObject* sequence = __pyx_v_msg;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(5, 245, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_6 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 245, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
        index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(5, 245, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L9_unpacking_done;
        __pyx_L8_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(5, 245, __pyx_L1_error)
        __pyx_L9_unpacking_done:;
      }
      __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_5);
      __pyx_t_5 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":246
 *         if nargs == 2:
 *             (o_buf, o_counts) = msg
 *             if is_datatype(o_counts):             # <<<<<<<<<<<<<<
 *                 (o_counts, o_type) = None, o_counts
 *             elif is_tuple(o_counts):
 */
      __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_is_datatype(__pyx_v_o_counts) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/msgbuffer.pxi":247
 *             (o_buf, o_counts) = msg
 *             if is_datatype(o_counts):
 *                 (o_counts, o_type) = None, o_counts             # <<<<<<<<<<<<<<
 *             elif is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts
 */
        __pyx_t_5 = Py_None;
        __Pyx_INCREF(__pyx_t_5);
        __pyx_t_4 = __pyx_v_o_counts;
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_5);
        __pyx_t_5 = 0;
        __Pyx_DECREF_SET(__pyx_v_o_type, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":246
 *         if nargs == 2:
 *             (o_buf, o_counts) = msg
 *             if is_datatype(o_counts):             # <<<<<<<<<<<<<<
 *                 (o_counts, o_type) = None, o_counts
 *             elif is_tuple(o_counts):
 */
        goto __pyx_L10;
      }

      /* "mpi4py/MPI/msgbuffer.pxi":248
 *             if is_datatype(o_counts):
 *                 (o_counts, o_type) = None, o_counts
 *             elif is_tuple(o_counts):             # <<<<<<<<<<<<<<
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 3:
 */
      __pyx_t_1 = (PyTuple_Check(__pyx_v_o_counts) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/msgbuffer.pxi":249
 *                 (o_counts, o_type) = None, o_counts
 *             elif is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts             # <<<<<<<<<<<<<<
 *         elif nargs == 3:
 *             (o_buf, o_counts, o_type) = msg
 */
        if ((likely(PyTuple_CheckExact(__pyx_v_o_counts))) || (PyList_CheckExact(__pyx_v_o_counts))) {
          PyObject* sequence = __pyx_v_o_counts;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 2)) {
            if (size > 2) __Pyx_RaiseTooManyValuesError(2);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(5, 249, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          #else
          __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 249, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 249, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          Py_ssize_t index = -1;
          __pyx_t_6 = PyObject_GetIter(__pyx_v_o_counts); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 249, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
          index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L11_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_4);
          index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_5);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(5, 249, __pyx_L1_error)
          __pyx_t_7 = NULL;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L12_unpacking_done;
          __pyx_L11_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_7 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(5, 249, __pyx_L1_error)
          __pyx_L12_unpacking_done:;
        }
        __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_4);
        __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_5);
        __pyx_t_5 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":248
 *             if is_datatype(o_counts):
 *                 (o_counts, o_type) = None, o_counts
 *             elif is_tuple(o_counts):             # <<<<<<<<<<<<<<
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 3:
 */
      }
      __pyx_L10:;

      /* "mpi4py/MPI/msgbuffer.pxi":244
 *     elif is_list(msg) or is_tuple(msg):
 *         nargs = len(msg)
 *         if nargs == 2:             # <<<<<<<<<<<<<<
 *             (o_buf, o_counts) = msg
 *             if is_datatype(o_counts):
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":250
 *             elif is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 3:             # <<<<<<<<<<<<<<
 *             (o_buf, o_counts, o_type) = msg
 *             if is_tuple(o_counts):
 */
    __pyx_t_1 = ((__pyx_v_nargs == 3) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":251
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 3:
 *             (o_buf, o_counts, o_type) = msg             # <<<<<<<<<<<<<<
 *             if is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts
 */
      if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
        PyObject* sequence = __pyx_v_msg;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 3)) {
          if (size > 3) __Pyx_RaiseTooManyValuesError(3);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(5, 251, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
        } else {
          __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
        }
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        #else
        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 251, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 251, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 251, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_8 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 251, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext;
        index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L13_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_4)) goto __pyx_L13_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 2; __pyx_t_6 = __pyx_t_7(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L13_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_8), 3) < 0) __PYX_ERR(5, 251, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L14_unpacking_done;
        __pyx_L13_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(5, 251, __pyx_L1_error)
        __pyx_L14_unpacking_done:;
      }
      __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_type, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":252
 *         elif nargs == 3:
 *             (o_buf, o_counts, o_type) = msg
 *             if is_tuple(o_counts):             # <<<<<<<<<<<<<<
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 4:
 */
      __pyx_t_1 = (PyTuple_Check(__pyx_v_o_counts) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/msgbuffer.pxi":253
 *             (o_buf, o_counts, o_type) = msg
 *             if is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts             # <<<<<<<<<<<<<<
 *         elif nargs == 4:
 *             (o_buf, o_counts, o_displs, o_type) = msg
 */
        if ((likely(PyTuple_CheckExact(__pyx_v_o_counts))) || (PyList_CheckExact(__pyx_v_o_counts))) {
          PyObject* sequence = __pyx_v_o_counts;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 2)) {
            if (size > 2) __Pyx_RaiseTooManyValuesError(2);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(5, 253, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_4);
          #else
          __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 253, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 253, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          Py_ssize_t index = -1;
          __pyx_t_5 = PyObject_GetIter(__pyx_v_o_counts); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 253, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
          index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_6)) goto __pyx_L16_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_6);
          index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L16_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_4);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(5, 253, __pyx_L1_error)
          __pyx_t_7 = NULL;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L17_unpacking_done;
          __pyx_L16_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_7 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(5, 253, __pyx_L1_error)
          __pyx_L17_unpacking_done:;
        }
        __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":252
 *         elif nargs == 3:
 *             (o_buf, o_counts, o_type) = msg
 *             if is_tuple(o_counts):             # <<<<<<<<<<<<<<
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 4:
 */
      }

      /* "mpi4py/MPI/msgbuffer.pxi":250
 *             elif is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 3:             # <<<<<<<<<<<<<<
 *             (o_buf, o_counts, o_type) = msg
 *             if is_tuple(o_counts):
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":254
 *             if is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 4:             # <<<<<<<<<<<<<<
 *             (o_buf, o_counts, o_displs, o_type) = msg
 *         else:
 */
    __pyx_t_1 = ((__pyx_v_nargs == 4) != 0);
    if (likely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":255
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 4:
 *             (o_buf, o_counts, o_displs, o_type) = msg             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")
 */
      if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
        PyObject* sequence = __pyx_v_msg;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(5, 255, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_6,&__pyx_t_5,&__pyx_t_8};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(5, 255, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
      } else {
        Py_ssize_t index = -1;
        PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_6,&__pyx_t_5,&__pyx_t_8};
        __pyx_t_9 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 255, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_7 = Py_TYPE(__pyx_t_9)->tp_iternext;
        for (index=0; index < 4; index++) {
          PyObject* item = __pyx_t_7(__pyx_t_9); if (unlikely(!item)) goto __pyx_L18_unpacking_failed;
          __Pyx_GOTREF(item);
          *(temps[index]) = item;
        }
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_9), 4) < 0) __PYX_ERR(5, 255, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L19_unpacking_done;
        __pyx_L18_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(5, 255, __pyx_L1_error)
        __pyx_L19_unpacking_done:;
      }
      __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_o_type, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":254
 *             if is_tuple(o_counts):
 *                 (o_counts, o_displs) = o_counts
 *         elif nargs == 4:             # <<<<<<<<<<<<<<
 *             (o_buf, o_counts, o_displs, o_type) = msg
 *         else:
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":257
 *             (o_buf, o_counts, o_displs, o_type) = msg
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")             # <<<<<<<<<<<<<<
 *     elif PYPY:
 *         o_buf = msg
 */
    /*else*/ {
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(5, 257, __pyx_L1_error)
    }
    __pyx_L7:;

    /* "mpi4py/MPI/msgbuffer.pxi":242
 *     if is_buffer(msg):
 *         o_buf = msg
 *     elif is_list(msg) or is_tuple(msg):             # <<<<<<<<<<<<<<
 *         nargs = len(msg)
 *         if nargs == 2:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":258
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")
 *     elif PYPY:             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     else:
 */
  if (likely(PyMPI_RUNTIME_PYPY)) {

    /* "mpi4py/MPI/msgbuffer.pxi":259
 *             raise ValueError("message: expecting 2 to 4 items")
 *     elif PYPY:
 *         o_buf = msg             # <<<<<<<<<<<<<<
 *     else:
 *         raise TypeError("message: expecting buffer or list/tuple")
 */
    __Pyx_INCREF(__pyx_v_msg);
    __Pyx_DECREF_SET(__pyx_v_o_buf, __pyx_v_msg);

    /* "mpi4py/MPI/msgbuffer.pxi":258
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")
 *     elif PYPY:             # <<<<<<<<<<<<<<
 *         o_buf = msg
 *     else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":261
 *         o_buf = msg
 *     else:
 *         raise TypeError("message: expecting buffer or list/tuple")             # <<<<<<<<<<<<<<
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL
 */
  /*else*/ {
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(5, 261, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":263
 *         raise TypeError("message: expecting buffer or list/tuple")
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint bsize = 0
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL
 */
  __pyx_v_baddr = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":264
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL
 *     cdef MPI_Aint bsize = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL
 *     cdef _p_message m = message_basic(o_buf, o_type, readonly,
 */
  __pyx_v_bsize = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":265
 *     cdef void *baddr = NULL
 *     cdef MPI_Aint bsize = 0
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *     cdef _p_message m = message_basic(o_buf, o_type, readonly,
 *                                       &baddr, &bsize, &btype)
 */
  __pyx_v_btype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":266
 *     cdef MPI_Aint bsize = 0
 *     cdef MPI_Datatype btype = MPI_DATATYPE_NULL
 *     cdef _p_message m = message_basic(o_buf, o_type, readonly,             # <<<<<<<<<<<<<<
 *                                       &baddr, &bsize, &btype)
 *     # counts and displacements
 */
  __pyx_t_8 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_basic(__pyx_v_o_buf, __pyx_v_o_type, __pyx_v_readonly, (&__pyx_v_baddr), (&__pyx_v_bsize), (&__pyx_v_btype))); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_message *)__pyx_t_8);
  __pyx_t_8 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":269
 *                                       &baddr, &bsize, &btype)
 *     # counts and displacements
 *     cdef int *counts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *displs = NULL
 *     cdef int i=0, val=0
 */
  __pyx_v_counts = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":270
 *     # counts and displacements
 *     cdef int *counts = NULL
 *     cdef int *displs = NULL             # <<<<<<<<<<<<<<
 *     cdef int i=0, val=0
 *     cdef MPI_Aint extent=0, lb=0
 */
  __pyx_v_displs = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":271
 *     cdef int *counts = NULL
 *     cdef int *displs = NULL
 *     cdef int i=0, val=0             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint extent=0, lb=0
 *     cdef MPI_Aint asize=0, aval=0
 */
  __pyx_v_i = 0;
  __pyx_v_val = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":272
 *     cdef int *displs = NULL
 *     cdef int i=0, val=0
 *     cdef MPI_Aint extent=0, lb=0             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint asize=0, aval=0
 *     if o_counts is None:
 */
  __pyx_v_extent = 0;
  __pyx_v_lb = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":273
 *     cdef int i=0, val=0
 *     cdef MPI_Aint extent=0, lb=0
 *     cdef MPI_Aint asize=0, aval=0             # <<<<<<<<<<<<<<
 *     if o_counts is None:
 *         if bsize > 0:
 */
  __pyx_v_asize = 0;
  __pyx_v_aval = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":274
 *     cdef MPI_Aint extent=0, lb=0
 *     cdef MPI_Aint asize=0, aval=0
 *     if o_counts is None:             # <<<<<<<<<<<<<<
 *         if bsize > 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 */
  __pyx_t_1 = (__pyx_v_o_counts == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":275
 *     cdef MPI_Aint asize=0, aval=0
 *     if o_counts is None:
 *         if bsize > 0:             # <<<<<<<<<<<<<<
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot infer count, "
 */
    __pyx_t_2 = ((__pyx_v_bsize > 0) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgbuffer.pxi":276
 *     if o_counts is None:
 *         if bsize > 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(             # <<<<<<<<<<<<<<
 *                 "message: cannot infer count, "
 *                 "datatype is null")
 */
      __pyx_t_2 = ((__pyx_v_btype == MPI_DATATYPE_NULL) != 0);
      if (unlikely(__pyx_t_2)) {
        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 276, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_Raise(__pyx_t_8, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __PYX_ERR(5, 276, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":279
 *                 "message: cannot infer count, "
 *                 "datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )             # <<<<<<<<<<<<<<
 *             if extent <= 0: raise ValueError(
 *                 ("message: cannot infer count, "
 */
      __pyx_t_10 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_btype, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 279, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":280
 *                 "datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 *             if extent <= 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 */
      __pyx_t_2 = ((__pyx_v_extent <= 0) != 0);
      if (unlikely(__pyx_t_2)) {

        /* "mpi4py/MPI/msgbuffer.pxi":283
 *                 ("message: cannot infer count, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))             # <<<<<<<<<<<<<<
 *             if (bsize % extent) != 0: raise ValueError(
 *                 ("message: cannot infer count, "
 */
        __pyx_t_8 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_extent); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_5 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_lb); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_6);
        __pyx_t_8 = 0;
        __pyx_t_5 = 0;
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_message_cannot_infer_count_datat_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 283, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":280
 *                 "datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 *             if extent <= 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 */
        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 280, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_Raise(__pyx_t_4, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __PYX_ERR(5, 280, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":284
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))
 *             if (bsize % extent) != 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "buffer length %d is not a multiple of "
 */
      __pyx_t_2 = (((__pyx_v_bsize % __pyx_v_extent) != 0) != 0);
      if (unlikely(__pyx_t_2)) {

        /* "mpi4py/MPI/msgbuffer.pxi":288
 *                  "buffer length %d is not a multiple of "
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (bsize, extent, lb, lb+extent))             # <<<<<<<<<<<<<<
 *             asize = bsize // extent
 *         o_counts = newarray(blocks, &counts)
 */
        __pyx_t_4 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_bsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_extent); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_lb); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_8 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_8);
        __pyx_t_4 = 0;
        __pyx_t_6 = 0;
        __pyx_t_5 = 0;
        __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_message_cannot_infer_count_buffe, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

        /* "mpi4py/MPI/msgbuffer.pxi":284
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (extent, lb, lb+extent))
 *             if (bsize % extent) != 0: raise ValueError(             # <<<<<<<<<<<<<<
 *                 ("message: cannot infer count, "
 *                  "buffer length %d is not a multiple of "
 */
        __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 284, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_Raise(__pyx_t_9, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __PYX_ERR(5, 284, __pyx_L1_error)
      }

      /* "mpi4py/MPI/msgbuffer.pxi":289
 *                  "datatype extent %d (lb:%d, ub:%d)"
 *                  ) % (bsize, extent, lb, lb+extent))
 *             asize = bsize // extent             # <<<<<<<<<<<<<<
 *         o_counts = newarray(blocks, &counts)
 *         for i from 0 <= i < blocks:
 */
      __pyx_v_asize = (__pyx_v_bsize / __pyx_v_extent);

      /* "mpi4py/MPI/msgbuffer.pxi":275
 *     cdef MPI_Aint asize=0, aval=0
 *     if o_counts is None:
 *         if bsize > 0:             # <<<<<<<<<<<<<<
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 *                 "message: cannot infer count, "
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":290
 *                  ) % (bsize, extent, lb, lb+extent))
 *             asize = bsize // extent
 *         o_counts = newarray(blocks, &counts)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < blocks:
 *             aval = (asize // blocks) + (asize % blocks > i)
 */
    __pyx_t_9 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, (&__pyx_v_counts)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_9);
    __pyx_t_9 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":291
 *             asize = bsize // extent
 *         o_counts = newarray(blocks, &counts)
 *         for i from 0 <= i < blocks:             # <<<<<<<<<<<<<<
 *             aval = (asize // blocks) + (asize % blocks > i)
 *             counts[i] = downcast(aval)
 */
    __pyx_t_10 = __pyx_v_blocks;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_10; __pyx_v_i++) {

      /* "mpi4py/MPI/msgbuffer.pxi":292
 *         o_counts = newarray(blocks, &counts)
 *         for i from 0 <= i < blocks:
 *             aval = (asize // blocks) + (asize % blocks > i)             # <<<<<<<<<<<<<<
 *             counts[i] = downcast(aval)
 *     elif is_integral(o_counts):
 */
      __pyx_v_aval = ((__pyx_v_asize / __pyx_v_blocks) + ((__pyx_v_asize % __pyx_v_blocks) > __pyx_v_i));

      /* "mpi4py/MPI/msgbuffer.pxi":293
 *         for i from 0 <= i < blocks:
 *             aval = (asize // blocks) + (asize % blocks > i)
 *             counts[i] = downcast(aval)             # <<<<<<<<<<<<<<
 *     elif is_integral(o_counts):
 *         val = <int> o_counts
 */
      __pyx_t_11 = __pyx_f_6mpi4py_3MPI_downcast(__pyx_v_aval); if (unlikely(__pyx_t_11 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(5, 293, __pyx_L1_error)
      (__pyx_v_counts[__pyx_v_i]) = __pyx_t_11;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":274
 *     cdef MPI_Aint extent=0, lb=0
 *     cdef MPI_Aint asize=0, aval=0
 *     if o_counts is None:             # <<<<<<<<<<<<<<
 *         if bsize > 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(
 */
    goto __pyx_L20;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":294
 *             aval = (asize // blocks) + (asize % blocks > i)
 *             counts[i] = downcast(aval)
 *     elif is_integral(o_counts):             # <<<<<<<<<<<<<<
 *         val = <int> o_counts
 *         o_counts = newarray(blocks, &counts)
 */
  __pyx_t_2 = (__pyx_f_6mpi4py_3MPI_is_integral(__pyx_v_o_counts) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":295
 *             counts[i] = downcast(aval)
 *     elif is_integral(o_counts):
 *         val = <int> o_counts             # <<<<<<<<<<<<<<
 *         o_counts = newarray(blocks, &counts)
 *         for i from 0 <= i < blocks:
 */
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_o_counts); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 295, __pyx_L1_error)
    __pyx_v_val = ((int)__pyx_t_10);

    /* "mpi4py/MPI/msgbuffer.pxi":296
 *     elif is_integral(o_counts):
 *         val = <int> o_counts
 *         o_counts = newarray(blocks, &counts)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < blocks:
 *             counts[i] = val
 */
    __pyx_t_9 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, (&__pyx_v_counts)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_9);
    __pyx_t_9 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":297
 *         val = <int> o_counts
 *         o_counts = newarray(blocks, &counts)
 *         for i from 0 <= i < blocks:             # <<<<<<<<<<<<<<
 *             counts[i] = val
 *     else:
 */
    __pyx_t_10 = __pyx_v_blocks;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_10; __pyx_v_i++) {

      /* "mpi4py/MPI/msgbuffer.pxi":298
 *         o_counts = newarray(blocks, &counts)
 *         for i from 0 <= i < blocks:
 *             counts[i] = val             # <<<<<<<<<<<<<<
 *     else:
 *         o_counts = chkarray(o_counts, blocks, &counts)
 */
      (__pyx_v_counts[__pyx_v_i]) = __pyx_v_val;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":294
 *             aval = (asize // blocks) + (asize % blocks > i)
 *             counts[i] = downcast(aval)
 *     elif is_integral(o_counts):             # <<<<<<<<<<<<<<
 *         val = <int> o_counts
 *         o_counts = newarray(blocks, &counts)
 */
    goto __pyx_L20;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":300
 *             counts[i] = val
 *     else:
 *         o_counts = chkarray(o_counts, blocks, &counts)             # <<<<<<<<<<<<<<
 *     if o_displs is None: # contiguous
 *         val = 0
 */
  /*else*/ {
    __pyx_t_9 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_o_counts, __pyx_v_blocks, (&__pyx_v_counts)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_9);
    __pyx_t_9 = 0;
  }
  __pyx_L20:;

  /* "mpi4py/MPI/msgbuffer.pxi":301
 *     else:
 *         o_counts = chkarray(o_counts, blocks, &counts)
 *     if o_displs is None: # contiguous             # <<<<<<<<<<<<<<
 *         val = 0
 *         o_displs = newarray(blocks, &displs)
 */
  __pyx_t_2 = (__pyx_v_o_displs == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":302
 *         o_counts = chkarray(o_counts, blocks, &counts)
 *     if o_displs is None: # contiguous
 *         val = 0             # <<<<<<<<<<<<<<
 *         o_displs = newarray(blocks, &displs)
 *         for i from 0 <= i < blocks:
 */
    __pyx_v_val = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":303
 *     if o_displs is None: # contiguous
 *         val = 0
 *         o_displs = newarray(blocks, &displs)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < blocks:
 *             displs[i] = val
 */
    __pyx_t_9 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, (&__pyx_v_displs)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_9);
    __pyx_t_9 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":304
 *         val = 0
 *         o_displs = newarray(blocks, &displs)
 *         for i from 0 <= i < blocks:             # <<<<<<<<<<<<<<
 *             displs[i] = val
 *             val += counts[i]
 */
    __pyx_t_10 = __pyx_v_blocks;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_10; __pyx_v_i++) {

      /* "mpi4py/MPI/msgbuffer.pxi":305
 *         o_displs = newarray(blocks, &displs)
 *         for i from 0 <= i < blocks:
 *             displs[i] = val             # <<<<<<<<<<<<<<
 *             val += counts[i]
 *     elif is_integral(o_displs): # strided
 */
      (__pyx_v_displs[__pyx_v_i]) = __pyx_v_val;

      /* "mpi4py/MPI/msgbuffer.pxi":306
 *         for i from 0 <= i < blocks:
 *             displs[i] = val
 *             val += counts[i]             # <<<<<<<<<<<<<<
 *     elif is_integral(o_displs): # strided
 *         val = <int> o_displs
 */
      __pyx_v_val = (__pyx_v_val + (__pyx_v_counts[__pyx_v_i]));
    }

    /* "mpi4py/MPI/msgbuffer.pxi":301
 *     else:
 *         o_counts = chkarray(o_counts, blocks, &counts)
 *     if o_displs is None: # contiguous             # <<<<<<<<<<<<<<
 *         val = 0
 *         o_displs = newarray(blocks, &displs)
 */
    goto __pyx_L29;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":307
 *             displs[i] = val
 *             val += counts[i]
 *     elif is_integral(o_displs): # strided             # <<<<<<<<<<<<<<
 *         val = <int> o_displs
 *         o_displs = newarray(blocks, &displs)
 */
  __pyx_t_1 = (__pyx_f_6mpi4py_3MPI_is_integral(__pyx_v_o_displs) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":308
 *             val += counts[i]
 *     elif is_integral(o_displs): # strided
 *         val = <int> o_displs             # <<<<<<<<<<<<<<
 *         o_displs = newarray(blocks, &displs)
 *         for i from 0 <= i < blocks:
 */
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_o_displs); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 308, __pyx_L1_error)
    __pyx_v_val = ((int)__pyx_t_10);

    /* "mpi4py/MPI/msgbuffer.pxi":309
 *     elif is_integral(o_displs): # strided
 *         val = <int> o_displs
 *         o_displs = newarray(blocks, &displs)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < blocks:
 *             displs[i] = val * i
 */
    __pyx_t_9 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, (&__pyx_v_displs)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_9);
    __pyx_t_9 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":310
 *         val = <int> o_displs
 *         o_displs = newarray(blocks, &displs)
 *         for i from 0 <= i < blocks:             # <<<<<<<<<<<<<<
 *             displs[i] = val * i
 *     else: # general
 */
    __pyx_t_10 = __pyx_v_blocks;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_10; __pyx_v_i++) {

      /* "mpi4py/MPI/msgbuffer.pxi":311
 *         o_displs = newarray(blocks, &displs)
 *         for i from 0 <= i < blocks:
 *             displs[i] = val * i             # <<<<<<<<<<<<<<
 *     else: # general
 *         o_displs = chkarray(o_displs, blocks, &displs)
 */
      (__pyx_v_displs[__pyx_v_i]) = (__pyx_v_val * __pyx_v_i);
    }

    /* "mpi4py/MPI/msgbuffer.pxi":307
 *             displs[i] = val
 *             val += counts[i]
 *     elif is_integral(o_displs): # strided             # <<<<<<<<<<<<<<
 *         val = <int> o_displs
 *         o_displs = newarray(blocks, &displs)
 */
    goto __pyx_L29;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":313
 *             displs[i] = val * i
 *     else: # general
 *         o_displs = chkarray(o_displs, blocks, &displs)             # <<<<<<<<<<<<<<
 *     # return collected message data
 *     m.count = o_counts
 */
  /*else*/ {
    __pyx_t_9 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_o_displs, __pyx_v_blocks, (&__pyx_v_displs)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_9);
    __pyx_t_9 = 0;
  }
  __pyx_L29:;

  /* "mpi4py/MPI/msgbuffer.pxi":315
 *         o_displs = chkarray(o_displs, blocks, &displs)
 *     # return collected message data
 *     m.count = o_counts             # <<<<<<<<<<<<<<
 *     m.displ = o_displs
 *     _addr[0]   = baddr
 */
  __Pyx_INCREF(__pyx_v_o_counts);
  __Pyx_GIVEREF(__pyx_v_o_counts);
  __Pyx_GOTREF(__pyx_v_m->count);
  __Pyx_DECREF(__pyx_v_m->count);
  __pyx_v_m->count = __pyx_v_o_counts;

  /* "mpi4py/MPI/msgbuffer.pxi":316
 *     # return collected message data
 *     m.count = o_counts
 *     m.displ = o_displs             # <<<<<<<<<<<<<<
 *     _addr[0]   = baddr
 *     _counts[0] = counts
 */
  __Pyx_INCREF(__pyx_v_o_displs);
  __Pyx_GIVEREF(__pyx_v_o_displs);
  __Pyx_GOTREF(__pyx_v_m->displ);
  __Pyx_DECREF(__pyx_v_m->displ);
  __pyx_v_m->displ = __pyx_v_o_displs;

  /* "mpi4py/MPI/msgbuffer.pxi":317
 *     m.count = o_counts
 *     m.displ = o_displs
 *     _addr[0]   = baddr             # <<<<<<<<<<<<<<
 *     _counts[0] = counts
 *     _displs[0] = displs
 */
  (__pyx_v__addr[0]) = __pyx_v_baddr;

  /* "mpi4py/MPI/msgbuffer.pxi":318
 *     m.displ = o_displs
 *     _addr[0]   = baddr
 *     _counts[0] = counts             # <<<<<<<<<<<<<<
 *     _displs[0] = displs
 *     _type[0]   = btype
 */
  (__pyx_v__counts[0]) = __pyx_v_counts;

  /* "mpi4py/MPI/msgbuffer.pxi":319
 *     _addr[0]   = baddr
 *     _counts[0] = counts
 *     _displs[0] = displs             # <<<<<<<<<<<<<<
 *     _type[0]   = btype
 *     return m
 */
  (__pyx_v__displs[0]) = __pyx_v_displs;

  /* "mpi4py/MPI/msgbuffer.pxi":320
 *     _counts[0] = counts
 *     _displs[0] = displs
 *     _type[0]   = btype             # <<<<<<<<<<<<<<
 *     return m
 * 
 */
  (__pyx_v__type[0]) = __pyx_v_btype;

  /* "mpi4py/MPI/msgbuffer.pxi":321
 *     _displs[0] = displs
 *     _type[0]   = btype
 *     return m             # <<<<<<<<<<<<<<
 * 
 * cdef tuple message_vector_w(object msg,
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __pyx_r = __pyx_v_m;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":217
 *     return m
 * 
 * cdef _p_message message_vector(object msg,             # <<<<<<<<<<<<<<
 *                                int readonly,
 *                                int rank,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI.message_vector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o_buf);
  __Pyx_XDECREF(__pyx_v_o_counts);
  __Pyx_XDECREF(__pyx_v_o_displs);
  __Pyx_XDECREF(__pyx_v_o_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":323
 *     return m
 * 
 * cdef tuple message_vector_w(object msg,             # <<<<<<<<<<<<<<
 *                             int readonly,
 *                             int blocks,
 */

static PyObject *__pyx_fuse_0__pyx_f_6mpi4py_3MPI_message_vector_w(PyObject *__pyx_v_msg, int __pyx_v_readonly, int __pyx_v_blocks, void **__pyx_v__addr, int **__pyx_v__counts, int **__pyx_v__displs, MPI_Datatype **__pyx_v__types) {
  int __pyx_v_i;
  Py_ssize_t __pyx_v_nargs;
  PyObject *__pyx_v_o_buffer = 0;
  PyObject *__pyx_v_o_counts = 0;
  PyObject *__pyx_v_o_displs = 0;
  PyObject *__pyx_v_o_types = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("__pyx_fuse_0message_vector_w", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":332
 *                             MPI_Datatype **_types,
 *                             ):
 *     cdef int i = 0             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t nargs = len(msg)
 *     cdef object o_buffer, o_counts, o_displs, o_types
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":333
 *                             ):
 *     cdef int i = 0
 *     cdef Py_ssize_t nargs = len(msg)             # <<<<<<<<<<<<<<
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:
 */
  __pyx_t_1 = PyObject_Length(__pyx_v_msg); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(5, 333, __pyx_L1_error)
  __pyx_v_nargs = __pyx_t_1;

  /* "mpi4py/MPI/msgbuffer.pxi":335
 *     cdef Py_ssize_t nargs = len(msg)
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:             # <<<<<<<<<<<<<<
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 */
  __pyx_t_2 = ((__pyx_v_nargs == 2) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":336
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:
 *         o_buffer, o_types = msg             # <<<<<<<<<<<<<<
 *         o_counts = o_displs = None
 *     elif nargs == 3:
 */
    if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
      PyObject* sequence = __pyx_v_msg;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 336, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(5, 336, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L5_unpacking_done;
      __pyx_L4_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 336, __pyx_L1_error)
      __pyx_L5_unpacking_done:;
    }
    __pyx_v_o_buffer = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_o_types = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":337
 *     if nargs == 2:
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None             # <<<<<<<<<<<<<<
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg
 */
    __Pyx_INCREF(Py_None);
    __pyx_v_o_counts = Py_None;
    __Pyx_INCREF(Py_None);
    __pyx_v_o_displs = Py_None;

    /* "mpi4py/MPI/msgbuffer.pxi":335
 *     cdef Py_ssize_t nargs = len(msg)
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:             # <<<<<<<<<<<<<<
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":338
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 *     elif nargs == 3:             # <<<<<<<<<<<<<<
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:
 */
  __pyx_t_2 = ((__pyx_v_nargs == 3) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":339
 *         o_counts = o_displs = None
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg             # <<<<<<<<<<<<<<
 *     elif nargs == 4:
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 */
    if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
      PyObject* sequence = __pyx_v_msg;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 339, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 2; __pyx_t_5 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_7), 3) < 0) __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __pyx_v_o_buffer = __pyx_t_4;
    __pyx_t_4 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 339, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      #else
      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_9)->tp_iternext;
      index = 0; __pyx_t_7 = __pyx_t_6(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_8 = __pyx_t_6(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_9), 2) < 0) __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L9_unpacking_done;
      __pyx_L8_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_L9_unpacking_done:;
    }
    __pyx_v_o_counts = __pyx_t_7;
    __pyx_t_7 = 0;
    __pyx_v_o_displs = __pyx_t_8;
    __pyx_t_8 = 0;
    __pyx_v_o_types = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":338
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 *     elif nargs == 3:             # <<<<<<<<<<<<<<
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":340
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:             # <<<<<<<<<<<<<<
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 *     else:
 */
  __pyx_t_2 = ((__pyx_v_nargs == 4) != 0);
  if (likely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":341
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:
 *         o_buffer,  o_counts, o_displs,  o_types = msg             # <<<<<<<<<<<<<<
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")
 */
    if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
      PyObject* sequence = __pyx_v_msg;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 4)) {
        if (size > 4) __Pyx_RaiseTooManyValuesError(4);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 341, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_8);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_4,&__pyx_t_8};
        for (i=0; i < 4; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(5, 341, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_4,&__pyx_t_8};
      __pyx_t_7 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 341, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = Py_TYPE(__pyx_t_7)->tp_iternext;
      for (index=0; index < 4; index++) {
        PyObject* item = __pyx_t_6(__pyx_t_7); if (unlikely(!item)) goto __pyx_L10_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_7), 4) < 0) __PYX_ERR(5, 341, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L11_unpacking_done;
      __pyx_L10_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 341, __pyx_L1_error)
      __pyx_L11_unpacking_done:;
    }
    __pyx_v_o_buffer = __pyx_t_5;
    __pyx_t_5 = 0;
    __pyx_v_o_counts = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_o_displs = __pyx_t_4;
    __pyx_t_4 = 0;
    __pyx_v_o_types = __pyx_t_8;
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":340
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:             # <<<<<<<<<<<<<<
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":343
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")             # <<<<<<<<<<<<<<
 *     if readonly:
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 */
  /*else*/ {
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(5, 343, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgbuffer.pxi":344
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")
 *     if readonly:             # <<<<<<<<<<<<<<
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 *     else:
 */
  __pyx_t_2 = (__pyx_v_readonly != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":345
 *         raise ValueError("message: expecting 2 to 4 items")
 *     if readonly:
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)             # <<<<<<<<<<<<<<
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 */
    __pyx_t_8 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_o_buffer, __pyx_v__addr, NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_buffer, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":344
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")
 *     if readonly:             # <<<<<<<<<<<<<<
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 *     else:
 */
    goto __pyx_L12;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":347
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)             # <<<<<<<<<<<<<<
 *     if o_counts is None and o_displs is None:
 *         o_counts = newarray(blocks, _counts)
 */
  /*else*/ {
    __pyx_t_8 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_o_buffer, __pyx_v__addr, NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_buffer, __pyx_t_8);
    __pyx_t_8 = 0;
  }
  __pyx_L12:;

  /* "mpi4py/MPI/msgbuffer.pxi":348
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 *     if o_counts is None and o_displs is None:             # <<<<<<<<<<<<<<
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)
 */
  __pyx_t_10 = (__pyx_v_o_counts == Py_None);
  __pyx_t_11 = (__pyx_t_10 != 0);
  if (__pyx_t_11) {
  } else {
    __pyx_t_2 = __pyx_t_11;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_o_displs == Py_None);
  __pyx_t_10 = (__pyx_t_11 != 0);
  __pyx_t_2 = __pyx_t_10;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":349
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 *     if o_counts is None and o_displs is None:
 *         o_counts = newarray(blocks, _counts)             # <<<<<<<<<<<<<<
 *         o_displs = newarray(blocks, _displs)
 *         for i from 0 <= i < blocks:
 */
    __pyx_t_8 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, __pyx_v__counts); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":350
 *     if o_counts is None and o_displs is None:
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < blocks:
 *             _counts[0][i] = 1
 */
    __pyx_t_8 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, __pyx_v__displs); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":351
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)
 *         for i from 0 <= i < blocks:             # <<<<<<<<<<<<<<
 *             _counts[0][i] = 1
 *             _displs[0][i] = 0
 */
    __pyx_t_12 = __pyx_v_blocks;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_12; __pyx_v_i++) {

      /* "mpi4py/MPI/msgbuffer.pxi":352
 *         o_displs = newarray(blocks, _displs)
 *         for i from 0 <= i < blocks:
 *             _counts[0][i] = 1             # <<<<<<<<<<<<<<
 *             _displs[0][i] = 0
 *     else:
 */
      ((__pyx_v__counts[0])[__pyx_v_i]) = 1;

      /* "mpi4py/MPI/msgbuffer.pxi":353
 *         for i from 0 <= i < blocks:
 *             _counts[0][i] = 1
 *             _displs[0][i] = 0             # <<<<<<<<<<<<<<
 *     else:
 *         o_counts = chkarray(o_counts, blocks, _counts)
 */
      ((__pyx_v__displs[0])[__pyx_v_i]) = 0;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":348
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 *     if o_counts is None and o_displs is None:             # <<<<<<<<<<<<<<
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)
 */
    goto __pyx_L13;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":355
 *             _displs[0][i] = 0
 *     else:
 *         o_counts = chkarray(o_counts, blocks, _counts)             # <<<<<<<<<<<<<<
 *         o_displs = chkarray(o_displs, blocks, _displs)
 *     o_types  = asarray_Datatype(o_types, blocks, _types)
 */
  /*else*/ {
    __pyx_t_8 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_o_counts, __pyx_v_blocks, __pyx_v__counts); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":356
 *     else:
 *         o_counts = chkarray(o_counts, blocks, _counts)
 *         o_displs = chkarray(o_displs, blocks, _displs)             # <<<<<<<<<<<<<<
 *     o_types  = asarray_Datatype(o_types, blocks, _types)
 *     return (o_buffer, o_counts, o_displs, o_types)
 */
    __pyx_t_8 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_o_displs, __pyx_v_blocks, __pyx_v__displs); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 356, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_8);
    __pyx_t_8 = 0;
  }
  __pyx_L13:;

  /* "mpi4py/MPI/msgbuffer.pxi":357
 *         o_counts = chkarray(o_counts, blocks, _counts)
 *         o_displs = chkarray(o_displs, blocks, _displs)
 *     o_types  = asarray_Datatype(o_types, blocks, _types)             # <<<<<<<<<<<<<<
 *     return (o_buffer, o_counts, o_displs, o_types)
 * 
 */
  __pyx_t_8 = __pyx_f_6mpi4py_3MPI_asarray_Datatype(__pyx_v_o_types, __pyx_v_blocks, __pyx_v__types); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_o_types, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":358
 *         o_displs = chkarray(o_displs, blocks, _displs)
 *     o_types  = asarray_Datatype(o_types, blocks, _types)
 *     return (o_buffer, o_counts, o_displs, o_types)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_o_buffer);
  __Pyx_GIVEREF(__pyx_v_o_buffer);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_o_buffer);
  __Pyx_INCREF(__pyx_v_o_counts);
  __Pyx_GIVEREF(__pyx_v_o_counts);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_o_counts);
  __Pyx_INCREF(__pyx_v_o_displs);
  __Pyx_GIVEREF(__pyx_v_o_displs);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_o_displs);
  __Pyx_INCREF(__pyx_v_o_types);
  __Pyx_GIVEREF(__pyx_v_o_types);
  PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_o_types);
  __pyx_r = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":323
 *     return m
 * 
 * cdef tuple message_vector_w(object msg,             # <<<<<<<<<<<<<<
 *                             int readonly,
 *                             int blocks,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI.message_vector_w", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o_buffer);
  __Pyx_XDECREF(__pyx_v_o_counts);
  __Pyx_XDECREF(__pyx_v_o_displs);
  __Pyx_XDECREF(__pyx_v_o_types);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_fuse_1__pyx_f_6mpi4py_3MPI_message_vector_w(PyObject *__pyx_v_msg, int __pyx_v_readonly, int __pyx_v_blocks, void **__pyx_v__addr, int **__pyx_v__counts, MPI_Aint **__pyx_v__displs, MPI_Datatype **__pyx_v__types) {
  int __pyx_v_i;
  Py_ssize_t __pyx_v_nargs;
  PyObject *__pyx_v_o_buffer = 0;
  PyObject *__pyx_v_o_counts = 0;
  PyObject *__pyx_v_o_displs = 0;
  PyObject *__pyx_v_o_types = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("__pyx_fuse_1message_vector_w", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":332
 *                             MPI_Datatype **_types,
 *                             ):
 *     cdef int i = 0             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t nargs = len(msg)
 *     cdef object o_buffer, o_counts, o_displs, o_types
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":333
 *                             ):
 *     cdef int i = 0
 *     cdef Py_ssize_t nargs = len(msg)             # <<<<<<<<<<<<<<
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:
 */
  __pyx_t_1 = PyObject_Length(__pyx_v_msg); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(5, 333, __pyx_L1_error)
  __pyx_v_nargs = __pyx_t_1;

  /* "mpi4py/MPI/msgbuffer.pxi":335
 *     cdef Py_ssize_t nargs = len(msg)
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:             # <<<<<<<<<<<<<<
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 */
  __pyx_t_2 = ((__pyx_v_nargs == 2) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":336
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:
 *         o_buffer, o_types = msg             # <<<<<<<<<<<<<<
 *         o_counts = o_displs = None
 *     elif nargs == 3:
 */
    if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
      PyObject* sequence = __pyx_v_msg;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 336, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      #else
      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 336, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(5, 336, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L5_unpacking_done;
      __pyx_L4_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 336, __pyx_L1_error)
      __pyx_L5_unpacking_done:;
    }
    __pyx_v_o_buffer = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_o_types = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":337
 *     if nargs == 2:
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None             # <<<<<<<<<<<<<<
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg
 */
    __Pyx_INCREF(Py_None);
    __pyx_v_o_counts = Py_None;
    __Pyx_INCREF(Py_None);
    __pyx_v_o_displs = Py_None;

    /* "mpi4py/MPI/msgbuffer.pxi":335
 *     cdef Py_ssize_t nargs = len(msg)
 *     cdef object o_buffer, o_counts, o_displs, o_types
 *     if nargs == 2:             # <<<<<<<<<<<<<<
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":338
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 *     elif nargs == 3:             # <<<<<<<<<<<<<<
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:
 */
  __pyx_t_2 = ((__pyx_v_nargs == 3) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":339
 *         o_counts = o_displs = None
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg             # <<<<<<<<<<<<<<
 *     elif nargs == 4:
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 */
    if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
      PyObject* sequence = __pyx_v_msg;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 339, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_3);
      index = 2; __pyx_t_5 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_7), 3) < 0) __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __pyx_v_o_buffer = __pyx_t_4;
    __pyx_t_4 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 339, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      #else
      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 339, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_9)->tp_iternext;
      index = 0; __pyx_t_7 = __pyx_t_6(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_8 = __pyx_t_6(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_9), 2) < 0) __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L9_unpacking_done;
      __pyx_L8_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 339, __pyx_L1_error)
      __pyx_L9_unpacking_done:;
    }
    __pyx_v_o_counts = __pyx_t_7;
    __pyx_t_7 = 0;
    __pyx_v_o_displs = __pyx_t_8;
    __pyx_t_8 = 0;
    __pyx_v_o_types = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":338
 *         o_buffer, o_types = msg
 *         o_counts = o_displs = None
 *     elif nargs == 3:             # <<<<<<<<<<<<<<
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":340
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:             # <<<<<<<<<<<<<<
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 *     else:
 */
  __pyx_t_2 = ((__pyx_v_nargs == 4) != 0);
  if (likely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":341
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:
 *         o_buffer,  o_counts, o_displs,  o_types = msg             # <<<<<<<<<<<<<<
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")
 */
    if ((likely(PyTuple_CheckExact(__pyx_v_msg))) || (PyList_CheckExact(__pyx_v_msg))) {
      PyObject* sequence = __pyx_v_msg;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 4)) {
        if (size > 4) __Pyx_RaiseTooManyValuesError(4);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(5, 341, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_8);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_4,&__pyx_t_8};
        for (i=0; i < 4; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(5, 341, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_4,&__pyx_t_8};
      __pyx_t_7 = PyObject_GetIter(__pyx_v_msg); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 341, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = Py_TYPE(__pyx_t_7)->tp_iternext;
      for (index=0; index < 4; index++) {
        PyObject* item = __pyx_t_6(__pyx_t_7); if (unlikely(!item)) goto __pyx_L10_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_7), 4) < 0) __PYX_ERR(5, 341, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L11_unpacking_done;
      __pyx_L10_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 341, __pyx_L1_error)
      __pyx_L11_unpacking_done:;
    }
    __pyx_v_o_buffer = __pyx_t_5;
    __pyx_t_5 = 0;
    __pyx_v_o_counts = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_o_displs = __pyx_t_4;
    __pyx_t_4 = 0;
    __pyx_v_o_types = __pyx_t_8;
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":340
 *     elif nargs == 3:
 *         o_buffer, (o_counts, o_displs), o_types = msg
 *     elif nargs == 4:             # <<<<<<<<<<<<<<
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":343
 *         o_buffer,  o_counts, o_displs,  o_types = msg
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")             # <<<<<<<<<<<<<<
 *     if readonly:
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 */
  /*else*/ {
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 343, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_Raise(__pyx_t_8, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __PYX_ERR(5, 343, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgbuffer.pxi":344
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")
 *     if readonly:             # <<<<<<<<<<<<<<
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 *     else:
 */
  __pyx_t_2 = (__pyx_v_readonly != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":345
 *         raise ValueError("message: expecting 2 to 4 items")
 *     if readonly:
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)             # <<<<<<<<<<<<<<
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 */
    __pyx_t_8 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_o_buffer, __pyx_v__addr, NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_buffer, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":344
 *     else:
 *         raise ValueError("message: expecting 2 to 4 items")
 *     if readonly:             # <<<<<<<<<<<<<<
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 *     else:
 */
    goto __pyx_L12;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":347
 *         o_buffer = getbuffer_r(o_buffer, _addr, NULL)
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)             # <<<<<<<<<<<<<<
 *     if o_counts is None and o_displs is None:
 *         o_counts = newarray(blocks, _counts)
 */
  /*else*/ {
    __pyx_t_8 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_o_buffer, __pyx_v__addr, NULL)); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_buffer, __pyx_t_8);
    __pyx_t_8 = 0;
  }
  __pyx_L12:;

  /* "mpi4py/MPI/msgbuffer.pxi":348
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 *     if o_counts is None and o_displs is None:             # <<<<<<<<<<<<<<
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)
 */
  __pyx_t_10 = (__pyx_v_o_counts == Py_None);
  __pyx_t_11 = (__pyx_t_10 != 0);
  if (__pyx_t_11) {
  } else {
    __pyx_t_2 = __pyx_t_11;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_11 = (__pyx_v_o_displs == Py_None);
  __pyx_t_10 = (__pyx_t_11 != 0);
  __pyx_t_2 = __pyx_t_10;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":349
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 *     if o_counts is None and o_displs is None:
 *         o_counts = newarray(blocks, _counts)             # <<<<<<<<<<<<<<
 *         o_displs = newarray(blocks, _displs)
 *         for i from 0 <= i < blocks:
 */
    __pyx_t_8 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, __pyx_v__counts); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":350
 *     if o_counts is None and o_displs is None:
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < blocks:
 *             _counts[0][i] = 1
 */
    __pyx_t_8 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_blocks, __pyx_v__displs); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":351
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)
 *         for i from 0 <= i < blocks:             # <<<<<<<<<<<<<<
 *             _counts[0][i] = 1
 *             _displs[0][i] = 0
 */
    __pyx_t_12 = __pyx_v_blocks;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_12; __pyx_v_i++) {

      /* "mpi4py/MPI/msgbuffer.pxi":352
 *         o_displs = newarray(blocks, _displs)
 *         for i from 0 <= i < blocks:
 *             _counts[0][i] = 1             # <<<<<<<<<<<<<<
 *             _displs[0][i] = 0
 *     else:
 */
      ((__pyx_v__counts[0])[__pyx_v_i]) = 1;

      /* "mpi4py/MPI/msgbuffer.pxi":353
 *         for i from 0 <= i < blocks:
 *             _counts[0][i] = 1
 *             _displs[0][i] = 0             # <<<<<<<<<<<<<<
 *     else:
 *         o_counts = chkarray(o_counts, blocks, _counts)
 */
      ((__pyx_v__displs[0])[__pyx_v_i]) = 0;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":348
 *     else:
 *         o_buffer = getbuffer_w(o_buffer, _addr, NULL)
 *     if o_counts is None and o_displs is None:             # <<<<<<<<<<<<<<
 *         o_counts = newarray(blocks, _counts)
 *         o_displs = newarray(blocks, _displs)
 */
    goto __pyx_L13;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":355
 *             _displs[0][i] = 0
 *     else:
 *         o_counts = chkarray(o_counts, blocks, _counts)             # <<<<<<<<<<<<<<
 *         o_displs = chkarray(o_displs, blocks, _displs)
 *     o_types  = asarray_Datatype(o_types, blocks, _types)
 */
  /*else*/ {
    __pyx_t_8 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_o_counts, __pyx_v_blocks, __pyx_v__counts); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_counts, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":356
 *     else:
 *         o_counts = chkarray(o_counts, blocks, _counts)
 *         o_displs = chkarray(o_displs, blocks, _displs)             # <<<<<<<<<<<<<<
 *     o_types  = asarray_Datatype(o_types, blocks, _types)
 *     return (o_buffer, o_counts, o_displs, o_types)
 */
    __pyx_t_8 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_o_displs, __pyx_v_blocks, __pyx_v__displs); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 356, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF_SET(__pyx_v_o_displs, __pyx_t_8);
    __pyx_t_8 = 0;
  }
  __pyx_L13:;

  /* "mpi4py/MPI/msgbuffer.pxi":357
 *         o_counts = chkarray(o_counts, blocks, _counts)
 *         o_displs = chkarray(o_displs, blocks, _displs)
 *     o_types  = asarray_Datatype(o_types, blocks, _types)             # <<<<<<<<<<<<<<
 *     return (o_buffer, o_counts, o_displs, o_types)
 * 
 */
  __pyx_t_8 = __pyx_f_6mpi4py_3MPI_asarray_Datatype(__pyx_v_o_types, __pyx_v_blocks, __pyx_v__types); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF_SET(__pyx_v_o_types, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":358
 *         o_displs = chkarray(o_displs, blocks, _displs)
 *     o_types  = asarray_Datatype(o_types, blocks, _types)
 *     return (o_buffer, o_counts, o_displs, o_types)             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_o_buffer);
  __Pyx_GIVEREF(__pyx_v_o_buffer);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_o_buffer);
  __Pyx_INCREF(__pyx_v_o_counts);
  __Pyx_GIVEREF(__pyx_v_o_counts);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_o_counts);
  __Pyx_INCREF(__pyx_v_o_displs);
  __Pyx_GIVEREF(__pyx_v_o_displs);
  PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_o_displs);
  __Pyx_INCREF(__pyx_v_o_types);
  __Pyx_GIVEREF(__pyx_v_o_types);
  PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_o_types);
  __pyx_r = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":323
 *     return m
 * 
 * cdef tuple message_vector_w(object msg,             # <<<<<<<<<<<<<<
 *                             int readonly,
 *                             int blocks,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI.message_vector_w", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o_buffer);
  __Pyx_XDECREF(__pyx_v_o_counts);
  __Pyx_XDECREF(__pyx_v_o_displs);
  __Pyx_XDECREF(__pyx_v_o_types);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":373
 *     cdef object _msg
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.buf   = NULL
 *         self.count = 0
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_10_p_msg_p2p_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_10_p_msg_p2p_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10_p_msg_p2p___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_10_p_msg_p2p___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":374
 * 
 *     def __cinit__(self):
 *         self.buf   = NULL             # <<<<<<<<<<<<<<
 *         self.count = 0
 *         self.dtype = MPI_DATATYPE_NULL
 */
  __pyx_v_self->buf = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":375
 *     def __cinit__(self):
 *         self.buf   = NULL
 *         self.count = 0             # <<<<<<<<<<<<<<
 *         self.dtype = MPI_DATATYPE_NULL
 * 
 */
  __pyx_v_self->count = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":376
 *         self.buf   = NULL
 *         self.count = 0
 *         self.dtype = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_send(self, object msg, int rank) except -1:
 */
  __pyx_v_self->dtype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":373
 *     cdef object _msg
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.buf   = NULL
 *         self.count = 0
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":378
 *         self.dtype = MPI_DATATYPE_NULL
 * 
 *     cdef int for_send(self, object msg, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 1, # readonly
 *                                    rank, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_self, PyObject *__pyx_v_msg, int __pyx_v_rank) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("for_send", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":379
 * 
 *     cdef int for_send(self, object msg, int rank) except -1:
 *         self._msg = message_simple(msg, 1, # readonly             # <<<<<<<<<<<<<<
 *                                    rank, 0,
 *                                    &self.buf,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_msg, 1, __pyx_v_rank, 0, (&__pyx_v_self->buf), (&__pyx_v_self->count), (&__pyx_v_self->dtype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_msg);
  __Pyx_DECREF(__pyx_v_self->_msg);
  __pyx_v_self->_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":384
 *                                    &self.count,
 *                                    &self.dtype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_recv(self, object msg, int rank) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":378
 *         self.dtype = MPI_DATATYPE_NULL
 * 
 *     cdef int for_send(self, object msg, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 1, # readonly
 *                                    rank, 0,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_p2p.for_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":386
 *         return 0
 * 
 *     cdef int for_recv(self, object msg, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 0, # writable
 *                                    rank, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_self, PyObject *__pyx_v_msg, int __pyx_v_rank) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("for_recv", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":387
 * 
 *     cdef int for_recv(self, object msg, int rank) except -1:
 *         self._msg = message_simple(msg, 0, # writable             # <<<<<<<<<<<<<<
 *                                    rank, 0,
 *                                    &self.buf,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_msg, 0, __pyx_v_rank, 0, (&__pyx_v_self->buf), (&__pyx_v_self->count), (&__pyx_v_self->dtype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_msg);
  __Pyx_DECREF(__pyx_v_self->_msg);
  __pyx_v_self->_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":392
 *                                    &self.count,
 *                                    &self.dtype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline _p_msg_p2p message_p2p_send(object sendbuf, int dest):
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":386
 *         return 0
 * 
 *     cdef int for_recv(self, object msg, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 0, # writable
 *                                    rank, 0,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_p2p.for_recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":394
 *         return 0
 * 
 * cdef inline _p_msg_p2p message_p2p_send(object sendbuf, int dest):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_send(sendbuf, dest)
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_f_6mpi4py_3MPI_message_p2p_send(PyObject *__pyx_v_sendbuf, int __pyx_v_dest) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("message_p2p_send", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":395
 * 
 * cdef inline _p_msg_p2p message_p2p_send(object sendbuf, int dest):
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)             # <<<<<<<<<<<<<<
 *     msg.for_send(sendbuf, dest)
 *     return msg
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_p2p(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_p2p), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 395, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":396
 * cdef inline _p_msg_p2p message_p2p_send(object sendbuf, int dest):
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_send(sendbuf, dest)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_send(__pyx_v_msg, __pyx_v_sendbuf, __pyx_v_dest); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 396, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":397
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_send(sendbuf, dest)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * cdef inline _p_msg_p2p message_p2p_recv(object recvbuf, int source):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":394
 *         return 0
 * 
 * cdef inline _p_msg_p2p message_p2p_send(object sendbuf, int dest):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_send(sendbuf, dest)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_p2p_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":399
 *     return msg
 * 
 * cdef inline _p_msg_p2p message_p2p_recv(object recvbuf, int source):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_recv(recvbuf, source)
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_f_6mpi4py_3MPI_message_p2p_recv(PyObject *__pyx_v_recvbuf, int __pyx_v_source) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("message_p2p_recv", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":400
 * 
 * cdef inline _p_msg_p2p message_p2p_recv(object recvbuf, int source):
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)             # <<<<<<<<<<<<<<
 *     msg.for_recv(recvbuf, source)
 *     return msg
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_p2p(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_p2p), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 400, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":401
 * cdef inline _p_msg_p2p message_p2p_recv(object recvbuf, int source):
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_recv(recvbuf, source)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_recv(__pyx_v_msg, __pyx_v_recvbuf, __pyx_v_source); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 401, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":402
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_recv(recvbuf, source)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":399
 *     return msg
 * 
 * cdef inline _p_msg_p2p message_p2p_recv(object recvbuf, int source):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_p2p msg = <_p_msg_p2p>_p_msg_p2p.__new__(_p_msg_p2p)
 *     msg.for_recv(recvbuf, source)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_p2p_recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":420
 *     cdef object _rcnt
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.sbuf    = self.rbuf    = NULL
 *         self.scount  = self.rcount  = 0
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_10_p_msg_cco_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_10_p_msg_cco_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10_p_msg_cco___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_10_p_msg_cco___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":421
 * 
 *     def __cinit__(self):
 *         self.sbuf    = self.rbuf    = NULL             # <<<<<<<<<<<<<<
 *         self.scount  = self.rcount  = 0
 *         self.scounts = self.rcounts = NULL
 */
  __pyx_v_self->sbuf = NULL;
  __pyx_v_self->rbuf = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":422
 *     def __cinit__(self):
 *         self.sbuf    = self.rbuf    = NULL
 *         self.scount  = self.rcount  = 0             # <<<<<<<<<<<<<<
 *         self.scounts = self.rcounts = NULL
 *         self.sdispls = self.rdispls = NULL
 */
  __pyx_v_self->scount = 0;
  __pyx_v_self->rcount = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":423
 *         self.sbuf    = self.rbuf    = NULL
 *         self.scount  = self.rcount  = 0
 *         self.scounts = self.rcounts = NULL             # <<<<<<<<<<<<<<
 *         self.sdispls = self.rdispls = NULL
 *         self.stype   = self.rtype   = MPI_DATATYPE_NULL
 */
  __pyx_v_self->scounts = NULL;
  __pyx_v_self->rcounts = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":424
 *         self.scount  = self.rcount  = 0
 *         self.scounts = self.rcounts = NULL
 *         self.sdispls = self.rdispls = NULL             # <<<<<<<<<<<<<<
 *         self.stype   = self.rtype   = MPI_DATATYPE_NULL
 * 
 */
  __pyx_v_self->sdispls = NULL;
  __pyx_v_self->rdispls = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":425
 *         self.scounts = self.rcounts = NULL
 *         self.sdispls = self.rdispls = NULL
 *         self.stype   = self.rtype   = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Collective Communication Operations
 */
  __pyx_v_self->stype = MPI_DATATYPE_NULL;
  __pyx_v_self->rtype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":420
 *     cdef object _rcnt
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.sbuf    = self.rbuf    = NULL
 *         self.scount  = self.rcount  = 0
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":431
 * 
 *     # sendbuf arguments
 *     cdef int for_cco_send(self, bint VECTOR,             # <<<<<<<<<<<<<<
 *                           object amsg,
 *                           int rank, int blocks) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_VECTOR, PyObject *__pyx_v_amsg, int __pyx_v_rank, int __pyx_v_blocks) {
  int __pyx_v_readonly;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("for_cco_send", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":434
 *                           object amsg,
 *                           int rank, int blocks) except -1:
 *         cdef bint readonly = 1             # <<<<<<<<<<<<<<
 *         if not VECTOR: # block variant
 *             self._smsg = message_simple(
 */
  __pyx_v_readonly = 1;

  /* "mpi4py/MPI/msgbuffer.pxi":435
 *                           int rank, int blocks) except -1:
 *         cdef bint readonly = 1
 *         if not VECTOR: # block variant             # <<<<<<<<<<<<<<
 *             self._smsg = message_simple(
 *                 amsg, readonly, rank, blocks,
 */
  __pyx_t_1 = ((!(__pyx_v_VECTOR != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":436
 *         cdef bint readonly = 1
 *         if not VECTOR: # block variant
 *             self._smsg = message_simple(             # <<<<<<<<<<<<<<
 *                 amsg, readonly, rank, blocks,
 *                 &self.sbuf, &self.scount, &self.stype)
 */
    __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_amsg, __pyx_v_readonly, __pyx_v_rank, __pyx_v_blocks, (&__pyx_v_self->sbuf), (&__pyx_v_self->scount), (&__pyx_v_self->stype))); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_smsg);
    __Pyx_DECREF(__pyx_v_self->_smsg);
    __pyx_v_self->_smsg = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":435
 *                           int rank, int blocks) except -1:
 *         cdef bint readonly = 1
 *         if not VECTOR: # block variant             # <<<<<<<<<<<<<<
 *             self._smsg = message_simple(
 *                 amsg, readonly, rank, blocks,
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":440
 *                 &self.sbuf, &self.scount, &self.stype)
 *         else: # vector variant
 *             self._smsg = message_vector(             # <<<<<<<<<<<<<<
 *                 amsg, readonly, rank, blocks,
 *                 &self.sbuf, &self.scounts,
 */
  /*else*/ {

    /* "mpi4py/MPI/msgbuffer.pxi":443
 *                 amsg, readonly, rank, blocks,
 *                 &self.sbuf, &self.scounts,
 *                 &self.sdispls, &self.stype)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
    __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_vector(__pyx_v_amsg, __pyx_v_readonly, __pyx_v_rank, __pyx_v_blocks, (&__pyx_v_self->sbuf), (&__pyx_v_self->scounts), (&__pyx_v_self->sdispls), (&__pyx_v_self->stype))); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 440, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);

    /* "mpi4py/MPI/msgbuffer.pxi":440
 *                 &self.sbuf, &self.scount, &self.stype)
 *         else: # vector variant
 *             self._smsg = message_vector(             # <<<<<<<<<<<<<<
 *                 amsg, readonly, rank, blocks,
 *                 &self.sbuf, &self.scounts,
 */
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_smsg);
    __Pyx_DECREF(__pyx_v_self->_smsg);
    __pyx_v_self->_smsg = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgbuffer.pxi":444
 *                 &self.sbuf, &self.scounts,
 *                 &self.sdispls, &self.stype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # recvbuf arguments
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":431
 * 
 *     # sendbuf arguments
 *     cdef int for_cco_send(self, bint VECTOR,             # <<<<<<<<<<<<<<
 *                           object amsg,
 *                           int rank, int blocks) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_cco_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":447
 * 
 *     # recvbuf arguments
 *     cdef int for_cco_recv(self, bint VECTOR,             # <<<<<<<<<<<<<<
 *                           object amsg,
 *                           int rank, int blocks) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_VECTOR, PyObject *__pyx_v_amsg, int __pyx_v_rank, int __pyx_v_blocks) {
  int __pyx_v_readonly;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("for_cco_recv", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":450
 *                           object amsg,
 *                           int rank, int blocks) except -1:
 *         cdef bint readonly = 0             # <<<<<<<<<<<<<<
 *         if not VECTOR: # block variant
 *             self._rmsg = message_simple(
 */
  __pyx_v_readonly = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":451
 *                           int rank, int blocks) except -1:
 *         cdef bint readonly = 0
 *         if not VECTOR: # block variant             # <<<<<<<<<<<<<<
 *             self._rmsg = message_simple(
 *                 amsg, readonly, rank, blocks,
 */
  __pyx_t_1 = ((!(__pyx_v_VECTOR != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":452
 *         cdef bint readonly = 0
 *         if not VECTOR: # block variant
 *             self._rmsg = message_simple(             # <<<<<<<<<<<<<<
 *                 amsg, readonly, rank, blocks,
 *                 &self.rbuf, &self.rcount, &self.rtype)
 */
    __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_amsg, __pyx_v_readonly, __pyx_v_rank, __pyx_v_blocks, (&__pyx_v_self->rbuf), (&__pyx_v_self->rcount), (&__pyx_v_self->rtype))); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_rmsg);
    __Pyx_DECREF(__pyx_v_self->_rmsg);
    __pyx_v_self->_rmsg = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":451
 *                           int rank, int blocks) except -1:
 *         cdef bint readonly = 0
 *         if not VECTOR: # block variant             # <<<<<<<<<<<<<<
 *             self._rmsg = message_simple(
 *                 amsg, readonly, rank, blocks,
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":456
 *                 &self.rbuf, &self.rcount, &self.rtype)
 *         else: # vector variant
 *             self._rmsg = message_vector(             # <<<<<<<<<<<<<<
 *                 amsg, readonly, rank, blocks,
 *                 &self.rbuf, &self.rcounts,
 */
  /*else*/ {

    /* "mpi4py/MPI/msgbuffer.pxi":459
 *                 amsg, readonly, rank, blocks,
 *                 &self.rbuf, &self.rcounts,
 *                 &self.rdispls, &self.rtype)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
    __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_vector(__pyx_v_amsg, __pyx_v_readonly, __pyx_v_rank, __pyx_v_blocks, (&__pyx_v_self->rbuf), (&__pyx_v_self->rcounts), (&__pyx_v_self->rdispls), (&__pyx_v_self->rtype))); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);

    /* "mpi4py/MPI/msgbuffer.pxi":456
 *                 &self.rbuf, &self.rcount, &self.rtype)
 *         else: # vector variant
 *             self._rmsg = message_vector(             # <<<<<<<<<<<<<<
 *                 amsg, readonly, rank, blocks,
 *                 &self.rbuf, &self.rcounts,
 */
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_rmsg);
    __Pyx_DECREF(__pyx_v_self->_rmsg);
    __pyx_v_self->_rmsg = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgbuffer.pxi":460
 *                 &self.rbuf, &self.rcounts,
 *                 &self.rdispls, &self.rtype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # bcast
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":447
 * 
 *     # recvbuf arguments
 *     cdef int for_cco_recv(self, bint VECTOR,             # <<<<<<<<<<<<<<
 *                           object amsg,
 *                           int rank, int blocks) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_cco_recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":463
 * 
 *     # bcast
 *     cdef int for_bcast(self,             # <<<<<<<<<<<<<<
 *                        object msg, int root,
 *                        MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_bcast(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_msg, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_rank;
  int __pyx_v_sending;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  void *__pyx_t_4;
  MPI_Datatype __pyx_t_5;
  __Pyx_RefNannySetupContext("for_bcast", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":466
 *                        object msg, int root,
 *                        MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, rank=0, sending=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":467
 *                        MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, rank=0, sending=0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_rank = 0;
  __pyx_v_sending = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":468
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, rank=0, sending=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 468, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":469
 *         cdef int inter=0, rank=0, sending=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":470
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *             if root == rank:
 *                 self.for_cco_send(0, msg, root, 0)
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 470, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":471
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(0, msg, root, 0)
 *                 sending = 1
 */
    __pyx_t_1 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":472
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 *                 self.for_cco_send(0, msg, root, 0)             # <<<<<<<<<<<<<<
 *                 sending = 1
 *             else:
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_msg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 472, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":473
 *             if root == rank:
 *                 self.for_cco_send(0, msg, root, 0)
 *                 sending = 1             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cco_recv(0, msg, root, 0)
 */
      __pyx_v_sending = 1;

      /* "mpi4py/MPI/msgbuffer.pxi":471
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(0, msg, root, 0)
 *                 sending = 1
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":475
 *                 sending = 1
 *             else:
 *                 self.for_cco_recv(0, msg, root, 0)             # <<<<<<<<<<<<<<
 *                 sending = 0
 *         else: # inter-communication
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_msg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 475, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":476
 *             else:
 *                 self.for_cco_recv(0, msg, root, 0)
 *                 sending = 0             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             if (root == MPI_ROOT or
 */
      __pyx_v_sending = 0;
    }
    __pyx_L5:;

    /* "mpi4py/MPI/msgbuffer.pxi":469
 *         cdef int inter=0, rank=0, sending=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":478
 *                 sending = 0
 *         else: # inter-communication
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(0, msg, root, 0)
 */
  /*else*/ {
    __pyx_t_3 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L7_bool_binop_done;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":479
 *         else: # inter-communication
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(0, msg, root, 0)
 *                 sending = 1
 */
    __pyx_t_3 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    __pyx_t_1 = __pyx_t_3;
    __pyx_L7_bool_binop_done:;

    /* "mpi4py/MPI/msgbuffer.pxi":478
 *                 sending = 0
 *         else: # inter-communication
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(0, msg, root, 0)
 */
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":480
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(0, msg, root, 0)             # <<<<<<<<<<<<<<
 *                 sending = 1
 *             else:
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_msg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 480, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":481
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(0, msg, root, 0)
 *                 sending = 1             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cco_recv(0, msg, root, 0)
 */
      __pyx_v_sending = 1;

      /* "mpi4py/MPI/msgbuffer.pxi":478
 *                 sending = 0
 *         else: # inter-communication
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(0, msg, root, 0)
 */
      goto __pyx_L6;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":483
 *                 sending = 1
 *             else:
 *                 self.for_cco_recv(0, msg, root, 0)             # <<<<<<<<<<<<<<
 *                 sending = 0
 *         if sending:
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_msg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 483, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":484
 *             else:
 *                 self.for_cco_recv(0, msg, root, 0)
 *                 sending = 0             # <<<<<<<<<<<<<<
 *         if sending:
 *             self.rbuf   = self.sbuf
 */
      __pyx_v_sending = 0;
    }
    __pyx_L6:;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":485
 *                 self.for_cco_recv(0, msg, root, 0)
 *                 sending = 0
 *         if sending:             # <<<<<<<<<<<<<<
 *             self.rbuf   = self.sbuf
 *             self.rcount = self.scount
 */
  __pyx_t_1 = (__pyx_v_sending != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":486
 *                 sending = 0
 *         if sending:
 *             self.rbuf   = self.sbuf             # <<<<<<<<<<<<<<
 *             self.rcount = self.scount
 *             self.rtype  = self.stype
 */
    __pyx_t_4 = __pyx_v_self->sbuf;
    __pyx_v_self->rbuf = __pyx_t_4;

    /* "mpi4py/MPI/msgbuffer.pxi":487
 *         if sending:
 *             self.rbuf   = self.sbuf
 *             self.rcount = self.scount             # <<<<<<<<<<<<<<
 *             self.rtype  = self.stype
 *         else:
 */
    __pyx_t_2 = __pyx_v_self->scount;
    __pyx_v_self->rcount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":488
 *             self.rbuf   = self.sbuf
 *             self.rcount = self.scount
 *             self.rtype  = self.stype             # <<<<<<<<<<<<<<
 *         else:
 *             self.sbuf   = self.rbuf
 */
    __pyx_t_5 = __pyx_v_self->stype;
    __pyx_v_self->rtype = __pyx_t_5;

    /* "mpi4py/MPI/msgbuffer.pxi":485
 *                 self.for_cco_recv(0, msg, root, 0)
 *                 sending = 0
 *         if sending:             # <<<<<<<<<<<<<<
 *             self.rbuf   = self.sbuf
 *             self.rcount = self.scount
 */
    goto __pyx_L9;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":490
 *             self.rtype  = self.stype
 *         else:
 *             self.sbuf   = self.rbuf             # <<<<<<<<<<<<<<
 *             self.scount = self.rcount
 *             self.stype  = self.rtype
 */
  /*else*/ {
    __pyx_t_4 = __pyx_v_self->rbuf;
    __pyx_v_self->sbuf = __pyx_t_4;

    /* "mpi4py/MPI/msgbuffer.pxi":491
 *         else:
 *             self.sbuf   = self.rbuf
 *             self.scount = self.rcount             # <<<<<<<<<<<<<<
 *             self.stype  = self.rtype
 *         return 0
 */
    __pyx_t_2 = __pyx_v_self->rcount;
    __pyx_v_self->scount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":492
 *             self.sbuf   = self.rbuf
 *             self.scount = self.rcount
 *             self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
    __pyx_t_5 = __pyx_v_self->rtype;
    __pyx_v_self->stype = __pyx_t_5;
  }
  __pyx_L9:;

  /* "mpi4py/MPI/msgbuffer.pxi":493
 *             self.scount = self.rcount
 *             self.stype  = self.rtype
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # gather/gatherv
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":463
 * 
 *     # bcast
 *     cdef int for_bcast(self,             # <<<<<<<<<<<<<<
 *                        object msg, int root,
 *                        MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":496
 * 
 *     # gather/gatherv
 *     cdef int for_gather(self, int v,             # <<<<<<<<<<<<<<
 *                         object smsg, object rmsg,
 *                         int root, MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_v_rank;
  int __pyx_v_null;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  MPI_Datatype __pyx_t_4;
  __Pyx_RefNannySetupContext("for_gather", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":499
 *                         object smsg, object rmsg,
 *                         int root, MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":500
 *                         int root, MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;
  __pyx_v_rank = 0;
  __pyx_v_null = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":501
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 501, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":502
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":503
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 503, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":504
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *             if root == rank:
 *                 self.for_cco_recv(v, rmsg, root, size)
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 504, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":505
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 if smsg is __IN_PLACE__:
 */
    __pyx_t_1 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":506
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 *                 self.for_cco_recv(v, rmsg, root, size)             # <<<<<<<<<<<<<<
 *                 if smsg is __IN_PLACE__:
 *                     self.sbuf   = MPI_IN_PLACE
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, __pyx_v_root, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 506, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":507
 *             if root == rank:
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount
 */
      __pyx_t_1 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {

        /* "mpi4py/MPI/msgbuffer.pxi":508
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 if smsg is __IN_PLACE__:
 *                     self.sbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *                     self.scount = self.rcount
 *                     self.stype  = self.rtype
 */
        __pyx_v_self->sbuf = MPI_IN_PLACE;

        /* "mpi4py/MPI/msgbuffer.pxi":509
 *                 if smsg is __IN_PLACE__:
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount             # <<<<<<<<<<<<<<
 *                     self.stype  = self.rtype
 *                 else:
 */
        __pyx_t_2 = __pyx_v_self->rcount;
        __pyx_v_self->scount = __pyx_t_2;

        /* "mpi4py/MPI/msgbuffer.pxi":510
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount
 *                     self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.for_cco_send(0, smsg, 0, 0)
 */
        __pyx_t_4 = __pyx_v_self->rtype;
        __pyx_v_self->stype = __pyx_t_4;

        /* "mpi4py/MPI/msgbuffer.pxi":507
 *             if root == rank:
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount
 */
        goto __pyx_L6;
      }

      /* "mpi4py/MPI/msgbuffer.pxi":512
 *                     self.stype  = self.rtype
 *                 else:
 *                     self.for_cco_send(0, smsg, 0, 0)             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cco_recv(v, rmsg, null, size)
 */
      /*else*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, 0, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 512, __pyx_L1_error)
      }
      __pyx_L6:;

      /* "mpi4py/MPI/msgbuffer.pxi":505
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 if smsg is __IN_PLACE__:
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":514
 *                     self.for_cco_send(0, smsg, 0, 0)
 *             else:
 *                 self.for_cco_recv(v, rmsg, null, size)             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(0, smsg, root, 0)
 *         else: # inter-communication
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, __pyx_v_null, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 514, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":515
 *             else:
 *                 self.for_cco_recv(v, rmsg, null, size)
 *                 self.for_cco_send(0, smsg, root, 0)             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 515, __pyx_L1_error)
    }
    __pyx_L5:;

    /* "mpi4py/MPI/msgbuffer.pxi":502
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":517
 *                 self.for_cco_send(0, smsg, root, 0)
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 517, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":518
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_recv(v, rmsg, root, size)
 */
    __pyx_t_1 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L8_bool_binop_done;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":519
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):             # <<<<<<<<<<<<<<
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 self.for_cco_send(0, smsg, null, 0)
 */
    __pyx_t_1 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    __pyx_t_3 = __pyx_t_1;
    __pyx_L8_bool_binop_done:;

    /* "mpi4py/MPI/msgbuffer.pxi":518
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_recv(v, rmsg, root, size)
 */
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgbuffer.pxi":520
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_recv(v, rmsg, root, size)             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(0, smsg, null, 0)
 *             else:
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, __pyx_v_root, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 520, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":521
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_recv(v, rmsg, root, size)
 *                 self.for_cco_send(0, smsg, null, 0)             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cco_recv(v, rmsg, null, size)
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, __pyx_v_null, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 521, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":518
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_recv(v, rmsg, root, size)
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":523
 *                 self.for_cco_send(0, smsg, null, 0)
 *             else:
 *                 self.for_cco_recv(v, rmsg, null, size)             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(0, smsg, root, 0)
 *         return 0
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, __pyx_v_null, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 523, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":524
 *             else:
 *                 self.for_cco_recv(v, rmsg, null, size)
 *                 self.for_cco_send(0, smsg, root, 0)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 524, __pyx_L1_error)
    }
    __pyx_L7:;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":525
 *                 self.for_cco_recv(v, rmsg, null, size)
 *                 self.for_cco_send(0, smsg, root, 0)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # scatter/scatterv
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":496
 * 
 *     # gather/gatherv
 *     cdef int for_gather(self, int v,             # <<<<<<<<<<<<<<
 *                         object smsg, object rmsg,
 *                         int root, MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":528
 * 
 *     # scatter/scatterv
 *     cdef int for_scatter(self, int v,             # <<<<<<<<<<<<<<
 *                          object smsg, object rmsg,
 *                          int root, MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_v_rank;
  int __pyx_v_null;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  MPI_Datatype __pyx_t_4;
  __Pyx_RefNannySetupContext("for_scatter", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":531
 *                          object smsg, object rmsg,
 *                          int root, MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":532
 *                          int root, MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;
  __pyx_v_rank = 0;
  __pyx_v_null = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":533
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 533, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":534
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":535
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 535, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":536
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *             if root == rank:
 *                 self.for_cco_send(v, smsg, root, size)
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 536, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":537
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(v, smsg, root, size)
 *                 if rmsg is __IN_PLACE__:
 */
    __pyx_t_1 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":538
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 *                 self.for_cco_send(v, smsg, root, size)             # <<<<<<<<<<<<<<
 *                 if rmsg is __IN_PLACE__:
 *                     self.rbuf   = MPI_IN_PLACE
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, __pyx_v_v, __pyx_v_smsg, __pyx_v_root, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 538, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":539
 *             if root == rank:
 *                 self.for_cco_send(v, smsg, root, size)
 *                 if rmsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *                     self.rbuf   = MPI_IN_PLACE
 *                     self.rcount = self.scount
 */
      __pyx_t_1 = (__pyx_v_rmsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {

        /* "mpi4py/MPI/msgbuffer.pxi":540
 *                 self.for_cco_send(v, smsg, root, size)
 *                 if rmsg is __IN_PLACE__:
 *                     self.rbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *                     self.rcount = self.scount
 *                     self.rtype  = self.stype
 */
        __pyx_v_self->rbuf = MPI_IN_PLACE;

        /* "mpi4py/MPI/msgbuffer.pxi":541
 *                 if rmsg is __IN_PLACE__:
 *                     self.rbuf   = MPI_IN_PLACE
 *                     self.rcount = self.scount             # <<<<<<<<<<<<<<
 *                     self.rtype  = self.stype
 *                 else:
 */
        __pyx_t_2 = __pyx_v_self->scount;
        __pyx_v_self->rcount = __pyx_t_2;

        /* "mpi4py/MPI/msgbuffer.pxi":542
 *                     self.rbuf   = MPI_IN_PLACE
 *                     self.rcount = self.scount
 *                     self.rtype  = self.stype             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.for_cco_recv(0, rmsg, root, 0)
 */
        __pyx_t_4 = __pyx_v_self->stype;
        __pyx_v_self->rtype = __pyx_t_4;

        /* "mpi4py/MPI/msgbuffer.pxi":539
 *             if root == rank:
 *                 self.for_cco_send(v, smsg, root, size)
 *                 if rmsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *                     self.rbuf   = MPI_IN_PLACE
 *                     self.rcount = self.scount
 */
        goto __pyx_L6;
      }

      /* "mpi4py/MPI/msgbuffer.pxi":544
 *                     self.rtype  = self.stype
 *                 else:
 *                     self.for_cco_recv(0, rmsg, root, 0)             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cco_send(v, smsg, null, size)
 */
      /*else*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_rmsg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 544, __pyx_L1_error)
      }
      __pyx_L6:;

      /* "mpi4py/MPI/msgbuffer.pxi":537
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(v, smsg, root, size)
 *                 if rmsg is __IN_PLACE__:
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":546
 *                     self.for_cco_recv(0, rmsg, root, 0)
 *             else:
 *                 self.for_cco_send(v, smsg, null, size)             # <<<<<<<<<<<<<<
 *                 self.for_cco_recv(0, rmsg, root, 0)
 *         else: # inter-communication
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, __pyx_v_v, __pyx_v_smsg, __pyx_v_null, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 546, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":547
 *             else:
 *                 self.for_cco_send(v, smsg, null, size)
 *                 self.for_cco_recv(0, rmsg, root, 0)             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_rmsg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 547, __pyx_L1_error)
    }
    __pyx_L5:;

    /* "mpi4py/MPI/msgbuffer.pxi":534
 *         cdef int inter=0, size=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":549
 *                 self.for_cco_recv(0, rmsg, root, 0)
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 549, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":550
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(v, smsg, root, size)
 */
    __pyx_t_1 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L8_bool_binop_done;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":551
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):             # <<<<<<<<<<<<<<
 *                 self.for_cco_send(v, smsg, root, size)
 *                 self.for_cco_recv(0, rmsg, null,  0)
 */
    __pyx_t_1 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    __pyx_t_3 = __pyx_t_1;
    __pyx_L8_bool_binop_done:;

    /* "mpi4py/MPI/msgbuffer.pxi":550
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(v, smsg, root, size)
 */
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgbuffer.pxi":552
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(v, smsg, root, size)             # <<<<<<<<<<<<<<
 *                 self.for_cco_recv(0, rmsg, null,  0)
 *             else:
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, __pyx_v_v, __pyx_v_smsg, __pyx_v_root, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 552, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":553
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(v, smsg, root, size)
 *                 self.for_cco_recv(0, rmsg, null,  0)             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cco_send(v, smsg, null, size)
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_rmsg, __pyx_v_null, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 553, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":550
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cco_send(v, smsg, root, size)
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":555
 *                 self.for_cco_recv(0, rmsg, null,  0)
 *             else:
 *                 self.for_cco_send(v, smsg, null, size)             # <<<<<<<<<<<<<<
 *                 self.for_cco_recv(0, rmsg, root, 0)
 *         return 0
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, __pyx_v_v, __pyx_v_smsg, __pyx_v_null, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 555, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":556
 *             else:
 *                 self.for_cco_send(v, smsg, null, size)
 *                 self.for_cco_recv(0, rmsg, root, 0)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_rmsg, __pyx_v_root, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 556, __pyx_L1_error)
    }
    __pyx_L7:;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":557
 *                 self.for_cco_send(v, smsg, null, size)
 *                 self.for_cco_recv(0, rmsg, root, 0)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # allgather/allgatherv
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":528
 * 
 *     # scatter/scatterv
 *     cdef int for_scatter(self, int v,             # <<<<<<<<<<<<<<
 *                          object smsg, object rmsg,
 *                          int root, MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":560
 * 
 *     # allgather/allgatherv
 *     cdef int for_allgather(self, int v,             # <<<<<<<<<<<<<<
 *                            object smsg, object rmsg,
 *                            MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  MPI_Datatype __pyx_t_5;
  __Pyx_RefNannySetupContext("for_allgather", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":563
 *                            object smsg, object rmsg,
 *                            MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":564
 *                            MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":565
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 565, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":566
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":567
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 567, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":566
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":569
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 569, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":571
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)             # <<<<<<<<<<<<<<
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, 0, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 571, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":572
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
  __pyx_t_3 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":573
 *         self.for_cco_recv(v, rmsg, 0, size)
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *             self.scount = self.rcount
 *             self.stype  = self.rtype
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":574
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount             # <<<<<<<<<<<<<<
 *             self.stype  = self.rtype
 *         else:
 */
    __pyx_t_2 = __pyx_v_self->rcount;
    __pyx_v_self->scount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":575
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 *             self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cco_send(0, smsg, 0, 0)
 */
    __pyx_t_5 = __pyx_v_self->rtype;
    __pyx_v_self->stype = __pyx_t_5;

    /* "mpi4py/MPI/msgbuffer.pxi":572
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
    goto __pyx_L5;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":577
 *             self.stype  = self.rtype
 *         else:
 *             self.for_cco_send(0, smsg, 0, 0)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, 0, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 577, __pyx_L1_error)
  }
  __pyx_L5:;

  /* "mpi4py/MPI/msgbuffer.pxi":578
 *         else:
 *             self.for_cco_send(0, smsg, 0, 0)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # alltoall/alltoallv
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":560
 * 
 *     # allgather/allgatherv
 *     cdef int for_allgather(self, int v,             # <<<<<<<<<<<<<<
 *                            object smsg, object rmsg,
 *                            MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":581
 * 
 *     # alltoall/alltoallv
 *     cdef int for_alltoall(self, int v,             # <<<<<<<<<<<<<<
 *                           object smsg, object rmsg,
 *                           MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int *__pyx_t_5;
  MPI_Datatype __pyx_t_6;
  __Pyx_RefNannySetupContext("for_alltoall", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":584
 *                           object smsg, object rmsg,
 *                           MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":585
 *                           MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":586
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 586, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":587
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":588
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 588, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":587
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":590
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 590, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":592
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)             # <<<<<<<<<<<<<<
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf    = MPI_IN_PLACE
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, 0, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 592, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":593
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scount  = self.rcount
 */
  __pyx_t_3 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":594
 *         self.for_cco_recv(v, rmsg, 0, size)
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf    = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *             self.scount  = self.rcount
 *             self.scounts = self.rcounts
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":595
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scount  = self.rcount             # <<<<<<<<<<<<<<
 *             self.scounts = self.rcounts
 *             self.sdispls = self.rdispls
 */
    __pyx_t_2 = __pyx_v_self->rcount;
    __pyx_v_self->scount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":596
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scount  = self.rcount
 *             self.scounts = self.rcounts             # <<<<<<<<<<<<<<
 *             self.sdispls = self.rdispls
 *             self.stype   = self.rtype
 */
    __pyx_t_5 = __pyx_v_self->rcounts;
    __pyx_v_self->scounts = __pyx_t_5;

    /* "mpi4py/MPI/msgbuffer.pxi":597
 *             self.scount  = self.rcount
 *             self.scounts = self.rcounts
 *             self.sdispls = self.rdispls             # <<<<<<<<<<<<<<
 *             self.stype   = self.rtype
 *         else:
 */
    __pyx_t_5 = __pyx_v_self->rdispls;
    __pyx_v_self->sdispls = __pyx_t_5;

    /* "mpi4py/MPI/msgbuffer.pxi":598
 *             self.scounts = self.rcounts
 *             self.sdispls = self.rdispls
 *             self.stype   = self.rtype             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cco_send(v, smsg, 0, size)
 */
    __pyx_t_6 = __pyx_v_self->rtype;
    __pyx_v_self->stype = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":593
 *         #
 *         self.for_cco_recv(v, rmsg, 0, size)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scount  = self.rcount
 */
    goto __pyx_L5;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":600
 *             self.stype   = self.rtype
 *         else:
 *             self.for_cco_send(v, smsg, 0, size)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, __pyx_v_v, __pyx_v_smsg, 0, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 600, __pyx_L1_error)
  }
  __pyx_L5:;

  /* "mpi4py/MPI/msgbuffer.pxi":601
 *         else:
 *             self.for_cco_send(v, smsg, 0, size)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # Neighbor Collectives
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":581
 * 
 *     # alltoall/alltoallv
 *     cdef int for_alltoall(self, int v,             # <<<<<<<<<<<<<<
 *                           object smsg, object rmsg,
 *                           MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":607
 * 
 *     # neighbor allgather/allgatherv
 *     cdef int for_neighbor_allgather(self, int v,             # <<<<<<<<<<<<<<
 *                                     object smsg, object rmsg,
 *                                     MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_recvsize;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("for_neighbor_allgather", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":610
 *                                     object smsg, object rmsg,
 *                                     MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int recvsize=0
 *         comm_neighbors_count(comm, &recvsize, NULL)
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":611
 *                                     MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int recvsize=0             # <<<<<<<<<<<<<<
 *         comm_neighbors_count(comm, &recvsize, NULL)
 *         self.for_cco_send(0, smsg, 0, 0)
 */
  __pyx_v_recvsize = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":612
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int recvsize=0
 *         comm_neighbors_count(comm, &recvsize, NULL)             # <<<<<<<<<<<<<<
 *         self.for_cco_send(0, smsg, 0, 0)
 *         self.for_cco_recv(v, rmsg, 0, recvsize)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_comm_neighbors_count(__pyx_v_comm, (&__pyx_v_recvsize), NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 612, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":613
 *         cdef int recvsize=0
 *         comm_neighbors_count(comm, &recvsize, NULL)
 *         self.for_cco_send(0, smsg, 0, 0)             # <<<<<<<<<<<<<<
 *         self.for_cco_recv(v, rmsg, 0, recvsize)
 *         return 0
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, 0, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 613, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":614
 *         comm_neighbors_count(comm, &recvsize, NULL)
 *         self.for_cco_send(0, smsg, 0, 0)
 *         self.for_cco_recv(v, rmsg, 0, recvsize)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, 0, __pyx_v_recvsize); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 614, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":615
 *         self.for_cco_send(0, smsg, 0, 0)
 *         self.for_cco_recv(v, rmsg, 0, recvsize)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # neighbor alltoall/alltoallv
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":607
 * 
 *     # neighbor allgather/allgatherv
 *     cdef int for_neighbor_allgather(self, int v,             # <<<<<<<<<<<<<<
 *                                     object smsg, object rmsg,
 *                                     MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":618
 * 
 *     # neighbor alltoall/alltoallv
 *     cdef int for_neighbor_alltoall(self, int v,             # <<<<<<<<<<<<<<
 *                                    object smsg, object rmsg,
 *                                    MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, int __pyx_v_v, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_sendsize;
  int __pyx_v_recvsize;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("for_neighbor_alltoall", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":621
 *                                    object smsg, object rmsg,
 *                                    MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int sendsize=0, recvsize=0
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":622
 *                                    MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int sendsize=0, recvsize=0             # <<<<<<<<<<<<<<
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 *         self.for_cco_send(v, smsg, 0, sendsize)
 */
  __pyx_v_sendsize = 0;
  __pyx_v_recvsize = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":623
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int sendsize=0, recvsize=0
 *         comm_neighbors_count(comm, &recvsize, &sendsize)             # <<<<<<<<<<<<<<
 *         self.for_cco_send(v, smsg, 0, sendsize)
 *         self.for_cco_recv(v, rmsg, 0, recvsize)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_comm_neighbors_count(__pyx_v_comm, (&__pyx_v_recvsize), (&__pyx_v_sendsize)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 623, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":624
 *         cdef int sendsize=0, recvsize=0
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 *         self.for_cco_send(v, smsg, 0, sendsize)             # <<<<<<<<<<<<<<
 *         self.for_cco_recv(v, rmsg, 0, recvsize)
 *         return 0
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, __pyx_v_v, __pyx_v_smsg, 0, __pyx_v_sendsize); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 624, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":625
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 *         self.for_cco_send(v, smsg, 0, sendsize)
 *         self.for_cco_recv(v, rmsg, 0, recvsize)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, __pyx_v_v, __pyx_v_rmsg, 0, __pyx_v_recvsize); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 625, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":626
 *         self.for_cco_send(v, smsg, 0, sendsize)
 *         self.for_cco_recv(v, rmsg, 0, recvsize)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # Collective Reductions Operations
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":618
 * 
 *     # neighbor alltoall/alltoallv
 *     cdef int for_neighbor_alltoall(self, int v,             # <<<<<<<<<<<<<<
 *                                    object smsg, object rmsg,
 *                                    MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":632
 * 
 *     # sendbuf
 *     cdef int for_cro_send(self, object amsg, int root) except -1:             # <<<<<<<<<<<<<<
 *         self._smsg = message_simple(amsg, 1, # readonly
 *                                     root, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_amsg, int __pyx_v_root) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("for_cro_send", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":633
 *     # sendbuf
 *     cdef int for_cro_send(self, object amsg, int root) except -1:
 *         self._smsg = message_simple(amsg, 1, # readonly             # <<<<<<<<<<<<<<
 *                                     root, 0,
 *                                     &self.sbuf,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_amsg, 1, __pyx_v_root, 0, (&__pyx_v_self->sbuf), (&__pyx_v_self->scount), (&__pyx_v_self->stype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_smsg);
  __Pyx_DECREF(__pyx_v_self->_smsg);
  __pyx_v_self->_smsg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":638
 *                                     &self.scount,
 *                                     &self.stype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # recvbuf
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":632
 * 
 *     # sendbuf
 *     cdef int for_cro_send(self, object amsg, int root) except -1:             # <<<<<<<<<<<<<<
 *         self._smsg = message_simple(amsg, 1, # readonly
 *                                     root, 0,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_cro_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":641
 * 
 *     # recvbuf
 *     cdef int for_cro_recv(self, object amsg, int root) except -1:             # <<<<<<<<<<<<<<
 *         self._rmsg = message_simple(amsg, 0, # writable
 *                                     root, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_amsg, int __pyx_v_root) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("for_cro_recv", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":642
 *     # recvbuf
 *     cdef int for_cro_recv(self, object amsg, int root) except -1:
 *         self._rmsg = message_simple(amsg, 0, # writable             # <<<<<<<<<<<<<<
 *                                     root, 0,
 *                                     &self.rbuf,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_amsg, 0, __pyx_v_root, 0, (&__pyx_v_self->rbuf), (&__pyx_v_self->rcount), (&__pyx_v_self->rtype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 642, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_rmsg);
  __Pyx_DECREF(__pyx_v_self->_rmsg);
  __pyx_v_self->_rmsg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":647
 *                                     &self.rcount,
 *                                     &self.rtype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_reduce(self,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":641
 * 
 *     # recvbuf
 *     cdef int for_cro_recv(self, object amsg, int root) except -1:             # <<<<<<<<<<<<<<
 *         self._rmsg = message_simple(amsg, 0, # writable
 *                                     root, 0,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_cro_recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":649
 *         return 0
 * 
 *     cdef int for_reduce(self,             # <<<<<<<<<<<<<<
 *                         object smsg, object rmsg,
 *                         int root, MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_rank;
  int __pyx_v_null;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  MPI_Datatype __pyx_t_4;
  __Pyx_RefNannySetupContext("for_reduce", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":652
 *                         object smsg, object rmsg,
 *                         int root, MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":653
 *                         int root, MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, rank=0, null=MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_rank = 0;
  __pyx_v_null = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":654
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 654, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":655
 *         cdef int inter=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":656
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *             if root == rank:
 *                 self.for_cro_recv(rmsg, root)
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 656, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":657
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cro_recv(rmsg, root)
 *                 if smsg is __IN_PLACE__:
 */
    __pyx_t_1 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgbuffer.pxi":658
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 *                 self.for_cro_recv(rmsg, root)             # <<<<<<<<<<<<<<
 *                 if smsg is __IN_PLACE__:
 *                     self.sbuf   = MPI_IN_PLACE
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, __pyx_v_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 658, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":659
 *             if root == rank:
 *                 self.for_cro_recv(rmsg, root)
 *                 if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount
 */
      __pyx_t_1 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {

        /* "mpi4py/MPI/msgbuffer.pxi":660
 *                 self.for_cro_recv(rmsg, root)
 *                 if smsg is __IN_PLACE__:
 *                     self.sbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *                     self.scount = self.rcount
 *                     self.stype  = self.rtype
 */
        __pyx_v_self->sbuf = MPI_IN_PLACE;

        /* "mpi4py/MPI/msgbuffer.pxi":661
 *                 if smsg is __IN_PLACE__:
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount             # <<<<<<<<<<<<<<
 *                     self.stype  = self.rtype
 *                 else:
 */
        __pyx_t_2 = __pyx_v_self->rcount;
        __pyx_v_self->scount = __pyx_t_2;

        /* "mpi4py/MPI/msgbuffer.pxi":662
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount
 *                     self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.for_cro_send(smsg, root)
 */
        __pyx_t_4 = __pyx_v_self->rtype;
        __pyx_v_self->stype = __pyx_t_4;

        /* "mpi4py/MPI/msgbuffer.pxi":659
 *             if root == rank:
 *                 self.for_cro_recv(rmsg, root)
 *                 if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *                     self.sbuf   = MPI_IN_PLACE
 *                     self.scount = self.rcount
 */
        goto __pyx_L6;
      }

      /* "mpi4py/MPI/msgbuffer.pxi":664
 *                     self.stype  = self.rtype
 *                 else:
 *                     self.for_cro_send(smsg, root)             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cro_recv(rmsg, null)
 */
      /*else*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, __pyx_v_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 664, __pyx_L1_error)
      }
      __pyx_L6:;

      /* "mpi4py/MPI/msgbuffer.pxi":657
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:             # <<<<<<<<<<<<<<
 *                 self.for_cro_recv(rmsg, root)
 *                 if smsg is __IN_PLACE__:
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":666
 *                     self.for_cro_send(smsg, root)
 *             else:
 *                 self.for_cro_recv(rmsg, null)             # <<<<<<<<<<<<<<
 *                 self.for_cro_send(smsg, root)
 *                 self.rcount = self.scount
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, __pyx_v_null); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 666, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":667
 *             else:
 *                 self.for_cro_recv(rmsg, null)
 *                 self.for_cro_send(smsg, root)             # <<<<<<<<<<<<<<
 *                 self.rcount = self.scount
 *                 self.rtype  = self.stype
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, __pyx_v_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 667, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":668
 *                 self.for_cro_recv(rmsg, null)
 *                 self.for_cro_send(smsg, root)
 *                 self.rcount = self.scount             # <<<<<<<<<<<<<<
 *                 self.rtype  = self.stype
 *         else: # inter-communication
 */
      __pyx_t_2 = __pyx_v_self->scount;
      __pyx_v_self->rcount = __pyx_t_2;

      /* "mpi4py/MPI/msgbuffer.pxi":669
 *                 self.for_cro_send(smsg, root)
 *                 self.rcount = self.scount
 *                 self.rtype  = self.stype             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             if (root == MPI_ROOT or
 */
      __pyx_t_4 = __pyx_v_self->stype;
      __pyx_v_self->rtype = __pyx_t_4;
    }
    __pyx_L5:;

    /* "mpi4py/MPI/msgbuffer.pxi":655
 *         cdef int inter=0, rank=0, null=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_rank(comm, &rank) )
 *             if root == rank:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":671
 *                 self.rtype  = self.stype
 *         else: # inter-communication
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cro_recv(rmsg, root)
 */
  /*else*/ {
    __pyx_t_1 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L8_bool_binop_done;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":672
 *         else: # inter-communication
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):             # <<<<<<<<<<<<<<
 *                 self.for_cro_recv(rmsg, root)
 *                 self.scount = self.rcount
 */
    __pyx_t_1 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    __pyx_t_3 = __pyx_t_1;
    __pyx_L8_bool_binop_done:;

    /* "mpi4py/MPI/msgbuffer.pxi":671
 *                 self.rtype  = self.stype
 *         else: # inter-communication
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cro_recv(rmsg, root)
 */
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgbuffer.pxi":673
 *             if (root == MPI_ROOT or
 *                 root == MPI_PROC_NULL):
 *                 self.for_cro_recv(rmsg, root)             # <<<<<<<<<<<<<<
 *                 self.scount = self.rcount
 *                 self.stype  = self.rtype
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, __pyx_v_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 673, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":674
 *                 root == MPI_PROC_NULL):
 *                 self.for_cro_recv(rmsg, root)
 *                 self.scount = self.rcount             # <<<<<<<<<<<<<<
 *                 self.stype  = self.rtype
 *             else:
 */
      __pyx_t_2 = __pyx_v_self->rcount;
      __pyx_v_self->scount = __pyx_t_2;

      /* "mpi4py/MPI/msgbuffer.pxi":675
 *                 self.for_cro_recv(rmsg, root)
 *                 self.scount = self.rcount
 *                 self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *             else:
 *                 self.for_cro_send(smsg, root)
 */
      __pyx_t_4 = __pyx_v_self->rtype;
      __pyx_v_self->stype = __pyx_t_4;

      /* "mpi4py/MPI/msgbuffer.pxi":671
 *                 self.rtype  = self.stype
 *         else: # inter-communication
 *             if (root == MPI_ROOT or             # <<<<<<<<<<<<<<
 *                 root == MPI_PROC_NULL):
 *                 self.for_cro_recv(rmsg, root)
 */
      goto __pyx_L7;
    }

    /* "mpi4py/MPI/msgbuffer.pxi":677
 *                 self.stype  = self.rtype
 *             else:
 *                 self.for_cro_send(smsg, root)             # <<<<<<<<<<<<<<
 *                 self.rcount = self.scount
 *                 self.rtype  = self.stype
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, __pyx_v_root); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 677, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":678
 *             else:
 *                 self.for_cro_send(smsg, root)
 *                 self.rcount = self.scount             # <<<<<<<<<<<<<<
 *                 self.rtype  = self.stype
 *         return 0
 */
      __pyx_t_2 = __pyx_v_self->scount;
      __pyx_v_self->rcount = __pyx_t_2;

      /* "mpi4py/MPI/msgbuffer.pxi":679
 *                 self.for_cro_send(smsg, root)
 *                 self.rcount = self.scount
 *                 self.rtype  = self.stype             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_4 = __pyx_v_self->stype;
      __pyx_v_self->rtype = __pyx_t_4;
    }
    __pyx_L7:;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":680
 *                 self.rcount = self.scount
 *                 self.rtype  = self.stype
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_allreduce(self,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":649
 *         return 0
 * 
 *     cdef int for_reduce(self,             # <<<<<<<<<<<<<<
 *                         object smsg, object rmsg,
 *                         int root, MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":682
 *         return 0
 * 
 *     cdef int for_allreduce(self,             # <<<<<<<<<<<<<<
 *                            object smsg, object rmsg,
 *                            MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allreduce(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  MPI_Datatype __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  __Pyx_RefNannySetupContext("for_allreduce", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":685
 *                            object smsg, object rmsg,
 *                            MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":686
 *                            MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         # get send and recv buffers
 */
  __pyx_v_inter = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":687
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 687, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":689
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)             # <<<<<<<<<<<<<<
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 689, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":690
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
  __pyx_t_3 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":691
 *         self.for_cro_recv(rmsg, 0)
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *             self.scount = self.rcount
 *             self.stype  = self.rtype
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":692
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount             # <<<<<<<<<<<<<<
 *             self.stype  = self.rtype
 *         else:
 */
    __pyx_t_2 = __pyx_v_self->rcount;
    __pyx_v_self->scount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":693
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 *             self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cro_send(smsg, 0)
 */
    __pyx_t_5 = __pyx_v_self->rtype;
    __pyx_v_self->stype = __pyx_t_5;

    /* "mpi4py/MPI/msgbuffer.pxi":690
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":695
 *             self.stype  = self.rtype
 *         else:
 *             self.for_cro_send(smsg, 0)             # <<<<<<<<<<<<<<
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 695, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":697
 *             self.for_cro_send(smsg, 0)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  __pyx_t_1 = ((__pyx_v_self->sbuf != MPI_IN_PLACE) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":698
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    __pyx_t_1 = ((__pyx_v_self->stype != __pyx_v_self->rtype) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":699
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 */
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 699, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(5, 699, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":698
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":701
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 */
    __pyx_t_1 = ((__pyx_v_self->scount != __pyx_v_self->rcount) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":704
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->scount); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 704, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 704, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 704, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
      __pyx_t_6 = 0;
      __pyx_t_7 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":703
 *             if self.scount != self.rcount:
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %             # <<<<<<<<<<<<<<
 *                     (self.scount, self.rcount))
 *         return 0
 */
      __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_send_count_d_and_rec, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 703, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":702
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))
 */
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 702, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(5, 702, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":701
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":697
 *             self.for_cro_send(smsg, 0)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":705
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_reduce_scatter_block(self,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":682
 *         return 0
 * 
 *     cdef int for_allreduce(self,             # <<<<<<<<<<<<<<
 *                            object smsg, object rmsg,
 *                            MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_allreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":707
 *         return 0
 * 
 *     cdef int for_reduce_scatter_block(self,             # <<<<<<<<<<<<<<
 *                                       object smsg, object rmsg,
 *                                       MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter_block(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("for_reduce_scatter_block", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":710
 *                                       object smsg, object rmsg,
 *                                       MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":711
 *                                       MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":712
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         # get send and recv buffers
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 712, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":713
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         # get send and recv buffers
 *         if not inter and smsg is __IN_PLACE__:
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 713, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":715
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         # get send and recv buffers
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.for_cco_recv(0, rmsg, 0, size)
 *             self.sbuf = MPI_IN_PLACE
 */
  __pyx_t_3 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":716
 *         # get send and recv buffers
 *         if not inter and smsg is __IN_PLACE__:
 *             self.for_cco_recv(0, rmsg, 0, size)             # <<<<<<<<<<<<<<
 *             self.sbuf = MPI_IN_PLACE
 *         else:
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_rmsg, 0, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 716, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":717
 *         if not inter and smsg is __IN_PLACE__:
 *             self.for_cco_recv(0, rmsg, 0, size)
 *             self.sbuf = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cco_recv(0, rmsg, 0, 0)
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":715
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         # get send and recv buffers
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.for_cco_recv(0, rmsg, 0, size)
 *             self.sbuf = MPI_IN_PLACE
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":719
 *             self.sbuf = MPI_IN_PLACE
 *         else:
 *             self.for_cco_recv(0, rmsg, 0, 0)             # <<<<<<<<<<<<<<
 *             self.for_cco_send(0, smsg, 0, size)
 *         # check counts and datatypes
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv(__pyx_v_self, 0, __pyx_v_rmsg, 0, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 719, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":720
 *         else:
 *             self.for_cco_recv(0, rmsg, 0, 0)
 *             self.for_cco_send(0, smsg, 0, size)             # <<<<<<<<<<<<<<
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send(__pyx_v_self, 0, __pyx_v_smsg, 0, __pyx_v_size); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 720, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":722
 *             self.for_cco_send(0, smsg, 0, size)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  __pyx_t_1 = ((__pyx_v_self->sbuf != MPI_IN_PLACE) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":723
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    __pyx_t_1 = ((__pyx_v_self->stype != __pyx_v_self->rtype) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":724
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 */
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 724, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 724, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":723
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":726
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d receive count %d" %
 */
    __pyx_t_1 = ((__pyx_v_self->scount != __pyx_v_self->rcount) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":729
 *                 raise ValueError(
 *                     "mismatch in send count %d receive count %d" %
 *                     (self.scount, self.rcount*size))             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->scount); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_self->rcount * __pyx_v_size)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":728
 *             if self.scount != self.rcount:
 *                 raise ValueError(
 *                     "mismatch in send count %d receive count %d" %             # <<<<<<<<<<<<<<
 *                     (self.scount, self.rcount*size))
 *         return 0
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_send_count_d_receive, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 728, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":727
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send count %d receive count %d" %
 *                     (self.scount, self.rcount*size))
 */
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 727, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(5, 727, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":726
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d receive count %d" %
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":722
 *             self.for_cco_send(0, smsg, 0, size)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":730
 *                     "mismatch in send count %d receive count %d" %
 *                     (self.scount, self.rcount*size))
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_reduce_scatter(self,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":707
 *         return 0
 * 
 *     cdef int for_reduce_scatter_block(self,             # <<<<<<<<<<<<<<
 *                                       object smsg, object rmsg,
 *                                       MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_reduce_scatter_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":732
 *         return 0
 * 
 *     cdef int for_reduce_scatter(self,             # <<<<<<<<<<<<<<
 *                                 object smsg, object rmsg, object rcnt,
 *                                 MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, PyObject *__pyx_v_rcnt, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_v_rank;
  int __pyx_v_i;
  int __pyx_v_sumrcounts;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  __Pyx_RefNannySetupContext("for_reduce_scatter", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":735
 *                                 object smsg, object rmsg, object rcnt,
 *                                 MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0, rank=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":736
 *                                 MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0, rank=MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":737
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0, rank=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 737, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":738
 *         cdef int inter=0, size=0, rank=MPI_PROC_NULL
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         # get send and recv buffers
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 738, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":739
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 739, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":741
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)             # <<<<<<<<<<<<<<
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf = MPI_IN_PLACE
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 741, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":742
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf = MPI_IN_PLACE
 *         else:
 */
  __pyx_t_3 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":743
 *         self.for_cro_recv(rmsg, 0)
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cro_send(smsg, 0)
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":742
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf = MPI_IN_PLACE
 *         else:
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":745
 *             self.sbuf = MPI_IN_PLACE
 *         else:
 *             self.for_cro_send(smsg, 0)             # <<<<<<<<<<<<<<
 *         # get receive counts
 *         if rcnt is None and not inter and self.sbuf != MPI_IN_PLACE:
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 745, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":747
 *             self.for_cro_send(smsg, 0)
 *         # get receive counts
 *         if rcnt is None and not inter and self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             self._rcnt = newarray(size, &self.rcounts)
 *             CHKERR( MPI_Allgather(&self.rcount, 1, MPI_INT,
 */
  __pyx_t_4 = (__pyx_v_rcnt == Py_None);
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_self->sbuf != MPI_IN_PLACE) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":748
 *         # get receive counts
 *         if rcnt is None and not inter and self.sbuf != MPI_IN_PLACE:
 *             self._rcnt = newarray(size, &self.rcounts)             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Allgather(&self.rcount, 1, MPI_INT,
 *                                   self.rcounts, 1, MPI_INT, comm) )
 */
    __pyx_t_5 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_size, (&__pyx_v_self->rcounts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_v_self->_rcnt);
    __Pyx_DECREF(__pyx_v_self->_rcnt);
    __pyx_v_self->_rcnt = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":749
 *         if rcnt is None and not inter and self.sbuf != MPI_IN_PLACE:
 *             self._rcnt = newarray(size, &self.rcounts)
 *             CHKERR( MPI_Allgather(&self.rcount, 1, MPI_INT,             # <<<<<<<<<<<<<<
 *                                   self.rcounts, 1, MPI_INT, comm) )
 *         else:
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Allgather((&__pyx_v_self->rcount), 1, MPI_INT, __pyx_v_self->rcounts, 1, MPI_INT, __pyx_v_comm)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 749, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":747
 *             self.for_cro_send(smsg, 0)
 *         # get receive counts
 *         if rcnt is None and not inter and self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             self._rcnt = newarray(size, &self.rcounts)
 *             CHKERR( MPI_Allgather(&self.rcount, 1, MPI_INT,
 */
    goto __pyx_L7;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":752
 *                                   self.rcounts, 1, MPI_INT, comm) )
 *         else:
 *             self._rcnt = chkarray(rcnt, size, &self.rcounts)             # <<<<<<<<<<<<<<
 *         # total sum or receive counts
 *         cdef int i=0, sumrcounts=0
 */
  /*else*/ {
    __pyx_t_5 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_rcnt, __pyx_v_size, (&__pyx_v_self->rcounts)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_v_self->_rcnt);
    __Pyx_DECREF(__pyx_v_self->_rcnt);
    __pyx_v_self->_rcnt = __pyx_t_5;
    __pyx_t_5 = 0;
  }
  __pyx_L7:;

  /* "mpi4py/MPI/msgbuffer.pxi":754
 *             self._rcnt = chkarray(rcnt, size, &self.rcounts)
 *         # total sum or receive counts
 *         cdef int i=0, sumrcounts=0             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < size:
 *             sumrcounts += self.rcounts[i]
 */
  __pyx_v_i = 0;
  __pyx_v_sumrcounts = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":755
 *         # total sum or receive counts
 *         cdef int i=0, sumrcounts=0
 *         for i from 0 <= i < size:             # <<<<<<<<<<<<<<
 *             sumrcounts += self.rcounts[i]
 *         # check counts and datatypes
 */
  __pyx_t_2 = __pyx_v_size;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {

    /* "mpi4py/MPI/msgbuffer.pxi":756
 *         cdef int i=0, sumrcounts=0
 *         for i from 0 <= i < size:
 *             sumrcounts += self.rcounts[i]             # <<<<<<<<<<<<<<
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 */
    __pyx_v_sumrcounts = (__pyx_v_sumrcounts + (__pyx_v_self->rcounts[__pyx_v_i]));
  }

  /* "mpi4py/MPI/msgbuffer.pxi":758
 *             sumrcounts += self.rcounts[i]
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  __pyx_t_1 = ((__pyx_v_self->sbuf != MPI_IN_PLACE) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":759
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    __pyx_t_1 = ((__pyx_v_self->stype != __pyx_v_self->rtype) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":760
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != sumrcounts:
 */
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 760, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":759
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":762
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != sumrcounts:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and sum(counts) %d" %
 */
    __pyx_t_1 = ((__pyx_v_self->scount != __pyx_v_sumrcounts) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":765
 *                 raise ValueError(
 *                     "mismatch in send count %d and sum(counts) %d" %
 *                     (self.scount, sumrcounts))             # <<<<<<<<<<<<<<
 *             if self.rcount != self.rcounts[rank]:
 *                 raise ValueError(
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->scount); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_sumrcounts); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":764
 *             if self.scount != sumrcounts:
 *                 raise ValueError(
 *                     "mismatch in send count %d and sum(counts) %d" %             # <<<<<<<<<<<<<<
 *                     (self.scount, sumrcounts))
 *             if self.rcount != self.rcounts[rank]:
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_send_count_d_and_sum, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 764, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":763
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != sumrcounts:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send count %d and sum(counts) %d" %
 *                     (self.scount, sumrcounts))
 */
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(5, 763, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":762
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != sumrcounts:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and sum(counts) %d" %
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":766
 *                     "mismatch in send count %d and sum(counts) %d" %
 *                     (self.scount, sumrcounts))
 *             if self.rcount != self.rcounts[rank]:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in receive count %d and counts[%d] %d" %
 */
    __pyx_t_1 = ((__pyx_v_self->rcount != (__pyx_v_self->rcounts[__pyx_v_rank])) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":769
 *                 raise ValueError(
 *                     "mismatch in receive count %d and counts[%d] %d" %
 *                     (self.rcount, rank, self.rcounts[rank]))             # <<<<<<<<<<<<<<
 *         else:
 *             if self.rcount != sumrcounts:
 */
      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_self->rcounts[__pyx_v_rank])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_5);
      __pyx_t_7 = 0;
      __pyx_t_6 = 0;
      __pyx_t_5 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":768
 *             if self.rcount != self.rcounts[rank]:
 *                 raise ValueError(
 *                     "mismatch in receive count %d and counts[%d] %d" %             # <<<<<<<<<<<<<<
 *                     (self.rcount, rank, self.rcounts[rank]))
 *         else:
 */
      __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_receive_count_d_and, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":767
 *                     (self.scount, sumrcounts))
 *             if self.rcount != self.rcounts[rank]:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in receive count %d and counts[%d] %d" %
 *                     (self.rcount, rank, self.rcounts[rank]))
 */
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 767, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(5, 767, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":766
 *                     "mismatch in send count %d and sum(counts) %d" %
 *                     (self.scount, sumrcounts))
 *             if self.rcount != self.rcounts[rank]:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in receive count %d and counts[%d] %d" %
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":758
 *             sumrcounts += self.rcounts[i]
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
    goto __pyx_L13;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":771
 *                     (self.rcount, rank, self.rcounts[rank]))
 *         else:
 *             if self.rcount != sumrcounts:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in receive count %d and sum(counts) %d" %
 */
  /*else*/ {
    __pyx_t_1 = ((__pyx_v_self->rcount != __pyx_v_sumrcounts) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/msgbuffer.pxi":774
 *                 raise ValueError(
 *                     "mismatch in receive count %d and sum(counts) %d" %
 *                     (self.rcount, sumrcounts))             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 774, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_sumrcounts); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 774, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 774, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
      __pyx_t_8 = 0;
      __pyx_t_5 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":773
 *             if self.rcount != sumrcounts:
 *                 raise ValueError(
 *                     "mismatch in receive count %d and sum(counts) %d" %             # <<<<<<<<<<<<<<
 *                     (self.rcount, sumrcounts))
 *         return 0
 */
      __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_receive_count_d_and_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 773, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":772
 *         else:
 *             if self.rcount != sumrcounts:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in receive count %d and sum(counts) %d" %
 *                     (self.rcount, sumrcounts))
 */
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(5, 772, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":771
 *                     (self.rcount, rank, self.rcounts[rank]))
 *         else:
 *             if self.rcount != sumrcounts:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in receive count %d and sum(counts) %d" %
 */
    }
  }
  __pyx_L13:;

  /* "mpi4py/MPI/msgbuffer.pxi":775
 *                     "mismatch in receive count %d and sum(counts) %d" %
 *                     (self.rcount, sumrcounts))
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_scan(self,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":732
 *         return 0
 * 
 *     cdef int for_reduce_scatter(self,             # <<<<<<<<<<<<<<
 *                                 object smsg, object rmsg, object rcnt,
 *                                 MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_reduce_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":777
 *         return 0
 * 
 *     cdef int for_scan(self,             # <<<<<<<<<<<<<<
 *                       object smsg, object rmsg,
 *                       MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scan(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  MPI_Datatype __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("for_scan", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":780
 *                       object smsg, object rmsg,
 *                       MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":782
 *         if comm == MPI_COMM_NULL: return 0
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)             # <<<<<<<<<<<<<<
 *         if smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 782, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":783
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
  __pyx_t_1 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":784
 *         self.for_cro_recv(rmsg, 0)
 *         if smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *             self.scount = self.rcount
 *             self.stype  = self.rtype
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":785
 *         if smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount             # <<<<<<<<<<<<<<
 *             self.stype  = self.rtype
 *         else:
 */
    __pyx_t_2 = __pyx_v_self->rcount;
    __pyx_v_self->scount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":786
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 *             self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cro_send(smsg, 0)
 */
    __pyx_t_4 = __pyx_v_self->rtype;
    __pyx_v_self->stype = __pyx_t_4;

    /* "mpi4py/MPI/msgbuffer.pxi":783
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":788
 *             self.stype  = self.rtype
 *         else:
 *             self.for_cro_send(smsg, 0)             # <<<<<<<<<<<<<<
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 788, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":790
 *             self.for_cro_send(smsg, 0)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  __pyx_t_3 = ((__pyx_v_self->sbuf != MPI_IN_PLACE) != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":791
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    __pyx_t_3 = ((__pyx_v_self->stype != __pyx_v_self->rtype) != 0);
    if (unlikely(__pyx_t_3)) {

      /* "mpi4py/MPI/msgbuffer.pxi":792
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 */
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 792, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":791
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":794
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 */
    __pyx_t_3 = ((__pyx_v_self->scount != __pyx_v_self->rcount) != 0);
    if (unlikely(__pyx_t_3)) {

      /* "mpi4py/MPI/msgbuffer.pxi":797
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->scount); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":796
 *             if self.scount != self.rcount:
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %             # <<<<<<<<<<<<<<
 *                     (self.scount, self.rcount))
 *         return 0
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_send_count_d_and_rec, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":795
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))
 */
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(5, 795, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":794
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":790
 *             self.for_cro_send(smsg, 0)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":798
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_exscan(self,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":777
 *         return 0
 * 
 *     cdef int for_scan(self,             # <<<<<<<<<<<<<<
 *                       object smsg, object rmsg,
 *                       MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":800
 *         return 0
 * 
 *     cdef int for_exscan(self,             # <<<<<<<<<<<<<<
 *                         object smsg, object rmsg,
 *                         MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_exscan(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  MPI_Datatype __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("for_exscan", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":803
 *                         object smsg, object rmsg,
 *                         MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":805
 *         if comm == MPI_COMM_NULL: return 0
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)             # <<<<<<<<<<<<<<
 *         if smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_self, __pyx_v_rmsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 805, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":806
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
  __pyx_t_1 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":807
 *         self.for_cro_recv(rmsg, 0)
 *         if smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *             self.scount = self.rcount
 *             self.stype  = self.rtype
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":808
 *         if smsg is __IN_PLACE__:
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount             # <<<<<<<<<<<<<<
 *             self.stype  = self.rtype
 *         else:
 */
    __pyx_t_2 = __pyx_v_self->rcount;
    __pyx_v_self->scount = __pyx_t_2;

    /* "mpi4py/MPI/msgbuffer.pxi":809
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 *             self.stype  = self.rtype             # <<<<<<<<<<<<<<
 *         else:
 *             self.for_cro_send(smsg, 0)
 */
    __pyx_t_4 = __pyx_v_self->rtype;
    __pyx_v_self->stype = __pyx_t_4;

    /* "mpi4py/MPI/msgbuffer.pxi":806
 *         # get send and recv buffers
 *         self.for_cro_recv(rmsg, 0)
 *         if smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf   = MPI_IN_PLACE
 *             self.scount = self.rcount
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":811
 *             self.stype  = self.rtype
 *         else:
 *             self.for_cro_send(smsg, 0)             # <<<<<<<<<<<<<<
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_self, __pyx_v_smsg, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 811, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":813
 *             self.for_cro_send(smsg, 0)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  __pyx_t_3 = ((__pyx_v_self->sbuf != MPI_IN_PLACE) != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":814
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    __pyx_t_3 = ((__pyx_v_self->stype != __pyx_v_self->rtype) != 0);
    if (unlikely(__pyx_t_3)) {

      /* "mpi4py/MPI/msgbuffer.pxi":815
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 */
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 815, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 815, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":814
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":817
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 */
    __pyx_t_3 = ((__pyx_v_self->scount != __pyx_v_self->rcount) != 0);
    if (unlikely(__pyx_t_3)) {

      /* "mpi4py/MPI/msgbuffer.pxi":820
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_self->scount); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 820, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":819
 *             if self.scount != self.rcount:
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %             # <<<<<<<<<<<<<<
 *                     (self.scount, self.rcount))
 *         return 0
 */
      __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_send_count_d_and_rec, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 819, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "mpi4py/MPI/msgbuffer.pxi":818
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))
 */
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(5, 818, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":817
 *                 raise ValueError(
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "mismatch in send count %d and receive count %d" %
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":813
 *             self.for_cro_send(smsg, 0)
 *         # check counts and datatypes
 *         if self.sbuf != MPI_IN_PLACE:             # <<<<<<<<<<<<<<
 *             if self.stype != self.rtype:
 *                 raise ValueError(
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":821
 *                     "mismatch in send count %d and receive count %d" %
 *                     (self.scount, self.rcount))
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":800
 *         return 0
 * 
 *     cdef int for_exscan(self,             # <<<<<<<<<<<<<<
 *                         object smsg, object rmsg,
 *                         MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_cco.for_exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":824
 * 
 * 
 * cdef inline _p_msg_cco message_cco():             # <<<<<<<<<<<<<<
 *     cdef _p_msg_cco msg = <_p_msg_cco>_p_msg_cco.__new__(_p_msg_cco)
 *     return msg
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_f_6mpi4py_3MPI_message_cco(void) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("message_cco", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":825
 * 
 * cdef inline _p_msg_cco message_cco():
 *     cdef _p_msg_cco msg = <_p_msg_cco>_p_msg_cco.__new__(_p_msg_cco)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_cco(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_cco), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 825, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":826
 * cdef inline _p_msg_cco message_cco():
 *     cdef _p_msg_cco msg = <_p_msg_cco>_p_msg_cco.__new__(_p_msg_cco)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":824
 * 
 * 
 * cdef inline _p_msg_cco message_cco():             # <<<<<<<<<<<<<<
 *     cdef _p_msg_cco msg = <_p_msg_cco>_p_msg_cco.__new__(_p_msg_cco)
 *     return msg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_cco", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":843
 *     cdef object _smsg, _rmsg
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.sbuf     = self.rbuf     = NULL
 *         self.scounts  = self.rcounts  = NULL
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_11_p_msg_ccow_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_11_p_msg_ccow_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_11_p_msg_ccow___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_11_p_msg_ccow___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":844
 * 
 *     def __cinit__(self):
 *         self.sbuf     = self.rbuf     = NULL             # <<<<<<<<<<<<<<
 *         self.scounts  = self.rcounts  = NULL
 *         self.sdispls  = self.rdispls  = NULL
 */
  __pyx_v_self->sbuf = NULL;
  __pyx_v_self->rbuf = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":845
 *     def __cinit__(self):
 *         self.sbuf     = self.rbuf     = NULL
 *         self.scounts  = self.rcounts  = NULL             # <<<<<<<<<<<<<<
 *         self.sdispls  = self.rdispls  = NULL
 *         self.sdisplsA = self.rdisplsA = NULL
 */
  __pyx_v_self->scounts = NULL;
  __pyx_v_self->rcounts = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":846
 *         self.sbuf     = self.rbuf     = NULL
 *         self.scounts  = self.rcounts  = NULL
 *         self.sdispls  = self.rdispls  = NULL             # <<<<<<<<<<<<<<
 *         self.sdisplsA = self.rdisplsA = NULL
 *         self.stypes   = self.rtypes   = NULL
 */
  __pyx_v_self->sdispls = NULL;
  __pyx_v_self->rdispls = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":847
 *         self.scounts  = self.rcounts  = NULL
 *         self.sdispls  = self.rdispls  = NULL
 *         self.sdisplsA = self.rdisplsA = NULL             # <<<<<<<<<<<<<<
 *         self.stypes   = self.rtypes   = NULL
 * 
 */
  __pyx_v_self->sdisplsA = NULL;
  __pyx_v_self->rdisplsA = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":848
 *         self.sdispls  = self.rdispls  = NULL
 *         self.sdisplsA = self.rdisplsA = NULL
 *         self.stypes   = self.rtypes   = NULL             # <<<<<<<<<<<<<<
 * 
 *     # alltoallw
 */
  __pyx_v_self->stypes = NULL;
  __pyx_v_self->rtypes = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":843
 *     cdef object _smsg, _rmsg
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.sbuf     = self.rbuf     = NULL
 *         self.scounts  = self.rcounts  = NULL
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":851
 * 
 *     # alltoallw
 *     cdef int for_alltoallw(self,             # <<<<<<<<<<<<<<
 *                           object smsg, object rmsg,
 *                           MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_alltoallw(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int *__pyx_t_6;
  MPI_Datatype *__pyx_t_7;
  __Pyx_RefNannySetupContext("for_alltoallw", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":854
 *                           object smsg, object rmsg,
 *                           MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":855
 *                           MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":856
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 856, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":857
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":858
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication
 *             CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 858, __pyx_L1_error)

    /* "mpi4py/MPI/msgbuffer.pxi":857
 *         cdef int inter=0, size=0
 *         CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *         if not inter: # intra-communication             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":860
 *             CHKERR( MPI_Comm_size(comm, &size) )
 *         else: # inter-communication
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         #
 *         self._rmsg = message_vector_w(
 */
  /*else*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 860, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "mpi4py/MPI/msgbuffer.pxi":862
 *             CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         #
 *         self._rmsg = message_vector_w(             # <<<<<<<<<<<<<<
 *             rmsg, 0, size,
 *             &self.rbuf, &self.rcounts,
 */
  __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_message_vector_w(__pyx_v_rmsg, 0, __pyx_v_size, (&__pyx_v_self->rbuf), (&__pyx_v_self->rcounts), (&__pyx_v_self->rdispls), (&__pyx_v_self->rtypes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_rmsg);
  __Pyx_DECREF(__pyx_v_self->_rmsg);
  __pyx_v_self->_rmsg = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":866
 *             &self.rbuf, &self.rcounts,
 *             &self.rdispls, &self.rtypes)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scounts = self.rcounts
 */
  __pyx_t_4 = ((!(__pyx_v_inter != 0)) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_smsg == __pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __pyx_t_5 = (__pyx_t_4 != 0);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgbuffer.pxi":867
 *             &self.rdispls, &self.rtypes)
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf    = MPI_IN_PLACE             # <<<<<<<<<<<<<<
 *             self.scounts = self.rcounts
 *             self.sdispls = self.rdispls
 */
    __pyx_v_self->sbuf = MPI_IN_PLACE;

    /* "mpi4py/MPI/msgbuffer.pxi":868
 *         if not inter and smsg is __IN_PLACE__:
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scounts = self.rcounts             # <<<<<<<<<<<<<<
 *             self.sdispls = self.rdispls
 *             self.stypes  = self.rtypes
 */
    __pyx_t_6 = __pyx_v_self->rcounts;
    __pyx_v_self->scounts = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":869
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scounts = self.rcounts
 *             self.sdispls = self.rdispls             # <<<<<<<<<<<<<<
 *             self.stypes  = self.rtypes
 *             return 0
 */
    __pyx_t_6 = __pyx_v_self->rdispls;
    __pyx_v_self->sdispls = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":870
 *             self.scounts = self.rcounts
 *             self.sdispls = self.rdispls
 *             self.stypes  = self.rtypes             # <<<<<<<<<<<<<<
 *             return 0
 *         self._smsg = message_vector_w(
 */
    __pyx_t_7 = __pyx_v_self->rtypes;
    __pyx_v_self->stypes = __pyx_t_7;

    /* "mpi4py/MPI/msgbuffer.pxi":871
 *             self.sdispls = self.rdispls
 *             self.stypes  = self.rtypes
 *             return 0             # <<<<<<<<<<<<<<
 *         self._smsg = message_vector_w(
 *             smsg, 1, size,
 */
    __pyx_r = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgbuffer.pxi":866
 *             &self.rbuf, &self.rcounts,
 *             &self.rdispls, &self.rtypes)
 *         if not inter and smsg is __IN_PLACE__:             # <<<<<<<<<<<<<<
 *             self.sbuf    = MPI_IN_PLACE
 *             self.scounts = self.rcounts
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":872
 *             self.stypes  = self.rtypes
 *             return 0
 *         self._smsg = message_vector_w(             # <<<<<<<<<<<<<<
 *             smsg, 1, size,
 *             &self.sbuf, &self.scounts,
 */
  __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_message_vector_w(__pyx_v_smsg, 1, __pyx_v_size, (&__pyx_v_self->sbuf), (&__pyx_v_self->scounts), (&__pyx_v_self->sdispls), (&__pyx_v_self->stypes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_smsg);
  __Pyx_DECREF(__pyx_v_self->_smsg);
  __pyx_v_self->_smsg = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":876
 *             &self.sbuf, &self.scounts,
 *             &self.sdispls, &self.stypes)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     # neighbor alltoallw
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":851
 * 
 *     # alltoallw
 *     cdef int for_alltoallw(self,             # <<<<<<<<<<<<<<
 *                           object smsg, object rmsg,
 *                           MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_ccow.for_alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":879
 * 
 *     # neighbor alltoallw
 *     cdef int for_neighbor_alltoallw(self,             # <<<<<<<<<<<<<<
 *                                     object smsg, object rmsg,
 *                                     MPI_Comm comm) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_neighbor_alltoallw(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_self, PyObject *__pyx_v_smsg, PyObject *__pyx_v_rmsg, MPI_Comm __pyx_v_comm) {
  int __pyx_v_sendsize;
  int __pyx_v_recvsize;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("for_neighbor_alltoallw", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":882
 *                                     object smsg, object rmsg,
 *                                     MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0             # <<<<<<<<<<<<<<
 *         cdef int sendsize=0, recvsize=0
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 */
  __pyx_t_1 = ((__pyx_v_comm == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":883
 *                                     MPI_Comm comm) except -1:
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int sendsize=0, recvsize=0             # <<<<<<<<<<<<<<
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 *         self._rmsg = message_vector_w(
 */
  __pyx_v_sendsize = 0;
  __pyx_v_recvsize = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":884
 *         if comm == MPI_COMM_NULL: return 0
 *         cdef int sendsize=0, recvsize=0
 *         comm_neighbors_count(comm, &recvsize, &sendsize)             # <<<<<<<<<<<<<<
 *         self._rmsg = message_vector_w(
 *             rmsg, 0, recvsize,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_comm_neighbors_count(__pyx_v_comm, (&__pyx_v_recvsize), (&__pyx_v_sendsize)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 884, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":885
 *         cdef int sendsize=0, recvsize=0
 *         comm_neighbors_count(comm, &recvsize, &sendsize)
 *         self._rmsg = message_vector_w(             # <<<<<<<<<<<<<<
 *             rmsg, 0, recvsize,
 *             &self.rbuf, &self.rcounts,
 */
  __pyx_t_3 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_message_vector_w(__pyx_v_rmsg, 0, __pyx_v_recvsize, (&__pyx_v_self->rbuf), (&__pyx_v_self->rcounts), (&__pyx_v_self->rdisplsA), (&__pyx_v_self->rtypes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_rmsg);
  __Pyx_DECREF(__pyx_v_self->_rmsg);
  __pyx_v_self->_rmsg = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":889
 *             &self.rbuf, &self.rcounts,
 *             &self.rdisplsA, &self.rtypes)
 *         self._smsg = message_vector_w(             # <<<<<<<<<<<<<<
 *             smsg, 1, sendsize,
 *             &self.sbuf, &self.scounts,
 */
  __pyx_t_3 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_message_vector_w(__pyx_v_smsg, 1, __pyx_v_sendsize, (&__pyx_v_self->sbuf), (&__pyx_v_self->scounts), (&__pyx_v_self->sdisplsA), (&__pyx_v_self->stypes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->_smsg);
  __Pyx_DECREF(__pyx_v_self->_smsg);
  __pyx_v_self->_smsg = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":893
 *             &self.sbuf, &self.scounts,
 *             &self.sdisplsA, &self.stypes)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":879
 * 
 *     # neighbor alltoallw
 *     cdef int for_neighbor_alltoallw(self,             # <<<<<<<<<<<<<<
 *                                     object smsg, object rmsg,
 *                                     MPI_Comm comm) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_ccow.for_neighbor_alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":896
 * 
 * 
 * cdef inline _p_msg_ccow message_ccow():             # <<<<<<<<<<<<<<
 *     cdef _p_msg_ccow msg = <_p_msg_ccow>_p_msg_ccow.__new__(_p_msg_ccow)
 *     return msg
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_f_6mpi4py_3MPI_message_ccow(void) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("message_ccow", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":897
 * 
 * cdef inline _p_msg_ccow message_ccow():
 *     cdef _p_msg_ccow msg = <_p_msg_ccow>_p_msg_ccow.__new__(_p_msg_ccow)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_ccow(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_ccow), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 897, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":898
 * cdef inline _p_msg_ccow message_ccow():
 *     cdef _p_msg_ccow msg = <_p_msg_ccow>_p_msg_ccow.__new__(_p_msg_ccow)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":896
 * 
 * 
 * cdef inline _p_msg_ccow message_ccow():             # <<<<<<<<<<<<<<
 *     cdef _p_msg_ccow msg = <_p_msg_ccow>_p_msg_ccow.__new__(_p_msg_ccow)
 *     return msg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_ccow", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":928
 *     cdef object _target
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.oaddr  = NULL
 *         self.ocount = 0
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_10_p_msg_rma_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_10_p_msg_rma_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10_p_msg_rma___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_10_p_msg_rma___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":929
 * 
 *     def __cinit__(self):
 *         self.oaddr  = NULL             # <<<<<<<<<<<<<<
 *         self.ocount = 0
 *         self.otype  = MPI_DATATYPE_NULL
 */
  __pyx_v_self->oaddr = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":930
 *     def __cinit__(self):
 *         self.oaddr  = NULL
 *         self.ocount = 0             # <<<<<<<<<<<<<<
 *         self.otype  = MPI_DATATYPE_NULL
 *         self.raddr  = NULL
 */
  __pyx_v_self->ocount = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":931
 *         self.oaddr  = NULL
 *         self.ocount = 0
 *         self.otype  = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         self.raddr  = NULL
 *         self.rcount = 0
 */
  __pyx_v_self->otype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":932
 *         self.ocount = 0
 *         self.otype  = MPI_DATATYPE_NULL
 *         self.raddr  = NULL             # <<<<<<<<<<<<<<
 *         self.rcount = 0
 *         self.rtype  = MPI_DATATYPE_NULL
 */
  __pyx_v_self->raddr = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":933
 *         self.otype  = MPI_DATATYPE_NULL
 *         self.raddr  = NULL
 *         self.rcount = 0             # <<<<<<<<<<<<<<
 *         self.rtype  = MPI_DATATYPE_NULL
 *         self.tdisp  = 0
 */
  __pyx_v_self->rcount = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":934
 *         self.raddr  = NULL
 *         self.rcount = 0
 *         self.rtype  = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         self.tdisp  = 0
 *         self.tcount = 0
 */
  __pyx_v_self->rtype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":935
 *         self.rcount = 0
 *         self.rtype  = MPI_DATATYPE_NULL
 *         self.tdisp  = 0             # <<<<<<<<<<<<<<
 *         self.tcount = 0
 *         self.ttype  = MPI_DATATYPE_NULL
 */
  __pyx_v_self->tdisp = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":936
 *         self.rtype  = MPI_DATATYPE_NULL
 *         self.tdisp  = 0
 *         self.tcount = 0             # <<<<<<<<<<<<<<
 *         self.ttype  = MPI_DATATYPE_NULL
 * 
 */
  __pyx_v_self->tcount = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":937
 *         self.tdisp  = 0
 *         self.tcount = 0
 *         self.ttype  = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_rma(self, int readonly,
 */
  __pyx_v_self->ttype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":928
 *     cdef object _target
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.oaddr  = NULL
 *         self.ocount = 0
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":939
 *         self.ttype  = MPI_DATATYPE_NULL
 * 
 *     cdef int for_rma(self, int readonly,             # <<<<<<<<<<<<<<
 *                      object origin, int rank, object target) except -1:
 *         # ORIGIN
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, int __pyx_v_readonly, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target) {
  Py_ssize_t __pyx_v_nargs;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  MPI_Datatype __pyx_t_6;
  int __pyx_t_7;
  MPI_Aint __pyx_t_8;
  __Pyx_RefNannySetupContext("for_rma", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":942
 *                      object origin, int rank, object target) except -1:
 *         # ORIGIN
 *         self._origin = message_simple(             # <<<<<<<<<<<<<<
 *             origin, readonly, rank, 0,
 *             &self.oaddr,  &self.ocount,  &self.otype)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_origin, __pyx_v_readonly, __pyx_v_rank, 0, (&__pyx_v_self->oaddr), (&__pyx_v_self->ocount), (&__pyx_v_self->otype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_origin);
  __Pyx_DECREF(__pyx_v_self->_origin);
  __pyx_v_self->_origin = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":945
 *             origin, readonly, rank, 0,
 *             &self.oaddr,  &self.ocount,  &self.otype)
 *         if ((rank == MPI_PROC_NULL) and             # <<<<<<<<<<<<<<
 *             (origin is not None) and
 *             (is_list(origin) or is_tuple(origin)) and
 */
  __pyx_t_3 = ((__pyx_v_rank == MPI_PROC_NULL) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":946
 *             &self.oaddr,  &self.ocount,  &self.otype)
 *         if ((rank == MPI_PROC_NULL) and
 *             (origin is not None) and             # <<<<<<<<<<<<<<
 *             (is_list(origin) or is_tuple(origin)) and
 *             (len(origin) > 0 and isinstance(origin[-1], Datatype))):
 */
  __pyx_t_3 = (__pyx_v_origin != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":947
 *         if ((rank == MPI_PROC_NULL) and
 *             (origin is not None) and
 *             (is_list(origin) or is_tuple(origin)) and             # <<<<<<<<<<<<<<
 *             (len(origin) > 0 and isinstance(origin[-1], Datatype))):
 *             self.otype  = (<Datatype?>origin[-1]).ob_mpi
 */
  __pyx_t_4 = (PyList_Check(__pyx_v_origin) != 0);
  if (!__pyx_t_4) {
  } else {
    goto __pyx_L7_next_and;
  }
  __pyx_t_4 = (PyTuple_Check(__pyx_v_origin) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_L7_next_and:;

  /* "mpi4py/MPI/msgbuffer.pxi":948
 *             (origin is not None) and
 *             (is_list(origin) or is_tuple(origin)) and
 *             (len(origin) > 0 and isinstance(origin[-1], Datatype))):             # <<<<<<<<<<<<<<
 *             self.otype  = (<Datatype?>origin[-1]).ob_mpi
 *             self._origin = origin
 */
  __pyx_t_5 = PyObject_Length(__pyx_v_origin); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 948, __pyx_L1_error)
  __pyx_t_4 = ((__pyx_t_5 > 0) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_origin, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 948, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Datatype); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_4 != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;

  /* "mpi4py/MPI/msgbuffer.pxi":945
 *             origin, readonly, rank, 0,
 *             &self.oaddr,  &self.ocount,  &self.otype)
 *         if ((rank == MPI_PROC_NULL) and             # <<<<<<<<<<<<<<
 *             (origin is not None) and
 *             (is_list(origin) or is_tuple(origin)) and
 */
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgbuffer.pxi":949
 *             (is_list(origin) or is_tuple(origin)) and
 *             (len(origin) > 0 and isinstance(origin[-1], Datatype))):
 *             self.otype  = (<Datatype?>origin[-1]).ob_mpi             # <<<<<<<<<<<<<<
 *             self._origin = origin
 *         # TARGET
 */
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_origin, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 949, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Datatype)))) __PYX_ERR(5, 949, __pyx_L1_error)
    __pyx_t_6 = ((struct PyMPIDatatypeObject *)__pyx_t_1)->ob_mpi;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_self->otype = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":950
 *             (len(origin) > 0 and isinstance(origin[-1], Datatype))):
 *             self.otype  = (<Datatype?>origin[-1]).ob_mpi
 *             self._origin = origin             # <<<<<<<<<<<<<<
 *         # TARGET
 *         cdef Py_ssize_t nargs = 0
 */
    __Pyx_INCREF(__pyx_v_origin);
    __Pyx_GIVEREF(__pyx_v_origin);
    __Pyx_GOTREF(__pyx_v_self->_origin);
    __Pyx_DECREF(__pyx_v_self->_origin);
    __pyx_v_self->_origin = __pyx_v_origin;

    /* "mpi4py/MPI/msgbuffer.pxi":945
 *             origin, readonly, rank, 0,
 *             &self.oaddr,  &self.ocount,  &self.otype)
 *         if ((rank == MPI_PROC_NULL) and             # <<<<<<<<<<<<<<
 *             (origin is not None) and
 *             (is_list(origin) or is_tuple(origin)) and
 */
  }

  /* "mpi4py/MPI/msgbuffer.pxi":952
 *             self._origin = origin
 *         # TARGET
 *         cdef Py_ssize_t nargs = 0             # <<<<<<<<<<<<<<
 *         if target is None:
 *             self.tdisp  = 0
 */
  __pyx_v_nargs = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":953
 *         # TARGET
 *         cdef Py_ssize_t nargs = 0
 *         if target is None:             # <<<<<<<<<<<<<<
 *             self.tdisp  = 0
 *             self.tcount = self.ocount
 */
  __pyx_t_2 = (__pyx_v_target == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":954
 *         cdef Py_ssize_t nargs = 0
 *         if target is None:
 *             self.tdisp  = 0             # <<<<<<<<<<<<<<
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 */
    __pyx_v_self->tdisp = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":955
 *         if target is None:
 *             self.tdisp  = 0
 *             self.tcount = self.ocount             # <<<<<<<<<<<<<<
 *             self.ttype  = self.otype
 *         elif is_integral(target):
 */
    __pyx_t_7 = __pyx_v_self->ocount;
    __pyx_v_self->tcount = __pyx_t_7;

    /* "mpi4py/MPI/msgbuffer.pxi":956
 *             self.tdisp  = 0
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype             # <<<<<<<<<<<<<<
 *         elif is_integral(target):
 *             self.tdisp  = <MPI_Aint>target
 */
    __pyx_t_6 = __pyx_v_self->otype;
    __pyx_v_self->ttype = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":953
 *         # TARGET
 *         cdef Py_ssize_t nargs = 0
 *         if target is None:             # <<<<<<<<<<<<<<
 *             self.tdisp  = 0
 *             self.tcount = self.ocount
 */
    goto __pyx_L10;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":957
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 *         elif is_integral(target):             # <<<<<<<<<<<<<<
 *             self.tdisp  = <MPI_Aint>target
 *             self.tcount = self.ocount
 */
  __pyx_t_3 = (__pyx_f_6mpi4py_3MPI_is_integral(__pyx_v_target) != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgbuffer.pxi":958
 *             self.ttype  = self.otype
 *         elif is_integral(target):
 *             self.tdisp  = <MPI_Aint>target             # <<<<<<<<<<<<<<
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 */
    __pyx_t_8 = __Pyx_PyInt_As_MPI_Aint(__pyx_v_target); if (unlikely((__pyx_t_8 == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(5, 958, __pyx_L1_error)
    __pyx_v_self->tdisp = ((MPI_Aint)__pyx_t_8);

    /* "mpi4py/MPI/msgbuffer.pxi":959
 *         elif is_integral(target):
 *             self.tdisp  = <MPI_Aint>target
 *             self.tcount = self.ocount             # <<<<<<<<<<<<<<
 *             self.ttype  = self.otype
 *         elif is_list(target) or is_tuple(target):
 */
    __pyx_t_7 = __pyx_v_self->ocount;
    __pyx_v_self->tcount = __pyx_t_7;

    /* "mpi4py/MPI/msgbuffer.pxi":960
 *             self.tdisp  = <MPI_Aint>target
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype             # <<<<<<<<<<<<<<
 *         elif is_list(target) or is_tuple(target):
 *             self.tdisp  = 0
 */
    __pyx_t_6 = __pyx_v_self->otype;
    __pyx_v_self->ttype = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":957
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 *         elif is_integral(target):             # <<<<<<<<<<<<<<
 *             self.tdisp  = <MPI_Aint>target
 *             self.tcount = self.ocount
 */
    goto __pyx_L10;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":961
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 *         elif is_list(target) or is_tuple(target):             # <<<<<<<<<<<<<<
 *             self.tdisp  = 0
 *             self.tcount = self.ocount
 */
  __pyx_t_2 = (PyList_Check(__pyx_v_target) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_2 = (PyTuple_Check(__pyx_v_target) != 0);
  __pyx_t_3 = __pyx_t_2;
  __pyx_L11_bool_binop_done:;
  if (likely(__pyx_t_3)) {

    /* "mpi4py/MPI/msgbuffer.pxi":962
 *             self.ttype  = self.otype
 *         elif is_list(target) or is_tuple(target):
 *             self.tdisp  = 0             # <<<<<<<<<<<<<<
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 */
    __pyx_v_self->tdisp = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":963
 *         elif is_list(target) or is_tuple(target):
 *             self.tdisp  = 0
 *             self.tcount = self.ocount             # <<<<<<<<<<<<<<
 *             self.ttype  = self.otype
 *             nargs = len(target)
 */
    __pyx_t_7 = __pyx_v_self->ocount;
    __pyx_v_self->tcount = __pyx_t_7;

    /* "mpi4py/MPI/msgbuffer.pxi":964
 *             self.tdisp  = 0
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype             # <<<<<<<<<<<<<<
 *             nargs = len(target)
 *             if nargs >= 1:
 */
    __pyx_t_6 = __pyx_v_self->otype;
    __pyx_v_self->ttype = __pyx_t_6;

    /* "mpi4py/MPI/msgbuffer.pxi":965
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 *             nargs = len(target)             # <<<<<<<<<<<<<<
 *             if nargs >= 1:
 *                 self.tdisp  = <MPI_Aint>target[0]
 */
    __pyx_t_5 = PyObject_Length(__pyx_v_target); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 965, __pyx_L1_error)
    __pyx_v_nargs = __pyx_t_5;

    /* "mpi4py/MPI/msgbuffer.pxi":966
 *             self.ttype  = self.otype
 *             nargs = len(target)
 *             if nargs >= 1:             # <<<<<<<<<<<<<<
 *                 self.tdisp  = <MPI_Aint>target[0]
 *             if nargs >= 2:
 */
    __pyx_t_3 = ((__pyx_v_nargs >= 1) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgbuffer.pxi":967
 *             nargs = len(target)
 *             if nargs >= 1:
 *                 self.tdisp  = <MPI_Aint>target[0]             # <<<<<<<<<<<<<<
 *             if nargs >= 2:
 *                 self.tcount = <int>target[1]
 */
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_target, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 967, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyInt_As_MPI_Aint(__pyx_t_1); if (unlikely((__pyx_t_8 == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(5, 967, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_self->tdisp = ((MPI_Aint)__pyx_t_8);

      /* "mpi4py/MPI/msgbuffer.pxi":966
 *             self.ttype  = self.otype
 *             nargs = len(target)
 *             if nargs >= 1:             # <<<<<<<<<<<<<<
 *                 self.tdisp  = <MPI_Aint>target[0]
 *             if nargs >= 2:
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":968
 *             if nargs >= 1:
 *                 self.tdisp  = <MPI_Aint>target[0]
 *             if nargs >= 2:             # <<<<<<<<<<<<<<
 *                 self.tcount = <int>target[1]
 *             if nargs >= 3:
 */
    __pyx_t_3 = ((__pyx_v_nargs >= 2) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgbuffer.pxi":969
 *                 self.tdisp  = <MPI_Aint>target[0]
 *             if nargs >= 2:
 *                 self.tcount = <int>target[1]             # <<<<<<<<<<<<<<
 *             if nargs >= 3:
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 */
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_target, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 969, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_self->tcount = ((int)__pyx_t_7);

      /* "mpi4py/MPI/msgbuffer.pxi":968
 *             if nargs >= 1:
 *                 self.tdisp  = <MPI_Aint>target[0]
 *             if nargs >= 2:             # <<<<<<<<<<<<<<
 *                 self.tcount = <int>target[1]
 *             if nargs >= 3:
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":970
 *             if nargs >= 2:
 *                 self.tcount = <int>target[1]
 *             if nargs >= 3:             # <<<<<<<<<<<<<<
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 *             if nargs >= 4:
 */
    __pyx_t_3 = ((__pyx_v_nargs >= 3) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgbuffer.pxi":971
 *                 self.tcount = <int>target[1]
 *             if nargs >= 3:
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi             # <<<<<<<<<<<<<<
 *             if nargs >= 4:
 *                 raise ValueError("target: expecting 3 items at most")
 */
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_target, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 971, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Datatype)))) __PYX_ERR(5, 971, __pyx_L1_error)
      __pyx_t_6 = ((struct PyMPIDatatypeObject *)__pyx_t_1)->ob_mpi;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_self->ttype = __pyx_t_6;

      /* "mpi4py/MPI/msgbuffer.pxi":970
 *             if nargs >= 2:
 *                 self.tcount = <int>target[1]
 *             if nargs >= 3:             # <<<<<<<<<<<<<<
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 *             if nargs >= 4:
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":972
 *             if nargs >= 3:
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 *             if nargs >= 4:             # <<<<<<<<<<<<<<
 *                 raise ValueError("target: expecting 3 items at most")
 *         else:
 */
    __pyx_t_3 = ((__pyx_v_nargs >= 4) != 0);
    if (unlikely(__pyx_t_3)) {

      /* "mpi4py/MPI/msgbuffer.pxi":973
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 *             if nargs >= 4:
 *                 raise ValueError("target: expecting 3 items at most")             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("target: expecting integral or list/tuple")
 */
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 973, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(5, 973, __pyx_L1_error)

      /* "mpi4py/MPI/msgbuffer.pxi":972
 *             if nargs >= 3:
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 *             if nargs >= 4:             # <<<<<<<<<<<<<<
 *                 raise ValueError("target: expecting 3 items at most")
 *         else:
 */
    }

    /* "mpi4py/MPI/msgbuffer.pxi":961
 *             self.tcount = self.ocount
 *             self.ttype  = self.otype
 *         elif is_list(target) or is_tuple(target):             # <<<<<<<<<<<<<<
 *             self.tdisp  = 0
 *             self.tcount = self.ocount
 */
    goto __pyx_L10;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":975
 *                 raise ValueError("target: expecting 3 items at most")
 *         else:
 *             raise ValueError("target: expecting integral or list/tuple")             # <<<<<<<<<<<<<<
 *         self._target = target
 *         return 0
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(5, 975, __pyx_L1_error)
  }
  __pyx_L10:;

  /* "mpi4py/MPI/msgbuffer.pxi":976
 *         else:
 *             raise ValueError("target: expecting integral or list/tuple")
 *         self._target = target             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __Pyx_INCREF(__pyx_v_target);
  __Pyx_GIVEREF(__pyx_v_target);
  __Pyx_GOTREF(__pyx_v_self->_target);
  __Pyx_DECREF(__pyx_v_self->_target);
  __pyx_v_self->_target = __pyx_v_target;

  /* "mpi4py/MPI/msgbuffer.pxi":977
 *             raise ValueError("target: expecting integral or list/tuple")
 *         self._target = target
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_put(self, object origin, int rank, object target) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":939
 *         self.ttype  = MPI_DATATYPE_NULL
 * 
 *     cdef int for_rma(self, int readonly,             # <<<<<<<<<<<<<<
 *                      object origin, int rank, object target) except -1:
 *         # ORIGIN
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_rma", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":979
 *         return 0
 * 
 *     cdef int for_put(self, object origin, int rank, object target) except -1:             # <<<<<<<<<<<<<<
 *         self.for_rma(1, origin, rank, target)
 *         return 0
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_put(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("for_put", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":980
 * 
 *     cdef int for_put(self, object origin, int rank, object target) except -1:
 *         self.for_rma(1, origin, rank, target)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(__pyx_v_self, 1, __pyx_v_origin, __pyx_v_rank, __pyx_v_target); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 980, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":981
 *     cdef int for_put(self, object origin, int rank, object target) except -1:
 *         self.for_rma(1, origin, rank, target)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_get(self, object origin, int rank, object target) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":979
 *         return 0
 * 
 *     cdef int for_put(self, object origin, int rank, object target) except -1:             # <<<<<<<<<<<<<<
 *         self.for_rma(1, origin, rank, target)
 *         return 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_put", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":983
 *         return 0
 * 
 *     cdef int for_get(self, object origin, int rank, object target) except -1:             # <<<<<<<<<<<<<<
 *         self.for_rma(0, origin, rank, target)
 *         return 0
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("for_get", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":984
 * 
 *     cdef int for_get(self, object origin, int rank, object target) except -1:
 *         self.for_rma(0, origin, rank, target)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(__pyx_v_self, 0, __pyx_v_origin, __pyx_v_rank, __pyx_v_target); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 984, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":985
 *     cdef int for_get(self, object origin, int rank, object target) except -1:
 *         self.for_rma(0, origin, rank, target)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_acc(self, object origin, int rank, object target) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":983
 *         return 0
 * 
 *     cdef int for_get(self, object origin, int rank, object target) except -1:             # <<<<<<<<<<<<<<
 *         self.for_rma(0, origin, rank, target)
 *         return 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":987
 *         return 0
 * 
 *     cdef int for_acc(self, object origin, int rank, object target) except -1:             # <<<<<<<<<<<<<<
 *         self.for_rma(1, origin, rank, target)
 *         return 0
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_acc(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank, PyObject *__pyx_v_target) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("for_acc", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":988
 * 
 *     cdef int for_acc(self, object origin, int rank, object target) except -1:
 *         self.for_rma(1, origin, rank, target)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(__pyx_v_self, 1, __pyx_v_origin, __pyx_v_rank, __pyx_v_target); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 988, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":989
 *     cdef int for_acc(self, object origin, int rank, object target) except -1:
 *         self.for_rma(1, origin, rank, target)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int set_origin(self, object origin, int rank) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":987
 *         return 0
 * 
 *     cdef int for_acc(self, object origin, int rank, object target) except -1:             # <<<<<<<<<<<<<<
 *         self.for_rma(1, origin, rank, target)
 *         return 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_acc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":991
 *         return 0
 * 
 *     cdef int set_origin(self, object origin, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._origin = message_simple(
 *             origin, 1, rank, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_origin(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_rank) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  MPI_Datatype __pyx_t_3;
  __Pyx_RefNannySetupContext("set_origin", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":992
 * 
 *     cdef int set_origin(self, object origin, int rank) except -1:
 *         self._origin = message_simple(             # <<<<<<<<<<<<<<
 *             origin, 1, rank, 0,
 *             &self.oaddr,  &self.ocount,  &self.otype)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_origin, 1, __pyx_v_rank, 0, (&__pyx_v_self->oaddr), (&__pyx_v_self->ocount), (&__pyx_v_self->otype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 992, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_origin);
  __Pyx_DECREF(__pyx_v_self->_origin);
  __pyx_v_self->_origin = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":995
 *             origin, 1, rank, 0,
 *             &self.oaddr,  &self.ocount,  &self.otype)
 *         self.tdisp  = 0             # <<<<<<<<<<<<<<
 *         self.tcount = self.ocount
 *         self.ttype  = self.otype
 */
  __pyx_v_self->tdisp = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":996
 *             &self.oaddr,  &self.ocount,  &self.otype)
 *         self.tdisp  = 0
 *         self.tcount = self.ocount             # <<<<<<<<<<<<<<
 *         self.ttype  = self.otype
 * 
 */
  __pyx_t_2 = __pyx_v_self->ocount;
  __pyx_v_self->tcount = __pyx_t_2;

  /* "mpi4py/MPI/msgbuffer.pxi":997
 *         self.tdisp  = 0
 *         self.tcount = self.ocount
 *         self.ttype  = self.otype             # <<<<<<<<<<<<<<
 * 
 *     cdef int set_compare(self, object compare, int rank) except -1:
 */
  __pyx_t_3 = __pyx_v_self->otype;
  __pyx_v_self->ttype = __pyx_t_3;

  /* "mpi4py/MPI/msgbuffer.pxi":991
 *         return 0
 * 
 *     cdef int set_origin(self, object origin, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._origin = message_simple(
 *             origin, 1, rank, 0,
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.set_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":999
 *         self.ttype  = self.otype
 * 
 *     cdef int set_compare(self, object compare, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._compare = message_simple(
 *             compare, 1, rank, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_compare(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_compare, int __pyx_v_rank) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("set_compare", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1000
 * 
 *     cdef int set_compare(self, object compare, int rank) except -1:
 *         self._compare = message_simple(             # <<<<<<<<<<<<<<
 *             compare, 1, rank, 0,
 *             &self.caddr,  &self.ccount,  &self.ctype)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_compare, 1, __pyx_v_rank, 0, (&__pyx_v_self->caddr), (&__pyx_v_self->ccount), (&__pyx_v_self->ctype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_compare);
  __Pyx_DECREF(__pyx_v_self->_compare);
  __pyx_v_self->_compare = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":999
 *         self.ttype  = self.otype
 * 
 *     cdef int set_compare(self, object compare, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._compare = message_simple(
 *             compare, 1, rank, 0,
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.set_compare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1004
 *             &self.caddr,  &self.ccount,  &self.ctype)
 * 
 *     cdef int set_result(self, object result, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._result = message_simple(
 *             result, 0, rank, 0,
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_result, int __pyx_v_rank) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("set_result", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1005
 * 
 *     cdef int set_result(self, object result, int rank) except -1:
 *         self._result = message_simple(             # <<<<<<<<<<<<<<
 *             result, 0, rank, 0,
 *             &self.raddr,  &self.rcount,  &self.rtype)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_result, 0, __pyx_v_rank, 0, (&__pyx_v_self->raddr), (&__pyx_v_self->rcount), (&__pyx_v_self->rtype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1005, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_result);
  __Pyx_DECREF(__pyx_v_self->_result);
  __pyx_v_self->_result = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1004
 *             &self.caddr,  &self.ccount,  &self.ctype)
 * 
 *     cdef int set_result(self, object result, int rank) except -1:             # <<<<<<<<<<<<<<
 *         self._result = message_simple(
 *             result, 0, rank, 0,
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.set_result", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1009
 *             &self.raddr,  &self.rcount,  &self.rtype)
 * 
 *     cdef int for_get_acc(self, object origin, object result,             # <<<<<<<<<<<<<<
 *                          int rank, object target) except -1:
 *         self.for_rma(0, origin, rank, target)
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get_acc(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_rank, PyObject *__pyx_v_target) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("for_get_acc", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1011
 *     cdef int for_get_acc(self, object origin, object result,
 *                          int rank, object target) except -1:
 *         self.for_rma(0, origin, rank, target)             # <<<<<<<<<<<<<<
 *         self.set_result(result, rank)
 *         return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma(__pyx_v_self, 0, __pyx_v_origin, __pyx_v_rank, __pyx_v_target); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1011, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1012
 *                          int rank, object target) except -1:
 *         self.for_rma(0, origin, rank, target)
 *         self.set_result(result, rank)             # <<<<<<<<<<<<<<
 *         return 0
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result(__pyx_v_self, __pyx_v_result, __pyx_v_rank); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1012, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1013
 *         self.for_rma(0, origin, rank, target)
 *         self.set_result(result, rank)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_fetch_op(self, object origin, object result,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1009
 *             &self.raddr,  &self.rcount,  &self.rtype)
 * 
 *     cdef int for_get_acc(self, object origin, object result,             # <<<<<<<<<<<<<<
 *                          int rank, object target) except -1:
 *         self.for_rma(0, origin, rank, target)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_get_acc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1015
 *         return 0
 * 
 *     cdef int for_fetch_op(self, object origin, object result,             # <<<<<<<<<<<<<<
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_fetch_op(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_rank, MPI_Aint __pyx_v_disp) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("for_fetch_op", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1017
 *     cdef int for_fetch_op(self, object origin, object result,
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)             # <<<<<<<<<<<<<<
 *         self.set_result(result, rank)
 *         self.tdisp = disp
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_origin(__pyx_v_self, __pyx_v_origin, __pyx_v_rank); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1017, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1018
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)
 *         self.set_result(result, rank)             # <<<<<<<<<<<<<<
 *         self.tdisp = disp
 *         if rank == MPI_PROC_NULL: return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result(__pyx_v_self, __pyx_v_result, __pyx_v_rank); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1018, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1019
 *         self.set_origin(origin, rank)
 *         self.set_result(result, rank)
 *         self.tdisp = disp             # <<<<<<<<<<<<<<
 *         if rank == MPI_PROC_NULL: return 0
 *         # Check
 */
  __pyx_v_self->tdisp = __pyx_v_disp;

  /* "mpi4py/MPI/msgbuffer.pxi":1020
 *         self.set_result(result, rank)
 *         self.tdisp = disp
 *         if rank == MPI_PROC_NULL: return 0             # <<<<<<<<<<<<<<
 *         # Check
 *         if self.ocount != 1:  raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_rank == MPI_PROC_NULL) != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1022
 *         if rank == MPI_PROC_NULL: return 0
 *         # Check
 *         if self.ocount != 1:  raise ValueError(             # <<<<<<<<<<<<<<
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.rcount != 1: raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_self->ocount != 1) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":1023
 *         # Check
 *         if self.ocount != 1:  raise ValueError(
 *             "origin: expecting a single element, got %d" % self.ocount)             # <<<<<<<<<<<<<<
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->ocount); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_origin_expecting_a_single_elemen, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":1022
 *         if rank == MPI_PROC_NULL: return 0
 *         # Check
 *         if self.ocount != 1:  raise ValueError(             # <<<<<<<<<<<<<<
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.rcount != 1: raise ValueError(
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1022, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1022, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1024
 *         if self.ocount != 1:  raise ValueError(
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.rcount != 1: raise ValueError(             # <<<<<<<<<<<<<<
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.rtype: raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_self->rcount != 1) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":1025
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)             # <<<<<<<<<<<<<<
 *         if self.otype != self.rtype: raise ValueError(
 *             "mismatch in origin and result MPI datatypes")
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_result_expecting_a_single_elemen, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":1024
 *         if self.ocount != 1:  raise ValueError(
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.rcount != 1: raise ValueError(             # <<<<<<<<<<<<<<
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.rtype: raise ValueError(
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1024, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1026
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.rtype: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in origin and result MPI datatypes")
 *         return 0
 */
  __pyx_t_2 = ((__pyx_v_self->otype != __pyx_v_self->rtype) != 0);
  if (unlikely(__pyx_t_2)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1026, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1026, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1028
 *         if self.otype != self.rtype: raise ValueError(
 *             "mismatch in origin and result MPI datatypes")
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_cmp_swap(self, object origin, object compare, object result,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1015
 *         return 0
 * 
 *     cdef int for_fetch_op(self, object origin, object result,             # <<<<<<<<<<<<<<
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_fetch_op", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1030
 *         return 0
 * 
 *     cdef int for_cmp_swap(self, object origin, object compare, object result,             # <<<<<<<<<<<<<<
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)
 */

static int __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_cmp_swap(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_compare, PyObject *__pyx_v_result, int __pyx_v_rank, MPI_Aint __pyx_v_disp) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("for_cmp_swap", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1032
 *     cdef int for_cmp_swap(self, object origin, object compare, object result,
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)             # <<<<<<<<<<<<<<
 *         self.set_compare(compare, rank)
 *         self.set_result(result, rank)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_origin(__pyx_v_self, __pyx_v_origin, __pyx_v_rank); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1032, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1033
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)
 *         self.set_compare(compare, rank)             # <<<<<<<<<<<<<<
 *         self.set_result(result, rank)
 *         self.tdisp = disp
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_compare(__pyx_v_self, __pyx_v_compare, __pyx_v_rank); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1033, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1034
 *         self.set_origin(origin, rank)
 *         self.set_compare(compare, rank)
 *         self.set_result(result, rank)             # <<<<<<<<<<<<<<
 *         self.tdisp = disp
 *         if rank == MPI_PROC_NULL: return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result(__pyx_v_self, __pyx_v_result, __pyx_v_rank); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 1034, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1035
 *         self.set_compare(compare, rank)
 *         self.set_result(result, rank)
 *         self.tdisp = disp             # <<<<<<<<<<<<<<
 *         if rank == MPI_PROC_NULL: return 0
 *         # Check
 */
  __pyx_v_self->tdisp = __pyx_v_disp;

  /* "mpi4py/MPI/msgbuffer.pxi":1036
 *         self.set_result(result, rank)
 *         self.tdisp = disp
 *         if rank == MPI_PROC_NULL: return 0             # <<<<<<<<<<<<<<
 *         # Check
 *         if self.ocount != 1:  raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_rank == MPI_PROC_NULL) != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1038
 *         if rank == MPI_PROC_NULL: return 0
 *         # Check
 *         if self.ocount != 1:  raise ValueError(             # <<<<<<<<<<<<<<
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.ccount != 1:  raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_self->ocount != 1) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":1039
 *         # Check
 *         if self.ocount != 1:  raise ValueError(
 *             "origin: expecting a single element, got %d" % self.ocount)             # <<<<<<<<<<<<<<
 *         if self.ccount != 1:  raise ValueError(
 *             "compare: expecting a single element, got %d" % self.ccount)
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->ocount); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_origin_expecting_a_single_elemen, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":1038
 *         if rank == MPI_PROC_NULL: return 0
 *         # Check
 *         if self.ocount != 1:  raise ValueError(             # <<<<<<<<<<<<<<
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.ccount != 1:  raise ValueError(
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1038, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1038, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1040
 *         if self.ocount != 1:  raise ValueError(
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.ccount != 1:  raise ValueError(             # <<<<<<<<<<<<<<
 *             "compare: expecting a single element, got %d" % self.ccount)
 *         if self.rcount != 1: raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_self->ccount != 1) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":1041
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.ccount != 1:  raise ValueError(
 *             "compare: expecting a single element, got %d" % self.ccount)             # <<<<<<<<<<<<<<
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->ccount); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_compare_expecting_a_single_eleme, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":1040
 *         if self.ocount != 1:  raise ValueError(
 *             "origin: expecting a single element, got %d" % self.ocount)
 *         if self.ccount != 1:  raise ValueError(             # <<<<<<<<<<<<<<
 *             "compare: expecting a single element, got %d" % self.ccount)
 *         if self.rcount != 1: raise ValueError(
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1040, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1040, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1042
 *         if self.ccount != 1:  raise ValueError(
 *             "compare: expecting a single element, got %d" % self.ccount)
 *         if self.rcount != 1: raise ValueError(             # <<<<<<<<<<<<<<
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.ctype: raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_self->rcount != 1) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgbuffer.pxi":1043
 *             "compare: expecting a single element, got %d" % self.ccount)
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)             # <<<<<<<<<<<<<<
 *         if self.otype != self.ctype: raise ValueError(
 *             "mismatch in origin and compare MPI datatypes")
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_result_expecting_a_single_elemen, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgbuffer.pxi":1042
 *         if self.ccount != 1:  raise ValueError(
 *             "compare: expecting a single element, got %d" % self.ccount)
 *         if self.rcount != 1: raise ValueError(             # <<<<<<<<<<<<<<
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.ctype: raise ValueError(
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1042, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1042, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1044
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.ctype: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in origin and compare MPI datatypes")
 *         if self.otype != self.rtype: raise ValueError(
 */
  __pyx_t_2 = ((__pyx_v_self->otype != __pyx_v_self->ctype) != 0);
  if (unlikely(__pyx_t_2)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1044, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1044, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1046
 *         if self.otype != self.ctype: raise ValueError(
 *             "mismatch in origin and compare MPI datatypes")
 *         if self.otype != self.rtype: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in origin and result MPI datatypes")
 *         return 0
 */
  __pyx_t_2 = ((__pyx_v_self->otype != __pyx_v_self->rtype) != 0);
  if (unlikely(__pyx_t_2)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1046, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(5, 1046, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgbuffer.pxi":1048
 *         if self.otype != self.rtype: raise ValueError(
 *             "mismatch in origin and result MPI datatypes")
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline _p_msg_rma message_rma():
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1030
 *         return 0
 * 
 *     cdef int for_cmp_swap(self, object origin, object compare, object result,             # <<<<<<<<<<<<<<
 *                           int rank, MPI_Aint disp) except -1:
 *         self.set_origin(origin, rank)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_rma.for_cmp_swap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1050
 *         return 0
 * 
 * cdef inline _p_msg_rma message_rma():             # <<<<<<<<<<<<<<
 *     cdef _p_msg_rma msg = <_p_msg_rma>_p_msg_rma.__new__(_p_msg_rma)
 *     return msg
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_f_6mpi4py_3MPI_message_rma(void) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("message_rma", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1051
 * 
 * cdef inline _p_msg_rma message_rma():
 *     cdef _p_msg_rma msg = <_p_msg_rma>_p_msg_rma.__new__(_p_msg_rma)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_rma(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_rma), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1051, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1052
 * cdef inline _p_msg_rma message_rma():
 *     cdef _p_msg_rma msg = <_p_msg_rma>_p_msg_rma.__new__(_p_msg_rma)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1050
 *         return 0
 * 
 * cdef inline _p_msg_rma message_rma():             # <<<<<<<<<<<<<<
 *     cdef _p_msg_rma msg = <_p_msg_rma>_p_msg_rma.__new__(_p_msg_rma)
 *     return msg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_rma", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1067
 *     cdef object _msg
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.buf   = NULL
 *         self.count = 0
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9_p_msg_io_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9_p_msg_io_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9_p_msg_io___cinit__(((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9_p_msg_io___cinit__(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1068
 * 
 *     def __cinit__(self):
 *         self.buf   = NULL             # <<<<<<<<<<<<<<
 *         self.count = 0
 *         self.dtype = MPI_DATATYPE_NULL
 */
  __pyx_v_self->buf = NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":1069
 *     def __cinit__(self):
 *         self.buf   = NULL
 *         self.count = 0             # <<<<<<<<<<<<<<
 *         self.dtype = MPI_DATATYPE_NULL
 * 
 */
  __pyx_v_self->count = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1070
 *         self.buf   = NULL
 *         self.count = 0
 *         self.dtype = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_read(self, object msg) except -1:
 */
  __pyx_v_self->dtype = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/msgbuffer.pxi":1067
 *     cdef object _msg
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self.buf   = NULL
 *         self.count = 0
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1072
 *         self.dtype = MPI_DATATYPE_NULL
 * 
 *     cdef int for_read(self, object msg) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 0, # writable
 *                                    0, 0,
 */

static int __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_read(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_self, PyObject *__pyx_v_msg) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("for_read", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1073
 * 
 *     cdef int for_read(self, object msg) except -1:
 *         self._msg = message_simple(msg, 0, # writable             # <<<<<<<<<<<<<<
 *                                    0, 0,
 *                                    &self.buf,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_msg, 0, 0, 0, (&__pyx_v_self->buf), (&__pyx_v_self->count), (&__pyx_v_self->dtype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_msg);
  __Pyx_DECREF(__pyx_v_self->_msg);
  __pyx_v_self->_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1078
 *                                    &self.count,
 *                                    &self.dtype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef int for_write(self, object msg) except -1:
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1072
 *         self.dtype = MPI_DATATYPE_NULL
 * 
 *     cdef int for_read(self, object msg) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 0, # writable
 *                                    0, 0,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_io.for_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1080
 *         return 0
 * 
 *     cdef int for_write(self, object msg) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 1, # readonly
 *                                    0, 0,
 */

static int __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_write(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_self, PyObject *__pyx_v_msg) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("for_write", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1081
 * 
 *     cdef int for_write(self, object msg) except -1:
 *         self._msg = message_simple(msg, 1, # readonly             # <<<<<<<<<<<<<<
 *                                    0, 0,
 *                                    &self.buf,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_simple(__pyx_v_msg, 1, 0, 0, (&__pyx_v_self->buf), (&__pyx_v_self->count), (&__pyx_v_self->dtype))); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_msg);
  __Pyx_DECREF(__pyx_v_self->_msg);
  __pyx_v_self->_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1086
 *                                    &self.count,
 *                                    &self.dtype)
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline _p_msg_io message_io_read(object buf):
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1080
 *         return 0
 * 
 *     cdef int for_write(self, object msg) except -1:             # <<<<<<<<<<<<<<
 *         self._msg = message_simple(msg, 1, # readonly
 *                                    0, 0,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI._p_msg_io.for_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1088
 *         return 0
 * 
 * cdef inline _p_msg_io message_io_read(object buf):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_read(buf)
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_f_6mpi4py_3MPI_message_io_read(PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("message_io_read", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1089
 * 
 * cdef inline _p_msg_io message_io_read(object buf):
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)             # <<<<<<<<<<<<<<
 *     msg.for_read(buf)
 *     return msg
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_io(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_io), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1089, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1090
 * cdef inline _p_msg_io message_io_read(object buf):
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_read(buf)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_read(__pyx_v_msg, __pyx_v_buf); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 1090, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1091
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_read(buf)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * cdef inline _p_msg_io message_io_write(object buf):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1088
 *         return 0
 * 
 * cdef inline _p_msg_io message_io_read(object buf):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_read(buf)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_io_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgbuffer.pxi":1093
 *     return msg
 * 
 * cdef inline _p_msg_io message_io_write(object buf):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_write(buf)
 */

static CYTHON_INLINE struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_f_6mpi4py_3MPI_message_io_write(PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_msg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("message_io_write", 0);

  /* "mpi4py/MPI/msgbuffer.pxi":1094
 * 
 * cdef inline _p_msg_io message_io_write(object buf):
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)             # <<<<<<<<<<<<<<
 *     msg.for_write(buf)
 *     return msg
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI__p_msg_io(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI__p_msg_io), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1094, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":1095
 * cdef inline _p_msg_io message_io_write(object buf):
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_write(buf)             # <<<<<<<<<<<<<<
 *     return msg
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_9_p_msg_io_for_write(__pyx_v_msg, __pyx_v_buf); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 1095, __pyx_L1_error)

  /* "mpi4py/MPI/msgbuffer.pxi":1096
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_write(buf)
 *     return msg             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgbuffer.pxi":1093
 *     return msg
 * 
 * cdef inline _p_msg_io message_io_write(object buf):             # <<<<<<<<<<<<<<
 *     cdef _p_msg_io msg = <_p_msg_io>_p_msg_io.__new__(_p_msg_io)
 *     msg.for_write(buf)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.message_io_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":54
 *     cdef object ob_PROTO
 * 
 *     def __cinit__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         self.ob_dumps = PyPickle_dumps
 *         self.ob_loads = PyPickle_loads
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Pickle_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Pickle_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 1))) return -1;
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Pickle___cinit__(((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Pickle___cinit__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/msgpickle.pxi":55
 * 
 *     def __cinit__(self, *args, **kwargs):
 *         self.ob_dumps = PyPickle_dumps             # <<<<<<<<<<<<<<
 *         self.ob_loads = PyPickle_loads
 *         self.ob_PROTO = PyPickle_PROTOCOL
 */
  __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
  __Pyx_GIVEREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
  __Pyx_GOTREF(__pyx_v_self->ob_dumps);
  __Pyx_DECREF(__pyx_v_self->ob_dumps);
  __pyx_v_self->ob_dumps = __pyx_v_6mpi4py_3MPI_PyPickle_dumps;

  /* "mpi4py/MPI/msgpickle.pxi":56
 *     def __cinit__(self, *args, **kwargs):
 *         self.ob_dumps = PyPickle_dumps
 *         self.ob_loads = PyPickle_loads             # <<<<<<<<<<<<<<
 *         self.ob_PROTO = PyPickle_PROTOCOL
 * 
 */
  __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
  __Pyx_GIVEREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
  __Pyx_GOTREF(__pyx_v_self->ob_loads);
  __Pyx_DECREF(__pyx_v_self->ob_loads);
  __pyx_v_self->ob_loads = __pyx_v_6mpi4py_3MPI_PyPickle_loads;

  /* "mpi4py/MPI/msgpickle.pxi":57
 *         self.ob_dumps = PyPickle_dumps
 *         self.ob_loads = PyPickle_loads
 *         self.ob_PROTO = PyPickle_PROTOCOL             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, dumps=None, loads=None, protocol=None):
 */
  __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
  __Pyx_GIVEREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
  __Pyx_GOTREF(__pyx_v_self->ob_PROTO);
  __Pyx_DECREF(__pyx_v_self->ob_PROTO);
  __pyx_v_self->ob_PROTO = __pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL;

  /* "mpi4py/MPI/msgpickle.pxi":54
 *     cdef object ob_PROTO
 * 
 *     def __cinit__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         self.ob_dumps = PyPickle_dumps
 *         self.ob_loads = PyPickle_loads
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":59
 *         self.ob_PROTO = PyPickle_PROTOCOL
 * 
 *     def __init__(self, dumps=None, loads=None, protocol=None):             # <<<<<<<<<<<<<<
 *         if dumps is None:
 *             dumps = PyPickle_dumps
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Pickle_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Pickle_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_dumps = 0;
  PyObject *__pyx_v_loads = 0;
  PyObject *__pyx_v_protocol = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dumps,&__pyx_n_s_loads,&__pyx_n_s_protocol,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dumps);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loads);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(6, 59, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dumps = values[0];
    __pyx_v_loads = values[1];
    __pyx_v_protocol = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(6, 59, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Pickle_2__init__(((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_v_self), __pyx_v_dumps, __pyx_v_loads, __pyx_v_protocol);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Pickle_2__init__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_dumps, PyObject *__pyx_v_loads, PyObject *__pyx_v_protocol) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF(__pyx_v_dumps);
  __Pyx_INCREF(__pyx_v_loads);
  __Pyx_INCREF(__pyx_v_protocol);

  /* "mpi4py/MPI/msgpickle.pxi":60
 * 
 *     def __init__(self, dumps=None, loads=None, protocol=None):
 *         if dumps is None:             # <<<<<<<<<<<<<<
 *             dumps = PyPickle_dumps
 *         if loads is None:
 */
  __pyx_t_1 = (__pyx_v_dumps == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":61
 *     def __init__(self, dumps=None, loads=None, protocol=None):
 *         if dumps is None:
 *             dumps = PyPickle_dumps             # <<<<<<<<<<<<<<
 *         if loads is None:
 *             loads = PyPickle_loads
 */
    __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
    __Pyx_DECREF_SET(__pyx_v_dumps, __pyx_v_6mpi4py_3MPI_PyPickle_dumps);

    /* "mpi4py/MPI/msgpickle.pxi":60
 * 
 *     def __init__(self, dumps=None, loads=None, protocol=None):
 *         if dumps is None:             # <<<<<<<<<<<<<<
 *             dumps = PyPickle_dumps
 *         if loads is None:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":62
 *         if dumps is None:
 *             dumps = PyPickle_dumps
 *         if loads is None:             # <<<<<<<<<<<<<<
 *             loads = PyPickle_loads
 *         if protocol is None:
 */
  __pyx_t_2 = (__pyx_v_loads == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":63
 *             dumps = PyPickle_dumps
 *         if loads is None:
 *             loads = PyPickle_loads             # <<<<<<<<<<<<<<
 *         if protocol is None:
 *             if dumps is PyPickle_dumps:
 */
    __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
    __Pyx_DECREF_SET(__pyx_v_loads, __pyx_v_6mpi4py_3MPI_PyPickle_loads);

    /* "mpi4py/MPI/msgpickle.pxi":62
 *         if dumps is None:
 *             dumps = PyPickle_dumps
 *         if loads is None:             # <<<<<<<<<<<<<<
 *             loads = PyPickle_loads
 *         if protocol is None:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":64
 *         if loads is None:
 *             loads = PyPickle_loads
 *         if protocol is None:             # <<<<<<<<<<<<<<
 *             if dumps is PyPickle_dumps:
 *                 protocol = PyPickle_PROTOCOL
 */
  __pyx_t_1 = (__pyx_v_protocol == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":65
 *             loads = PyPickle_loads
 *         if protocol is None:
 *             if dumps is PyPickle_dumps:             # <<<<<<<<<<<<<<
 *                 protocol = PyPickle_PROTOCOL
 *         self.ob_dumps = dumps
 */
    __pyx_t_2 = (__pyx_v_dumps == __pyx_v_6mpi4py_3MPI_PyPickle_dumps);
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgpickle.pxi":66
 *         if protocol is None:
 *             if dumps is PyPickle_dumps:
 *                 protocol = PyPickle_PROTOCOL             # <<<<<<<<<<<<<<
 *         self.ob_dumps = dumps
 *         self.ob_loads = loads
 */
      __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
      __Pyx_DECREF_SET(__pyx_v_protocol, __pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);

      /* "mpi4py/MPI/msgpickle.pxi":65
 *             loads = PyPickle_loads
 *         if protocol is None:
 *             if dumps is PyPickle_dumps:             # <<<<<<<<<<<<<<
 *                 protocol = PyPickle_PROTOCOL
 *         self.ob_dumps = dumps
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":64
 *         if loads is None:
 *             loads = PyPickle_loads
 *         if protocol is None:             # <<<<<<<<<<<<<<
 *             if dumps is PyPickle_dumps:
 *                 protocol = PyPickle_PROTOCOL
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":67
 *             if dumps is PyPickle_dumps:
 *                 protocol = PyPickle_PROTOCOL
 *         self.ob_dumps = dumps             # <<<<<<<<<<<<<<
 *         self.ob_loads = loads
 *         self.ob_PROTO = protocol
 */
  __Pyx_INCREF(__pyx_v_dumps);
  __Pyx_GIVEREF(__pyx_v_dumps);
  __Pyx_GOTREF(__pyx_v_self->ob_dumps);
  __Pyx_DECREF(__pyx_v_self->ob_dumps);
  __pyx_v_self->ob_dumps = __pyx_v_dumps;

  /* "mpi4py/MPI/msgpickle.pxi":68
 *                 protocol = PyPickle_PROTOCOL
 *         self.ob_dumps = dumps
 *         self.ob_loads = loads             # <<<<<<<<<<<<<<
 *         self.ob_PROTO = protocol
 * 
 */
  __Pyx_INCREF(__pyx_v_loads);
  __Pyx_GIVEREF(__pyx_v_loads);
  __Pyx_GOTREF(__pyx_v_self->ob_loads);
  __Pyx_DECREF(__pyx_v_self->ob_loads);
  __pyx_v_self->ob_loads = __pyx_v_loads;

  /* "mpi4py/MPI/msgpickle.pxi":69
 *         self.ob_dumps = dumps
 *         self.ob_loads = loads
 *         self.ob_PROTO = protocol             # <<<<<<<<<<<<<<
 * 
 *     def dumps(self, obj):
 */
  __Pyx_INCREF(__pyx_v_protocol);
  __Pyx_GIVEREF(__pyx_v_protocol);
  __Pyx_GOTREF(__pyx_v_self->ob_PROTO);
  __Pyx_DECREF(__pyx_v_self->ob_PROTO);
  __pyx_v_self->ob_PROTO = __pyx_v_protocol;

  /* "mpi4py/MPI/msgpickle.pxi":59
 *         self.ob_PROTO = PyPickle_PROTOCOL
 * 
 *     def __init__(self, dumps=None, loads=None, protocol=None):             # <<<<<<<<<<<<<<
 *         if dumps is None:
 *             dumps = PyPickle_dumps
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_XDECREF(__pyx_v_dumps);
  __Pyx_XDECREF(__pyx_v_loads);
  __Pyx_XDECREF(__pyx_v_protocol);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":71
 *         self.ob_PROTO = protocol
 * 
 *     def dumps(self, obj):             # <<<<<<<<<<<<<<
 *         "dumps(obj) -> bytes"
 *         return self.cdumps(obj)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Pickle_5dumps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Pickle_4dumps[] = "Pickle.dumps(self, obj)\ndumps(obj) -> bytes";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Pickle_5dumps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dumps (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "dumps") < 0)) __PYX_ERR(6, 71, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_obj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("dumps", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(6, 71, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.dumps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Pickle_4dumps(((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_v_self), __pyx_v_obj);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Pickle_4dumps(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("dumps", 0);

  /* "mpi4py/MPI/msgpickle.pxi":73
 *     def dumps(self, obj):
 *         "dumps(obj) -> bytes"
 *         return self.cdumps(obj)             # <<<<<<<<<<<<<<
 * 
 *     def loads(self, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_cdumps(__pyx_v_self, __pyx_v_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":71
 *         self.ob_PROTO = protocol
 * 
 *     def dumps(self, obj):             # <<<<<<<<<<<<<<
 *         "dumps(obj) -> bytes"
 *         return self.cdumps(obj)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.dumps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":75
 *         return self.cdumps(obj)
 * 
 *     def loads(self, buf):             # <<<<<<<<<<<<<<
 *         "loads(buf) -> object"
 *         return self.cloads(buf)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Pickle_7loads(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Pickle_6loads[] = "Pickle.loads(self, buf)\nloads(buf) -> object";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Pickle_7loads(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("loads (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "loads") < 0)) __PYX_ERR(6, 75, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("loads", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(6, 75, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.loads", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Pickle_6loads(((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Pickle_6loads(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_buf) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("loads", 0);

  /* "mpi4py/MPI/msgpickle.pxi":77
 *     def loads(self, buf):
 *         "loads(buf) -> object"
 *         return self.cloads(buf)             # <<<<<<<<<<<<<<
 * 
 *     property PROTOCOL:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_cloads(__pyx_v_self, __pyx_v_buf); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":75
 *         return self.cdumps(obj)
 * 
 *     def loads(self, buf):             # <<<<<<<<<<<<<<
 *         "loads(buf) -> object"
 *         return self.cloads(buf)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.loads", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":81
 *     property PROTOCOL:
 *         "protocol"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.ob_PROTO
 *         def __set__(self, protocol):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Pickle_8PROTOCOL_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Pickle_8PROTOCOL_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Pickle_8PROTOCOL___get__(((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Pickle_8PROTOCOL___get__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/msgpickle.pxi":82
 *         "protocol"
 *         def __get__(self):
 *             return self.ob_PROTO             # <<<<<<<<<<<<<<
 *         def __set__(self, protocol):
 *             if protocol is None:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->ob_PROTO);
  __pyx_r = __pyx_v_self->ob_PROTO;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":81
 *     property PROTOCOL:
 *         "protocol"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.ob_PROTO
 *         def __set__(self, protocol):
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":83
 *         def __get__(self):
 *             return self.ob_PROTO
 *         def __set__(self, protocol):             # <<<<<<<<<<<<<<
 *             if protocol is None:
 *                 if self.ob_dumps is PyPickle_dumps:
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Pickle_8PROTOCOL_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_protocol); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Pickle_8PROTOCOL_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_protocol) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Pickle_8PROTOCOL_2__set__(((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_v_self), ((PyObject *)__pyx_v_protocol));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Pickle_8PROTOCOL_2__set__(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_protocol) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_protocol);

  /* "mpi4py/MPI/msgpickle.pxi":84
 *             return self.ob_PROTO
 *         def __set__(self, protocol):
 *             if protocol is None:             # <<<<<<<<<<<<<<
 *                 if self.ob_dumps is PyPickle_dumps:
 *                     protocol = PyPickle_PROTOCOL
 */
  __pyx_t_1 = (__pyx_v_protocol == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":85
 *         def __set__(self, protocol):
 *             if protocol is None:
 *                 if self.ob_dumps is PyPickle_dumps:             # <<<<<<<<<<<<<<
 *                     protocol = PyPickle_PROTOCOL
 *             self.ob_PROTO = protocol
 */
    __pyx_t_2 = (__pyx_v_self->ob_dumps == __pyx_v_6mpi4py_3MPI_PyPickle_dumps);
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgpickle.pxi":86
 *             if protocol is None:
 *                 if self.ob_dumps is PyPickle_dumps:
 *                     protocol = PyPickle_PROTOCOL             # <<<<<<<<<<<<<<
 *             self.ob_PROTO = protocol
 * 
 */
      __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
      __Pyx_DECREF_SET(__pyx_v_protocol, __pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);

      /* "mpi4py/MPI/msgpickle.pxi":85
 *         def __set__(self, protocol):
 *             if protocol is None:
 *                 if self.ob_dumps is PyPickle_dumps:             # <<<<<<<<<<<<<<
 *                     protocol = PyPickle_PROTOCOL
 *             self.ob_PROTO = protocol
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":84
 *             return self.ob_PROTO
 *         def __set__(self, protocol):
 *             if protocol is None:             # <<<<<<<<<<<<<<
 *                 if self.ob_dumps is PyPickle_dumps:
 *                     protocol = PyPickle_PROTOCOL
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":87
 *                 if self.ob_dumps is PyPickle_dumps:
 *                     protocol = PyPickle_PROTOCOL
 *             self.ob_PROTO = protocol             # <<<<<<<<<<<<<<
 * 
 *     cdef object cdumps(self, object obj):
 */
  __Pyx_INCREF(__pyx_v_protocol);
  __Pyx_GIVEREF(__pyx_v_protocol);
  __Pyx_GOTREF(__pyx_v_self->ob_PROTO);
  __Pyx_DECREF(__pyx_v_self->ob_PROTO);
  __pyx_v_self->ob_PROTO = __pyx_v_protocol;

  /* "mpi4py/MPI/msgpickle.pxi":83
 *         def __get__(self):
 *             return self.ob_PROTO
 *         def __set__(self, protocol):             # <<<<<<<<<<<<<<
 *             if protocol is None:
 *                 if self.ob_dumps is PyPickle_dumps:
 */

  /* function exit code */
  __pyx_r = 0;
  __Pyx_XDECREF(__pyx_v_protocol);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":89
 *             self.ob_PROTO = protocol
 * 
 *     cdef object cdumps(self, object obj):             # <<<<<<<<<<<<<<
 *         if self.ob_PROTO is not None:
 *             return self.ob_dumps(obj, self.ob_PROTO)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_cdumps(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("cdumps", 0);

  /* "mpi4py/MPI/msgpickle.pxi":90
 * 
 *     cdef object cdumps(self, object obj):
 *         if self.ob_PROTO is not None:             # <<<<<<<<<<<<<<
 *             return self.ob_dumps(obj, self.ob_PROTO)
 *         else:
 */
  __pyx_t_1 = (__pyx_v_self->ob_PROTO != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":91
 *     cdef object cdumps(self, object obj):
 *         if self.ob_PROTO is not None:
 *             return self.ob_dumps(obj, self.ob_PROTO)             # <<<<<<<<<<<<<<
 *         else:
 *             return self.ob_dumps(obj)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_self->ob_dumps);
    __pyx_t_4 = __pyx_v_self->ob_dumps; __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_obj, __pyx_v_self->ob_PROTO};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 91, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_obj, __pyx_v_self->ob_PROTO};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 91, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_obj);
      __Pyx_GIVEREF(__pyx_v_obj);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_obj);
      __Pyx_INCREF(__pyx_v_self->ob_PROTO);
      __Pyx_GIVEREF(__pyx_v_self->ob_PROTO);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_self->ob_PROTO);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":90
 * 
 *     cdef object cdumps(self, object obj):
 *         if self.ob_PROTO is not None:             # <<<<<<<<<<<<<<
 *             return self.ob_dumps(obj, self.ob_PROTO)
 *         else:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":93
 *             return self.ob_dumps(obj, self.ob_PROTO)
 *         else:
 *             return self.ob_dumps(obj)             # <<<<<<<<<<<<<<
 * 
 *     cdef object cloads(self, object buf):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_self->ob_dumps);
    __pyx_t_4 = __pyx_v_self->ob_dumps; __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_v_obj) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_obj);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 93, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":89
 *             self.ob_PROTO = protocol
 * 
 *     cdef object cdumps(self, object obj):             # <<<<<<<<<<<<<<
 *         if self.ob_PROTO is not None:
 *             return self.ob_dumps(obj, self.ob_PROTO)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.cdumps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":95
 *             return self.ob_dumps(obj)
 * 
 *     cdef object cloads(self, object buf):             # <<<<<<<<<<<<<<
 *         if PY2:
 *             if not PyBytes_CheckExact(buf):
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_cloads(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_buf) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("cloads", 0);
  __Pyx_INCREF(__pyx_v_buf);

  /* "mpi4py/MPI/msgpickle.pxi":96
 * 
 *     cdef object cloads(self, object buf):
 *         if PY2:             # <<<<<<<<<<<<<<
 *             if not PyBytes_CheckExact(buf):
 *                 if self.ob_loads is PyPickle_loads:
 */
  if ((PY_MAJOR_VERSION==2)) {

    /* "mpi4py/MPI/msgpickle.pxi":97
 *     cdef object cloads(self, object buf):
 *         if PY2:
 *             if not PyBytes_CheckExact(buf):             # <<<<<<<<<<<<<<
 *                 if self.ob_loads is PyPickle_loads:
 *                     buf = PyBytesIO_New(buf)
 */
    __pyx_t_1 = ((!(PyBytes_CheckExact(__pyx_v_buf) != 0)) != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/msgpickle.pxi":98
 *         if PY2:
 *             if not PyBytes_CheckExact(buf):
 *                 if self.ob_loads is PyPickle_loads:             # <<<<<<<<<<<<<<
 *                     buf = PyBytesIO_New(buf)
 *                     return PyPickle_loadf(buf)
 */
      __pyx_t_1 = (__pyx_v_self->ob_loads == __pyx_v_6mpi4py_3MPI_PyPickle_loads);
      __pyx_t_2 = (__pyx_t_1 != 0);
      if (__pyx_t_2) {

        /* "mpi4py/MPI/msgpickle.pxi":99
 *             if not PyBytes_CheckExact(buf):
 *                 if self.ob_loads is PyPickle_loads:
 *                     buf = PyBytesIO_New(buf)             # <<<<<<<<<<<<<<
 *                     return PyPickle_loadf(buf)
 *         return self.ob_loads(buf)
 */
        __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyBytesIO_New);
        __pyx_t_4 = __pyx_v_6mpi4py_3MPI_PyBytesIO_New; __pyx_t_5 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_buf) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_buf);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 99, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_3);
        __pyx_t_3 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":100
 *                 if self.ob_loads is PyPickle_loads:
 *                     buf = PyBytesIO_New(buf)
 *                     return PyPickle_loadf(buf)             # <<<<<<<<<<<<<<
 *         return self.ob_loads(buf)
 * 
 */
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_PyPickle_loadf);
        __pyx_t_4 = __pyx_v_6mpi4py_3MPI_PyPickle_loadf; __pyx_t_5 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_buf) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_buf);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 100, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_r = __pyx_t_3;
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "mpi4py/MPI/msgpickle.pxi":98
 *         if PY2:
 *             if not PyBytes_CheckExact(buf):
 *                 if self.ob_loads is PyPickle_loads:             # <<<<<<<<<<<<<<
 *                     buf = PyBytesIO_New(buf)
 *                     return PyPickle_loadf(buf)
 */
      }

      /* "mpi4py/MPI/msgpickle.pxi":97
 *     cdef object cloads(self, object buf):
 *         if PY2:
 *             if not PyBytes_CheckExact(buf):             # <<<<<<<<<<<<<<
 *                 if self.ob_loads is PyPickle_loads:
 *                     buf = PyBytesIO_New(buf)
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":96
 * 
 *     cdef object cloads(self, object buf):
 *         if PY2:             # <<<<<<<<<<<<<<
 *             if not PyBytes_CheckExact(buf):
 *                 if self.ob_loads is PyPickle_loads:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":101
 *                     buf = PyBytesIO_New(buf)
 *                     return PyPickle_loadf(buf)
 *         return self.ob_loads(buf)             # <<<<<<<<<<<<<<
 * 
 *     cdef object dump(self, object obj, void **p, int *n):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->ob_loads);
  __pyx_t_4 = __pyx_v_self->ob_loads; __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_buf) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_buf);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":95
 *             return self.ob_dumps(obj)
 * 
 *     cdef object cloads(self, object buf):             # <<<<<<<<<<<<<<
 *         if PY2:
 *             if not PyBytes_CheckExact(buf):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.cloads", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":103
 *         return self.ob_loads(buf)
 * 
 *     cdef object dump(self, object obj, void **p, int *n):             # <<<<<<<<<<<<<<
 *         cdef object buf = self.cdumps(obj)
 *         p[0] = <void*>PyBytes_AsString(buf)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_dump(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj, void **__pyx_v_p, int *__pyx_v_n) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("dump", 0);

  /* "mpi4py/MPI/msgpickle.pxi":104
 * 
 *     cdef object dump(self, object obj, void **p, int *n):
 *         cdef object buf = self.cdumps(obj)             # <<<<<<<<<<<<<<
 *         p[0] = <void*>PyBytes_AsString(buf)
 *         n[0] = downcast(PyBytes_Size(buf))
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_cdumps(__pyx_v_self, __pyx_v_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":105
 *     cdef object dump(self, object obj, void **p, int *n):
 *         cdef object buf = self.cdumps(obj)
 *         p[0] = <void*>PyBytes_AsString(buf)             # <<<<<<<<<<<<<<
 *         n[0] = downcast(PyBytes_Size(buf))
 *         return buf
 */
  __pyx_t_2 = PyBytes_AsString(__pyx_v_buf); if (unlikely(__pyx_t_2 == ((char *)NULL))) __PYX_ERR(6, 105, __pyx_L1_error)
  (__pyx_v_p[0]) = ((void *)__pyx_t_2);

  /* "mpi4py/MPI/msgpickle.pxi":106
 *         cdef object buf = self.cdumps(obj)
 *         p[0] = <void*>PyBytes_AsString(buf)
 *         n[0] = downcast(PyBytes_Size(buf))             # <<<<<<<<<<<<<<
 *         return buf
 * 
 */
  __pyx_t_3 = PyBytes_Size(__pyx_v_buf); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1L))) __PYX_ERR(6, 106, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_downcast(__pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(6, 106, __pyx_L1_error)
  (__pyx_v_n[0]) = __pyx_t_4;

  /* "mpi4py/MPI/msgpickle.pxi":107
 *         p[0] = <void*>PyBytes_AsString(buf)
 *         n[0] = downcast(PyBytes_Size(buf))
 *         return buf             # <<<<<<<<<<<<<<
 * 
 *     cdef object load(self, void *p, int n):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_buf);
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":103
 *         return self.ob_loads(buf)
 * 
 *     cdef object dump(self, object obj, void **p, int *n):             # <<<<<<<<<<<<<<
 *         cdef object buf = self.cdumps(obj)
 *         p[0] = <void*>PyBytes_AsString(buf)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.dump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":109
 *         return buf
 * 
 *     cdef object load(self, void *p, int n):             # <<<<<<<<<<<<<<
 *         if p == NULL or n == 0: return None
 *         return self.cloads(tomemory(p, n))
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_load(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void *__pyx_v_p, int __pyx_v_n) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("load", 0);

  /* "mpi4py/MPI/msgpickle.pxi":110
 * 
 *     cdef object load(self, void *p, int n):
 *         if p == NULL or n == 0: return None             # <<<<<<<<<<<<<<
 *         return self.cloads(tomemory(p, n))
 * 
 */
  __pyx_t_2 = ((__pyx_v_p == NULL) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_n == 0) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":111
 *     cdef object load(self, void *p, int n):
 *         if p == NULL or n == 0: return None
 *         return self.cloads(tomemory(p, n))             # <<<<<<<<<<<<<<
 * 
 *     cdef object dumpv(self, object obj, void **p, int n, int cnt[], int dsp[]):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_p, __pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_6Pickle_cloads(__pyx_v_self, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":109
 *         return buf
 * 
 *     cdef object load(self, void *p, int n):             # <<<<<<<<<<<<<<
 *         if p == NULL or n == 0: return None
 *         return self.cloads(tomemory(p, n))
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.load", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":113
 *         return self.cloads(tomemory(p, n))
 * 
 *     cdef object dumpv(self, object obj, void **p, int n, int cnt[], int dsp[]):             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_dumpv(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, PyObject *__pyx_v_obj, void **__pyx_v_p, int __pyx_v_n, int *__pyx_v_cnt, int *__pyx_v_dsp) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_m;
  PyObject *__pyx_v_items = 0;
  int __pyx_v_c;
  int __pyx_v_d;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  char *__pyx_t_8;
  __Pyx_RefNannySetupContext("dumpv", 0);

  /* "mpi4py/MPI/msgpickle.pxi":114
 * 
 *     cdef object dumpv(self, object obj, void **p, int n, int cnt[], int dsp[]):
 *         cdef Py_ssize_t i=0, m=n             # <<<<<<<<<<<<<<
 *         cdef object items
 *         if obj is None: items = [None] * m
 */
  __pyx_v_i = 0;
  __pyx_v_m = __pyx_v_n;

  /* "mpi4py/MPI/msgpickle.pxi":116
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items
 *         if obj is None: items = [None] * m             # <<<<<<<<<<<<<<
 *         else:           items = list(obj)
 *         m = len(items)
 */
  __pyx_t_1 = (__pyx_v_obj == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = PyList_New(1 * ((__pyx_v_m<0) ? 0:__pyx_v_m)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    { Py_ssize_t __pyx_temp;
      for (__pyx_temp=0; __pyx_temp < __pyx_v_m; __pyx_temp++) {
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyList_SET_ITEM(__pyx_t_3, __pyx_temp, Py_None);
      }
    }
    __pyx_v_items = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":117
 *         cdef object items
 *         if obj is None: items = [None] * m
 *         else:           items = list(obj)             # <<<<<<<<<<<<<<
 *         m = len(items)
 *         if m != n: raise ValueError(
 */
  /*else*/ {
    __pyx_t_3 = PySequence_List(__pyx_v_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_items = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":118
 *         if obj is None: items = [None] * m
 *         else:           items = list(obj)
 *         m = len(items)             # <<<<<<<<<<<<<<
 *         if m != n: raise ValueError(
 *             "expecting %d items, got %d" % (n, m))
 */
  __pyx_t_4 = PyObject_Length(__pyx_v_items); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(6, 118, __pyx_L1_error)
  __pyx_v_m = __pyx_t_4;

  /* "mpi4py/MPI/msgpickle.pxi":119
 *         else:           items = list(obj)
 *         m = len(items)
 *         if m != n: raise ValueError(             # <<<<<<<<<<<<<<
 *             "expecting %d items, got %d" % (n, m))
 *         cdef int  c=0, d=0
 */
  __pyx_t_2 = ((__pyx_v_m != __pyx_v_n) != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgpickle.pxi":120
 *         m = len(items)
 *         if m != n: raise ValueError(
 *             "expecting %d items, got %d" % (n, m))             # <<<<<<<<<<<<<<
 *         cdef int  c=0, d=0
 *         for i from 0 <= i < m:
 */
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_m); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_expecting_d_items_got_d, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":119
 *         else:           items = list(obj)
 *         m = len(items)
 *         if m != n: raise ValueError(             # <<<<<<<<<<<<<<
 *             "expecting %d items, got %d" % (n, m))
 *         cdef int  c=0, d=0
 */
    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_6, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __PYX_ERR(6, 119, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgpickle.pxi":121
 *         if m != n: raise ValueError(
 *             "expecting %d items, got %d" % (n, m))
 *         cdef int  c=0, d=0             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < m:
 *             items[i] = self.dump(items[i], p, &c)
 */
  __pyx_v_c = 0;
  __pyx_v_d = 0;

  /* "mpi4py/MPI/msgpickle.pxi":122
 *             "expecting %d items, got %d" % (n, m))
 *         cdef int  c=0, d=0
 *         for i from 0 <= i < m:             # <<<<<<<<<<<<<<
 *             items[i] = self.dump(items[i], p, &c)
 *             cnt[i] = c; dsp[i] = d;
 */
  __pyx_t_4 = __pyx_v_m;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {

    /* "mpi4py/MPI/msgpickle.pxi":123
 *         cdef int  c=0, d=0
 *         for i from 0 <= i < m:
 *             items[i] = self.dump(items[i], p, &c)             # <<<<<<<<<<<<<<
 *             cnt[i] = c; dsp[i] = d;
 *             d = downcast(<MPI_Aint>d + <MPI_Aint>c)
 */
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_items, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_self, __pyx_t_6, __pyx_v_p, (&__pyx_v_c)); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__Pyx_SetItemInt(__pyx_v_items, __pyx_v_i, __pyx_t_5, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0)) __PYX_ERR(6, 123, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":124
 *         for i from 0 <= i < m:
 *             items[i] = self.dump(items[i], p, &c)
 *             cnt[i] = c; dsp[i] = d;             # <<<<<<<<<<<<<<
 *             d = downcast(<MPI_Aint>d + <MPI_Aint>c)
 *         cdef object buf = PyBytes_Join(b'', items)
 */
    (__pyx_v_cnt[__pyx_v_i]) = __pyx_v_c;
    (__pyx_v_dsp[__pyx_v_i]) = __pyx_v_d;

    /* "mpi4py/MPI/msgpickle.pxi":125
 *             items[i] = self.dump(items[i], p, &c)
 *             cnt[i] = c; dsp[i] = d;
 *             d = downcast(<MPI_Aint>d + <MPI_Aint>c)             # <<<<<<<<<<<<<<
 *         cdef object buf = PyBytes_Join(b'', items)
 *         p[0] = PyBytes_AsString(buf)
 */
    __pyx_t_7 = __pyx_f_6mpi4py_3MPI_downcast((((MPI_Aint)__pyx_v_d) + ((MPI_Aint)__pyx_v_c))); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(6, 125, __pyx_L1_error)
    __pyx_v_d = __pyx_t_7;
  }

  /* "mpi4py/MPI/msgpickle.pxi":126
 *             cnt[i] = c; dsp[i] = d;
 *             d = downcast(<MPI_Aint>d + <MPI_Aint>c)
 *         cdef object buf = PyBytes_Join(b'', items)             # <<<<<<<<<<<<<<
 *         p[0] = PyBytes_AsString(buf)
 *         return buf
 */
  __pyx_t_5 = _PyBytes_Join(__pyx_kp_b__23, __pyx_v_items); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_v_buf = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":127
 *             d = downcast(<MPI_Aint>d + <MPI_Aint>c)
 *         cdef object buf = PyBytes_Join(b'', items)
 *         p[0] = PyBytes_AsString(buf)             # <<<<<<<<<<<<<<
 *         return buf
 * 
 */
  __pyx_t_8 = PyBytes_AsString(__pyx_v_buf); if (unlikely(__pyx_t_8 == ((char *)NULL))) __PYX_ERR(6, 127, __pyx_L1_error)
  (__pyx_v_p[0]) = __pyx_t_8;

  /* "mpi4py/MPI/msgpickle.pxi":128
 *         cdef object buf = PyBytes_Join(b'', items)
 *         p[0] = PyBytes_AsString(buf)
 *         return buf             # <<<<<<<<<<<<<<
 * 
 *     cdef object loadv(self, void *p, int n, int cnt[], int dsp[]):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_buf);
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":113
 *         return self.cloads(tomemory(p, n))
 * 
 *     cdef object dumpv(self, object obj, void **p, int n, int cnt[], int dsp[]):             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.dumpv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":130
 *         return buf
 * 
 *     cdef object loadv(self, void *p, int n, int cnt[], int dsp[]):             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items = [None] * m
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_loadv(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void *__pyx_v_p, int __pyx_v_n, int *__pyx_v_cnt, int *__pyx_v_dsp) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_m;
  PyObject *__pyx_v_items = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  __Pyx_RefNannySetupContext("loadv", 0);

  /* "mpi4py/MPI/msgpickle.pxi":131
 * 
 *     cdef object loadv(self, void *p, int n, int cnt[], int dsp[]):
 *         cdef Py_ssize_t i=0, m=n             # <<<<<<<<<<<<<<
 *         cdef object items = [None] * m
 *         if p == NULL: return items
 */
  __pyx_v_i = 0;
  __pyx_v_m = __pyx_v_n;

  /* "mpi4py/MPI/msgpickle.pxi":132
 *     cdef object loadv(self, void *p, int n, int cnt[], int dsp[]):
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items = [None] * m             # <<<<<<<<<<<<<<
 *         if p == NULL: return items
 *         for i from 0 <= i < m:
 */
  __pyx_t_1 = PyList_New(1 * ((__pyx_v_m<0) ? 0:__pyx_v_m)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  { Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < __pyx_v_m; __pyx_temp++) {
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyList_SET_ITEM(__pyx_t_1, __pyx_temp, Py_None);
    }
  }
  __pyx_v_items = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":133
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items = [None] * m
 *         if p == NULL: return items             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < m:
 *             items[i] = self.load(<char*>p+dsp[i], cnt[i])
 */
  __pyx_t_2 = ((__pyx_v_p == NULL) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_items);
    __pyx_r = __pyx_v_items;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":134
 *         cdef object items = [None] * m
 *         if p == NULL: return items
 *         for i from 0 <= i < m:             # <<<<<<<<<<<<<<
 *             items[i] = self.load(<char*>p+dsp[i], cnt[i])
 *         return items
 */
  __pyx_t_3 = __pyx_v_m;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {

    /* "mpi4py/MPI/msgpickle.pxi":135
 *         if p == NULL: return items
 *         for i from 0 <= i < m:
 *             items[i] = self.load(<char*>p+dsp[i], cnt[i])             # <<<<<<<<<<<<<<
 *         return items
 * 
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_self, (((char *)__pyx_v_p) + (__pyx_v_dsp[__pyx_v_i])), (__pyx_v_cnt[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__Pyx_SetItemInt(__pyx_v_items, __pyx_v_i, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0)) __PYX_ERR(6, 135, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":136
 *         for i from 0 <= i < m:
 *             items[i] = self.load(<char*>p+dsp[i], cnt[i])
 *         return items             # <<<<<<<<<<<<<<
 * 
 *     cdef object alloc(self, void **p, int n):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_items);
  __pyx_r = __pyx_v_items;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":130
 *         return buf
 * 
 *     cdef object loadv(self, void *p, int n, int cnt[], int dsp[]):             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t i=0, m=n
 *         cdef object items = [None] * m
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.loadv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":138
 *         return items
 * 
 *     cdef object alloc(self, void **p, int n):             # <<<<<<<<<<<<<<
 *         cdef object buf = PyBytes_FromStringAndSize(NULL, n)
 *         p[0] = PyBytes_AsString(buf)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_alloc(CYTHON_UNUSED struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void **__pyx_v_p, int __pyx_v_n) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  __Pyx_RefNannySetupContext("alloc", 0);

  /* "mpi4py/MPI/msgpickle.pxi":139
 * 
 *     cdef object alloc(self, void **p, int n):
 *         cdef object buf = PyBytes_FromStringAndSize(NULL, n)             # <<<<<<<<<<<<<<
 *         p[0] = PyBytes_AsString(buf)
 *         return buf
 */
  __pyx_t_1 = PyBytes_FromStringAndSize(NULL, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_buf = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":140
 *     cdef object alloc(self, void **p, int n):
 *         cdef object buf = PyBytes_FromStringAndSize(NULL, n)
 *         p[0] = PyBytes_AsString(buf)             # <<<<<<<<<<<<<<
 *         return buf
 * 
 */
  __pyx_t_2 = PyBytes_AsString(__pyx_v_buf); if (unlikely(__pyx_t_2 == ((char *)NULL))) __PYX_ERR(6, 140, __pyx_L1_error)
  (__pyx_v_p[0]) = __pyx_t_2;

  /* "mpi4py/MPI/msgpickle.pxi":141
 *         cdef object buf = PyBytes_FromStringAndSize(NULL, n)
 *         p[0] = PyBytes_AsString(buf)
 *         return buf             # <<<<<<<<<<<<<<
 * 
 *     cdef object allocv(self, void **p, int n, int cnt[], int dsp[]):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_buf);
  __pyx_r = __pyx_v_buf;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":138
 *         return items
 * 
 *     cdef object alloc(self, void **p, int n):             # <<<<<<<<<<<<<<
 *         cdef object buf = PyBytes_FromStringAndSize(NULL, n)
 *         p[0] = PyBytes_AsString(buf)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.alloc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":143
 *         return buf
 * 
 *     cdef object allocv(self, void **p, int n, int cnt[], int dsp[]):             # <<<<<<<<<<<<<<
 *         cdef int i=0, d=0
 *         for i from 0 <= i < n:
 */

static PyObject *__pyx_f_6mpi4py_3MPI_6Pickle_allocv(struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_self, void **__pyx_v_p, int __pyx_v_n, int *__pyx_v_cnt, int *__pyx_v_dsp) {
  int __pyx_v_i;
  int __pyx_v_d;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("allocv", 0);

  /* "mpi4py/MPI/msgpickle.pxi":144
 * 
 *     cdef object allocv(self, void **p, int n, int cnt[], int dsp[]):
 *         cdef int i=0, d=0             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < n:
 *             dsp[i] = d
 */
  __pyx_v_i = 0;
  __pyx_v_d = 0;

  /* "mpi4py/MPI/msgpickle.pxi":145
 *     cdef object allocv(self, void **p, int n, int cnt[], int dsp[]):
 *         cdef int i=0, d=0
 *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
 *             dsp[i] = d
 *             d += cnt[i]
 */
  __pyx_t_1 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

    /* "mpi4py/MPI/msgpickle.pxi":146
 *         cdef int i=0, d=0
 *         for i from 0 <= i < n:
 *             dsp[i] = d             # <<<<<<<<<<<<<<
 *             d += cnt[i]
 *         return self.alloc(p, d)
 */
    (__pyx_v_dsp[__pyx_v_i]) = __pyx_v_d;

    /* "mpi4py/MPI/msgpickle.pxi":147
 *         for i from 0 <= i < n:
 *             dsp[i] = d
 *             d += cnt[i]             # <<<<<<<<<<<<<<
 *         return self.alloc(p, d)
 * 
 */
    __pyx_v_d = (__pyx_v_d + (__pyx_v_cnt[__pyx_v_i]));
  }

  /* "mpi4py/MPI/msgpickle.pxi":148
 *             dsp[i] = d
 *             d += cnt[i]
 *         return self.alloc(p, d)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_self, __pyx_v_p, __pyx_v_d); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":143
 *         return buf
 * 
 *     cdef object allocv(self, void **p, int n, int cnt[], int dsp[]):             # <<<<<<<<<<<<<<
 *         cdef int i=0, d=0
 *         for i from 0 <= i < n:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Pickle.allocv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":156
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline object allocate_count_displ(int n, int **p, int **q):             # <<<<<<<<<<<<<<
 *     cdef object mem = allocate(2*n, sizeof(int), p)
 *     q[0] = p[0] + n
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_allocate_count_displ(int __pyx_v_n, int **__pyx_v_p, int **__pyx_v_q) {
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("allocate_count_displ", 0);

  /* "mpi4py/MPI/msgpickle.pxi":157
 * 
 * cdef inline object allocate_count_displ(int n, int **p, int **q):
 *     cdef object mem = allocate(2*n, sizeof(int), p)             # <<<<<<<<<<<<<<
 *     q[0] = p[0] + n
 *     return mem
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((2 * __pyx_v_n), (sizeof(int)), __pyx_v_p)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_mem = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":158
 * cdef inline object allocate_count_displ(int n, int **p, int **q):
 *     cdef object mem = allocate(2*n, sizeof(int), p)
 *     q[0] = p[0] + n             # <<<<<<<<<<<<<<
 *     return mem
 * 
 */
  (__pyx_v_q[0]) = ((__pyx_v_p[0]) + __pyx_v_n);

  /* "mpi4py/MPI/msgpickle.pxi":159
 *     cdef object mem = allocate(2*n, sizeof(int), p)
 *     q[0] = p[0] + n
 *     return mem             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_mem);
  __pyx_r = __pyx_v_mem;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":156
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline object allocate_count_displ(int n, int **p, int **q):             # <<<<<<<<<<<<<<
 *     cdef object mem = allocate(2*n, sizeof(int), p)
 *     q[0] = p[0] + n
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.allocate_count_displ", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mem);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":163
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_send(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                        MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_send(PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_send", 0);

  /* "mpi4py/MPI/msgpickle.pxi":165
 * cdef object PyMPI_send(object obj, int dest, int tag,
 *                        MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":167
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":168
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":169
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":171
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":172
 *     #
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":173
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,
 *                                  dest, tag, comm) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":172
 *     #
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":174
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                  dest, tag, comm) )
 *     return None
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":175
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,
 *                                  dest, tag, comm) )             # <<<<<<<<<<<<<<
 *     return None
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Send(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 174, __pyx_L5_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":174
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                  dest, tag, comm) )
 *     return None
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":176
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype,
 *                                  dest, tag, comm) )
 *     return None             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":163
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_send(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                        MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":179
 * 
 * 
 * cdef object PyMPI_bsend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_bsend(PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_bsend", 0);

  /* "mpi4py/MPI/msgpickle.pxi":181
 * cdef object PyMPI_bsend(object obj, int dest, int tag,
 *                         MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":183
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":184
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":185
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":187
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":188
 *     #
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":189
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,
 *                                   dest, tag, comm) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":188
 *     #
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":190
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                   dest, tag, comm) )
 *     return None
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":191
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,
 *                                   dest, tag, comm) )             # <<<<<<<<<<<<<<
 *     return None
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bsend(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 190, __pyx_L5_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":190
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                   dest, tag, comm) )
 *     return None
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":192
 *     with nogil: CHKERR( MPI_Bsend(sbuf, scount, stype,
 *                                   dest, tag, comm) )
 *     return None             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":179
 * 
 * 
 * cdef object PyMPI_bsend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_bsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":195
 * 
 * 
 * cdef object PyMPI_ssend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_ssend(PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_ssend", 0);

  /* "mpi4py/MPI/msgpickle.pxi":197
 * cdef object PyMPI_ssend(object obj, int dest, int tag,
 *                         MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":199
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":200
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":201
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":203
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":204
 *     #
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":205
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,
 *                                   dest, tag, comm) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":204
 *     #
 *     cdef object tmps = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":206
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                   dest, tag, comm) )
 *     return None
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":207
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,
 *                                   dest, tag, comm) )             # <<<<<<<<<<<<<<
 *     return None
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ssend(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 206, __pyx_L5_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":206
 *     if dest != MPI_PROC_NULL:
 *         tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                   dest, tag, comm) )
 *     return None
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":208
 *     with nogil: CHKERR( MPI_Ssend(sbuf, scount, stype,
 *                                   dest, tag, comm) )
 *     return None             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":195
 * 
 * 
 * cdef object PyMPI_ssend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_ssend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":215
 *     int PyErr_WarnEx(object, char*, int) except -1
 * 
 * cdef object PyMPI_recv_obarg(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_obarg(PyObject *__pyx_v_obj, int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  MPI_Status __pyx_v_rsts;
  PyObject *__pyx_v_rmsg = 0;
  MPI_Aint __pyx_v_rlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_recv_obarg", 0);

  /* "mpi4py/MPI/msgpickle.pxi":217
 * cdef object PyMPI_recv_obarg(object obj, int source, int tag,
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *rbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":219
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":220
 *     #
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status rsts
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":221
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef MPI_Status rsts
 *     cdef object   rmsg = None
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":223
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status rsts
 *     cdef object   rmsg = None             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint rlen = 0
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":224
 *     cdef MPI_Status rsts
 *     cdef object   rmsg = None
 *     cdef MPI_Aint rlen = 0             # <<<<<<<<<<<<<<
 *     #
 *     PyErr_WarnEx(UserWarning, b"the 'buf' argument is deprecated", 1)
 */
  __pyx_v_rlen = 0;

  /* "mpi4py/MPI/msgpickle.pxi":226
 *     cdef MPI_Aint rlen = 0
 *     #
 *     PyErr_WarnEx(UserWarning, b"the 'buf' argument is deprecated", 1)             # <<<<<<<<<<<<<<
 *     #
 *     if source != MPI_PROC_NULL:
 */
  __pyx_t_1 = PyErr_WarnEx(__pyx_builtin_UserWarning, ((char *)"the 'buf' argument is deprecated"), 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 226, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":228
 *     PyErr_WarnEx(UserWarning, b"the 'buf' argument is deprecated", 1)
 *     #
 *     if source != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         if is_integral(obj):
 *             rcount = <int> obj
 */
  __pyx_t_2 = ((__pyx_v_source != MPI_PROC_NULL) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":229
 *     #
 *     if source != MPI_PROC_NULL:
 *         if is_integral(obj):             # <<<<<<<<<<<<<<
 *             rcount = <int> obj
 *             rmsg = pickle.alloc(&rbuf, rcount)
 */
    __pyx_t_2 = (__pyx_f_6mpi4py_3MPI_is_integral(__pyx_v_obj) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":230
 *     if source != MPI_PROC_NULL:
 *         if is_integral(obj):
 *             rcount = <int> obj             # <<<<<<<<<<<<<<
 *             rmsg = pickle.alloc(&rbuf, rcount)
 *         else:
 */
      __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_obj); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(6, 230, __pyx_L1_error)
      __pyx_v_rcount = ((int)__pyx_t_1);

      /* "mpi4py/MPI/msgpickle.pxi":231
 *         if is_integral(obj):
 *             rcount = <int> obj
 *             rmsg = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *         else:
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 */
      __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 231, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":229
 *     #
 *     if source != MPI_PROC_NULL:
 *         if is_integral(obj):             # <<<<<<<<<<<<<<
 *             rcount = <int> obj
 *             rmsg = pickle.alloc(&rbuf, rcount)
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":233
 *             rmsg = pickle.alloc(&rbuf, rcount)
 *         else:
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)             # <<<<<<<<<<<<<<
 *             rcount = clipcount(rlen)
 *         if status == MPI_STATUS_IGNORE:
 */
    /*else*/ {
      __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_obj, (&__pyx_v_rbuf), (&__pyx_v_rlen))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":234
 *         else:
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 *             rcount = clipcount(rlen)             # <<<<<<<<<<<<<<
 *         if status == MPI_STATUS_IGNORE:
 *             status = &rsts
 */
      __pyx_v_rcount = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_rlen);
    }
    __pyx_L4:;

    /* "mpi4py/MPI/msgpickle.pxi":235
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 *             rcount = clipcount(rlen)
 *         if status == MPI_STATUS_IGNORE:             # <<<<<<<<<<<<<<
 *             status = &rsts
 *         <void>rmsg
 */
    __pyx_t_2 = ((__pyx_v_status == MPI_STATUS_IGNORE) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":236
 *             rcount = clipcount(rlen)
 *         if status == MPI_STATUS_IGNORE:
 *             status = &rsts             # <<<<<<<<<<<<<<
 *         <void>rmsg
 *     with nogil:
 */
      __pyx_v_status = (&__pyx_v_rsts);

      /* "mpi4py/MPI/msgpickle.pxi":235
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 *             rcount = clipcount(rlen)
 *         if status == MPI_STATUS_IGNORE:             # <<<<<<<<<<<<<<
 *             status = &rsts
 *         <void>rmsg
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":237
 *         if status == MPI_STATUS_IGNORE:
 *             status = &rsts
 *         <void>rmsg             # <<<<<<<<<<<<<<
 *     with nogil:
 *         CHKERR( MPI_Recv(rbuf, rcount, rtype,
 */
    ((void)__pyx_v_rmsg);

    /* "mpi4py/MPI/msgpickle.pxi":228
 *     PyErr_WarnEx(UserWarning, b"the 'buf' argument is deprecated", 1)
 *     #
 *     if source != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         if is_integral(obj):
 *             rcount = <int> obj
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":238
 *             status = &rsts
 *         <void>rmsg
 *     with nogil:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Recv(rbuf, rcount, rtype,
 *                          source, tag, comm, status) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":239
 *         <void>rmsg
 *     with nogil:
 *         CHKERR( MPI_Recv(rbuf, rcount, rtype,             # <<<<<<<<<<<<<<
 *                          source, tag, comm, status) )
 *         if source != MPI_PROC_NULL:
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Recv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_status)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 239, __pyx_L7_error)

        /* "mpi4py/MPI/msgpickle.pxi":241
 *         CHKERR( MPI_Recv(rbuf, rcount, rtype,
 *                          source, tag, comm, status) )
 *         if source != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     #
 */
        __pyx_t_2 = ((__pyx_v_source != MPI_PROC_NULL) != 0);
        if (__pyx_t_2) {

          /* "mpi4py/MPI/msgpickle.pxi":242
 *                          source, tag, comm, status) )
 *         if source != MPI_PROC_NULL:
 *             CHKERR( MPI_Get_count(status, rtype, &rcount) )             # <<<<<<<<<<<<<<
 *     #
 *     if rcount <= 0: return None
 */
          __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count(__pyx_v_status, __pyx_v_rtype, (&__pyx_v_rcount))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 242, __pyx_L7_error)

          /* "mpi4py/MPI/msgpickle.pxi":241
 *         CHKERR( MPI_Recv(rbuf, rcount, rtype,
 *                          source, tag, comm, status) )
 *         if source != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     #
 */
        }
      }

      /* "mpi4py/MPI/msgpickle.pxi":238
 *             status = &rsts
 *         <void>rmsg
 *     with nogil:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Recv(rbuf, rcount, rtype,
 *                          source, tag, comm, status) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":244
 *             CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     #
 *     if rcount <= 0: return None             # <<<<<<<<<<<<<<
 *     return pickle.load(rbuf, rcount)
 * 
 */
  __pyx_t_2 = ((__pyx_v_rcount <= 0) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":245
 *     #
 *     if rcount <= 0: return None
 *     return pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":215
 *     int PyErr_WarnEx(object, char*, int) except -1
 * 
 * cdef object PyMPI_recv_obarg(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_recv_obarg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":248
 * 
 * 
 * cdef object PyMPI_recv_match(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_match(PyObject *__pyx_v_obj, int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  MPI_Message __pyx_v_match;
  MPI_Status __pyx_v_rsts;
  CYTHON_UNUSED PyObject *__pyx_v_tmpr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_recv_match", 0);

  /* "mpi4py/MPI/msgpickle.pxi":250
 * cdef object PyMPI_recv_match(object obj, int source, int tag,
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *rbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":252
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":253
 *     #
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":254
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef MPI_Message match = MPI_MESSAGE_NULL
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":256
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef MPI_Message match = MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Status rsts
 *     <void>obj # unused
 */
  __pyx_v_match = MPI_MESSAGE_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":258
 *     cdef MPI_Message match = MPI_MESSAGE_NULL
 *     cdef MPI_Status rsts
 *     <void>obj # unused             # <<<<<<<<<<<<<<
 *     #
 *     with nogil:
 */
  ((void)__pyx_v_obj);

  /* "mpi4py/MPI/msgpickle.pxi":260
 *     <void>obj # unused
 *     #
 *     with nogil:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Mprobe(source, tag, comm, &match, &rsts) )
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":261
 *     #
 *     with nogil:
 *         CHKERR( MPI_Mprobe(source, tag, comm, &match, &rsts) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_match), (&__pyx_v_rsts))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 261, __pyx_L4_error)

        /* "mpi4py/MPI/msgpickle.pxi":262
 *     with nogil:
 *         CHKERR( MPI_Mprobe(source, tag, comm, &match, &rsts) )
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )             # <<<<<<<<<<<<<<
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil:
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count((&__pyx_v_rsts), __pyx_v_rtype, (&__pyx_v_rcount))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 262, __pyx_L4_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":260
 *     <void>obj # unused
 *     #
 *     with nogil:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Mprobe(source, tag, comm, &match, &rsts) )
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":263
 *         CHKERR( MPI_Mprobe(source, tag, comm, &match, &rsts) )
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *     with nogil:
 *         CHKERR( MPI_Mrecv(rbuf, rcount, rtype, &match, status) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmpr = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":264
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Mrecv(rbuf, rcount, rtype, &match, status) )
 *     #
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":265
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil:
 *         CHKERR( MPI_Mrecv(rbuf, rcount, rtype, &match, status) )             # <<<<<<<<<<<<<<
 *     #
 *     if rcount <= 0: return None
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mrecv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, (&__pyx_v_match), __pyx_v_status)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 265, __pyx_L7_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":264
 *         CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Mrecv(rbuf, rcount, rtype, &match, status) )
 *     #
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":267
 *         CHKERR( MPI_Mrecv(rbuf, rcount, rtype, &match, status) )
 *     #
 *     if rcount <= 0: return None             # <<<<<<<<<<<<<<
 *     return pickle.load(rbuf, rcount)
 * 
 */
  __pyx_t_3 = ((__pyx_v_rcount <= 0) != 0);
  if (__pyx_t_3) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":268
 *     #
 *     if rcount <= 0: return None
 *     return pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":248
 * 
 * 
 * cdef object PyMPI_recv_match(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_recv_match", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmpr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":271
 * 
 * 
 * cdef object PyMPI_recv_probe(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_probe(PyObject *__pyx_v_obj, int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  MPI_Status __pyx_v_rsts;
  CYTHON_UNUSED PyObject *__pyx_v_tmpr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_recv_probe", 0);

  /* "mpi4py/MPI/msgpickle.pxi":273
 * cdef object PyMPI_recv_probe(object obj, int source, int tag,
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *rbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":275
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":276
 *     #
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":277
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef MPI_Status rsts
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":281
 *     cdef MPI_Status rsts
 *     cdef object tmpr
 *     <void>obj # unused             # <<<<<<<<<<<<<<
 *     #
 *     with PyMPI_Lock(comm, "recv"):
 */
  ((void)__pyx_v_obj);

  /* "mpi4py/MPI/msgpickle.pxi":283
 *     <void>obj # unused
 *     #
 *     with PyMPI_Lock(comm, "recv"):             # <<<<<<<<<<<<<<
 *         with nogil:
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 */
  /*with:*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_recv); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 283, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 283, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":284
 *     #
 *     with PyMPI_Lock(comm, "recv"):
 *         with nogil:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 *             CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":285
 *     with PyMPI_Lock(comm, "recv"):
 *         with nogil:
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *             source = rsts.MPI_SOURCE; tag = rsts.MPI_TAG
 */
                __pyx_t_9 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Probe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_rsts))); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(6, 285, __pyx_L14_error)

                /* "mpi4py/MPI/msgpickle.pxi":286
 *         with nogil:
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 *             CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )             # <<<<<<<<<<<<<<
 *             source = rsts.MPI_SOURCE; tag = rsts.MPI_TAG
 *         tmpr = pickle.alloc(&rbuf, rcount)
 */
                __pyx_t_9 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count((&__pyx_v_rsts), __pyx_v_rtype, (&__pyx_v_rcount))); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(6, 286, __pyx_L14_error)

                /* "mpi4py/MPI/msgpickle.pxi":287
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 *             CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *             source = rsts.MPI_SOURCE; tag = rsts.MPI_TAG             # <<<<<<<<<<<<<<
 *         tmpr = pickle.alloc(&rbuf, rcount)
 *         with nogil:
 */
                __pyx_t_9 = __pyx_v_rsts.MPI_SOURCE;
                __pyx_v_source = __pyx_t_9;
                __pyx_t_9 = __pyx_v_rsts.MPI_TAG;
                __pyx_v_tag = __pyx_t_9;
              }

              /* "mpi4py/MPI/msgpickle.pxi":284
 *     #
 *     with PyMPI_Lock(comm, "recv"):
 *         with nogil:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 *             CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L15;
                }
                __pyx_L14_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L7_error;
                }
                __pyx_L15:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":288
 *             CHKERR( MPI_Get_count(&rsts, rtype, &rcount) )
 *             source = rsts.MPI_SOURCE; tag = rsts.MPI_TAG
 *         tmpr = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *         with nogil:
 *             CHKERR( MPI_Recv(rbuf, rcount, rtype,
 */
          __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 288, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_v_tmpr = __pyx_t_1;
          __pyx_t_1 = 0;

          /* "mpi4py/MPI/msgpickle.pxi":289
 *             source = rsts.MPI_SOURCE; tag = rsts.MPI_TAG
 *         tmpr = pickle.alloc(&rbuf, rcount)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Recv(rbuf, rcount, rtype,
 *                              source, tag, comm, status) )
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":290
 *         tmpr = pickle.alloc(&rbuf, rcount)
 *         with nogil:
 *             CHKERR( MPI_Recv(rbuf, rcount, rtype,             # <<<<<<<<<<<<<<
 *                              source, tag, comm, status) )
 *     #
 */
                __pyx_t_9 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Recv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_status)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(6, 290, __pyx_L17_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":289
 *             source = rsts.MPI_SOURCE; tag = rsts.MPI_TAG
 *         tmpr = pickle.alloc(&rbuf, rcount)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Recv(rbuf, rcount, rtype,
 *                              source, tag, comm, status) )
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L18;
                }
                __pyx_L17_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L7_error;
                }
                __pyx_L18:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":283
 *     <void>obj # unused
 *     #
 *     with PyMPI_Lock(comm, "recv"):             # <<<<<<<<<<<<<<
 *         with nogil:
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_recv_probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(6, 283, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 283, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 283, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(6, 283, __pyx_L9_except_error)
          __pyx_t_12 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_4);
            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; 
            __PYX_ERR(6, 283, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 283, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L22;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L22:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":293
 *                              source, tag, comm, status) )
 *     #
 *     if rcount <= 0: return None             # <<<<<<<<<<<<<<
 *     return pickle.load(rbuf, rcount)
 * 
 */
  __pyx_t_12 = ((__pyx_v_rcount <= 0) != 0);
  if (__pyx_t_12) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":294
 *     #
 *     if rcount <= 0: return None
 *     return pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":271
 * 
 * 
 * cdef object PyMPI_recv_probe(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_recv_probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmpr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":297
 * 
 * 
 * cdef object PyMPI_recv(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                        MPI_Comm comm, MPI_Status *status):
 *     if obj is not None:
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv(PyObject *__pyx_v_obj, int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_recv", 0);

  /* "mpi4py/MPI/msgpickle.pxi":299
 * cdef object PyMPI_recv(object obj, int source, int tag,
 *                        MPI_Comm comm, MPI_Status *status):
 *     if obj is not None:             # <<<<<<<<<<<<<<
 *         return PyMPI_recv_obarg(obj, source, tag, comm, status)
 *     elif options.recv_mprobe:
 */
  __pyx_t_1 = (__pyx_v_obj != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":300
 *                        MPI_Comm comm, MPI_Status *status):
 *     if obj is not None:
 *         return PyMPI_recv_obarg(obj, source, tag, comm, status)             # <<<<<<<<<<<<<<
 *     elif options.recv_mprobe:
 *         return PyMPI_recv_match(obj, source, tag, comm, status)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_recv_obarg(__pyx_v_obj, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_status); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":299
 * cdef object PyMPI_recv(object obj, int source, int tag,
 *                        MPI_Comm comm, MPI_Status *status):
 *     if obj is not None:             # <<<<<<<<<<<<<<
 *         return PyMPI_recv_obarg(obj, source, tag, comm, status)
 *     elif options.recv_mprobe:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":301
 *     if obj is not None:
 *         return PyMPI_recv_obarg(obj, source, tag, comm, status)
 *     elif options.recv_mprobe:             # <<<<<<<<<<<<<<
 *         return PyMPI_recv_match(obj, source, tag, comm, status)
 *     else:
 */
  __pyx_t_2 = (__pyx_v_6mpi4py_3MPI_options.recv_mprobe != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":302
 *         return PyMPI_recv_obarg(obj, source, tag, comm, status)
 *     elif options.recv_mprobe:
 *         return PyMPI_recv_match(obj, source, tag, comm, status)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMPI_recv_probe(obj, source, tag, comm, status)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_recv_match(__pyx_v_obj, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_status); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":301
 *     if obj is not None:
 *         return PyMPI_recv_obarg(obj, source, tag, comm, status)
 *     elif options.recv_mprobe:             # <<<<<<<<<<<<<<
 *         return PyMPI_recv_match(obj, source, tag, comm, status)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":304
 *         return PyMPI_recv_match(obj, source, tag, comm, status)
 *     else:
 *         return PyMPI_recv_probe(obj, source, tag, comm, status)             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_recv_probe(__pyx_v_obj, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_status); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":297
 * 
 * 
 * cdef object PyMPI_recv(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                        MPI_Comm comm, MPI_Status *status):
 *     if obj is not None:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":308
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_isend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_isend(PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Request *__pyx_v_request) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  PyObject *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_isend", 0);

  /* "mpi4py/MPI/msgpickle.pxi":310
 * cdef object PyMPI_isend(object obj, int dest, int tag,
 *                         MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":312
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":313
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":314
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object smsg = None
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":316
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 *     cdef object smsg = None             # <<<<<<<<<<<<<<
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_smsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":317
 *     #
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":318
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,
 *                                   dest, tag, comm, request) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 318, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_smsg, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":317
 *     #
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":319
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                   dest, tag, comm, request) )
 *     return smsg
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":320
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,
 *                                   dest, tag, comm, request) )             # <<<<<<<<<<<<<<
 *     return smsg
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Isend(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm, __pyx_v_request)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 319, __pyx_L5_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":319
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                   dest, tag, comm, request) )
 *     return smsg
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":321
 *     with nogil: CHKERR( MPI_Isend(sbuf, scount, stype,
 *                                   dest, tag, comm, request) )
 *     return smsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_smsg);
  __pyx_r = __pyx_v_smsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":308
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_isend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_isend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":324
 * 
 * 
 * cdef object PyMPI_ibsend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                          MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_ibsend(PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Request *__pyx_v_request) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  PyObject *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_ibsend", 0);

  /* "mpi4py/MPI/msgpickle.pxi":326
 * cdef object PyMPI_ibsend(object obj, int dest, int tag,
 *                          MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":328
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":329
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":330
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object smsg = None
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":332
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 *     cdef object smsg = None             # <<<<<<<<<<<<<<
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_smsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":333
 *     #
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":334
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,
 *                                    dest, tag, comm, request) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_smsg, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":333
 *     #
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":335
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                    dest, tag, comm, request) )
 *     return smsg
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":336
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,
 *                                    dest, tag, comm, request) )             # <<<<<<<<<<<<<<
 *     return smsg
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ibsend(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm, __pyx_v_request)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 335, __pyx_L5_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":335
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                    dest, tag, comm, request) )
 *     return smsg
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":337
 *     with nogil: CHKERR( MPI_Ibsend(sbuf, scount, stype,
 *                                    dest, tag, comm, request) )
 *     return smsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_smsg);
  __pyx_r = __pyx_v_smsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":324
 * 
 * 
 * cdef object PyMPI_ibsend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                          MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_ibsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":340
 * 
 * 
 * cdef object PyMPI_issend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                          MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_issend(PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Request *__pyx_v_request) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  PyObject *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_issend", 0);

  /* "mpi4py/MPI/msgpickle.pxi":342
 * cdef object PyMPI_issend(object obj, int dest, int tag,
 *                          MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":344
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":345
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":346
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object smsg = None
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":348
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     #
 *     cdef object smsg = None             # <<<<<<<<<<<<<<
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_smsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":349
 *     #
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":350
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,
 *                                    dest, tag, comm, request) )
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_smsg, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":349
 *     #
 *     cdef object smsg = None
 *     if dest != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":351
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                    dest, tag, comm, request) )
 *     return smsg
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":352
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,
 *                                    dest, tag, comm, request) )             # <<<<<<<<<<<<<<
 *     return smsg
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Issend(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm, __pyx_v_request)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 351, __pyx_L5_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":351
 *     if dest != MPI_PROC_NULL:
 *         smsg = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,             # <<<<<<<<<<<<<<
 *                                    dest, tag, comm, request) )
 *     return smsg
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":353
 *     with nogil: CHKERR( MPI_Issend(sbuf, scount, stype,
 *                                    dest, tag, comm, request) )
 *     return smsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_smsg);
  __pyx_r = __pyx_v_smsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":340
 * 
 * 
 * cdef object PyMPI_issend(object obj, int dest, int tag,             # <<<<<<<<<<<<<<
 *                          MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_issend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":356
 * 
 * 
 * cdef object PyMPI_irecv(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_irecv(PyObject *__pyx_v_obj, int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Request *__pyx_v_request) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  MPI_Aint __pyx_v_rlen;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  PyObject *__pyx_v_rmsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("PyMPI_irecv", 0);
  __Pyx_INCREF(__pyx_v_obj);

  /* "mpi4py/MPI/msgpickle.pxi":358
 * cdef object PyMPI_irecv(object obj, int source, int tag,
 *                         MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *rbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":360
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint rlen = 0
 *     cdef int rcount = 0
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":361
 *     #
 *     cdef void *rbuf = NULL
 *     cdef MPI_Aint rlen = 0             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rlen = 0;

  /* "mpi4py/MPI/msgpickle.pxi":362
 *     cdef void *rbuf = NULL
 *     cdef MPI_Aint rlen = 0
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":363
 *     cdef MPI_Aint rlen = 0
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef object rmsg = None
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":365
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     if source != MPI_PROC_NULL:
 *         if obj is None:
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":366
 *     #
 *     cdef object rmsg = None
 *     if source != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         if obj is None:
 *             rcount = <int>(1<<15)
 */
  __pyx_t_1 = ((__pyx_v_source != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":367
 *     cdef object rmsg = None
 *     if source != MPI_PROC_NULL:
 *         if obj is None:             # <<<<<<<<<<<<<<
 *             rcount = <int>(1<<15)
 *             obj = pickle.alloc(&rbuf, rcount)
 */
    __pyx_t_1 = (__pyx_v_obj == Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":368
 *     if source != MPI_PROC_NULL:
 *         if obj is None:
 *             rcount = <int>(1<<15)             # <<<<<<<<<<<<<<
 *             obj = pickle.alloc(&rbuf, rcount)
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 */
      __pyx_v_rcount = ((int)0x8000);

      /* "mpi4py/MPI/msgpickle.pxi":369
 *         if obj is None:
 *             rcount = <int>(1<<15)
 *             obj = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 *         elif is_integral(obj):
 */
      __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":370
 *             rcount = <int>(1<<15)
 *             obj = pickle.alloc(&rbuf, rcount)
 *             rmsg = getbuffer_r(obj, NULL, NULL)             # <<<<<<<<<<<<<<
 *         elif is_integral(obj):
 *             rcount = <int> obj
 */
      __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_obj, NULL, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":367
 *     cdef object rmsg = None
 *     if source != MPI_PROC_NULL:
 *         if obj is None:             # <<<<<<<<<<<<<<
 *             rcount = <int>(1<<15)
 *             obj = pickle.alloc(&rbuf, rcount)
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":371
 *             obj = pickle.alloc(&rbuf, rcount)
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 *         elif is_integral(obj):             # <<<<<<<<<<<<<<
 *             rcount = <int> obj
 *             obj = pickle.alloc(&rbuf, rcount)
 */
    __pyx_t_2 = (__pyx_f_6mpi4py_3MPI_is_integral(__pyx_v_obj) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":372
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 *         elif is_integral(obj):
 *             rcount = <int> obj             # <<<<<<<<<<<<<<
 *             obj = pickle.alloc(&rbuf, rcount)
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 */
      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_obj); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(6, 372, __pyx_L1_error)
      __pyx_v_rcount = ((int)__pyx_t_4);

      /* "mpi4py/MPI/msgpickle.pxi":373
 *         elif is_integral(obj):
 *             rcount = <int> obj
 *             obj = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 *         else:
 */
      __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":374
 *             rcount = <int> obj
 *             obj = pickle.alloc(&rbuf, rcount)
 *             rmsg = getbuffer_r(obj, NULL, NULL)             # <<<<<<<<<<<<<<
 *         else:
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 */
      __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_obj, NULL, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 374, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":371
 *             obj = pickle.alloc(&rbuf, rcount)
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 *         elif is_integral(obj):             # <<<<<<<<<<<<<<
 *             rcount = <int> obj
 *             obj = pickle.alloc(&rbuf, rcount)
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":376
 *             rmsg = getbuffer_r(obj, NULL, NULL)
 *         else:
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)             # <<<<<<<<<<<<<<
 *             rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Irecv(rbuf, rcount, rtype,
 */
    /*else*/ {
      __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_obj, (&__pyx_v_rbuf), (&__pyx_v_rlen))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 376, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":377
 *         else:
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 *             rcount = clipcount(rlen)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Irecv(rbuf, rcount, rtype,
 *                                   source, tag, comm, request) )
 */
      __pyx_v_rcount = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_rlen);
    }
    __pyx_L4:;

    /* "mpi4py/MPI/msgpickle.pxi":366
 *     #
 *     cdef object rmsg = None
 *     if source != MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *         if obj is None:
 *             rcount = <int>(1<<15)
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":378
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 *             rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Irecv(rbuf, rcount, rtype,             # <<<<<<<<<<<<<<
 *                                   source, tag, comm, request) )
 *     return rmsg
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":379
 *             rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Irecv(rbuf, rcount, rtype,
 *                                   source, tag, comm, request) )             # <<<<<<<<<<<<<<
 *     return rmsg
 * 
 */
        __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Irecv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_request)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 378, __pyx_L6_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":378
 *             rmsg = getbuffer_w(obj, &rbuf, &rlen)
 *             rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Irecv(rbuf, rcount, rtype,             # <<<<<<<<<<<<<<
 *                                   source, tag, comm, request) )
 *     return rmsg
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":380
 *     with nogil: CHKERR( MPI_Irecv(rbuf, rcount, rtype,
 *                                   source, tag, comm, request) )
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":356
 * 
 * 
 * cdef object PyMPI_irecv(object obj, int source, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm, MPI_Request *request):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":384
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_sendrecv(object sobj, int dest,   int sendtag,             # <<<<<<<<<<<<<<
 *                            object robj, int source, int recvtag,
 *                            MPI_Comm comm, MPI_Status *status):
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_sendrecv(PyObject *__pyx_v_sobj, int __pyx_v_dest, int __pyx_v_sendtag, PyObject *__pyx_v_robj, int __pyx_v_source, int __pyx_v_recvtag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  MPI_Request __pyx_v_request;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("PyMPI_sendrecv", 0);
  __Pyx_INCREF(__pyx_v_sobj);
  __Pyx_INCREF(__pyx_v_robj);

  /* "mpi4py/MPI/msgpickle.pxi":387
 *                            object robj, int source, int recvtag,
 *                            MPI_Comm comm, MPI_Status *status):
 *     cdef MPI_Request request = MPI_REQUEST_NULL             # <<<<<<<<<<<<<<
 *     sobj = PyMPI_isend(sobj, dest,   sendtag, comm, &request)
 *     robj = PyMPI_recv (robj, source, recvtag, comm, status)
 */
  __pyx_v_request = MPI_REQUEST_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":388
 *                            MPI_Comm comm, MPI_Status *status):
 *     cdef MPI_Request request = MPI_REQUEST_NULL
 *     sobj = PyMPI_isend(sobj, dest,   sendtag, comm, &request)             # <<<<<<<<<<<<<<
 *     robj = PyMPI_recv (robj, source, recvtag, comm, status)
 *     with nogil: CHKERR( MPI_Wait(&request, MPI_STATUS_IGNORE) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_isend(__pyx_v_sobj, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_comm, (&__pyx_v_request)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_sobj, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":389
 *     cdef MPI_Request request = MPI_REQUEST_NULL
 *     sobj = PyMPI_isend(sobj, dest,   sendtag, comm, &request)
 *     robj = PyMPI_recv (robj, source, recvtag, comm, status)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Wait(&request, MPI_STATUS_IGNORE) )
 *     return robj
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_recv(__pyx_v_robj, __pyx_v_source, __pyx_v_recvtag, __pyx_v_comm, __pyx_v_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_robj, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":390
 *     sobj = PyMPI_isend(sobj, dest,   sendtag, comm, &request)
 *     robj = PyMPI_recv (robj, source, recvtag, comm, status)
 *     with nogil: CHKERR( MPI_Wait(&request, MPI_STATUS_IGNORE) )             # <<<<<<<<<<<<<<
 *     return robj
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Wait((&__pyx_v_request), MPI_STATUS_IGNORE)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 390, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":391
 *     robj = PyMPI_recv (robj, source, recvtag, comm, status)
 *     with nogil: CHKERR( MPI_Wait(&request, MPI_STATUS_IGNORE) )
 *     return robj             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_robj);
  __pyx_r = __pyx_v_robj;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":384
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_sendrecv(object sobj, int dest,   int sendtag,             # <<<<<<<<<<<<<<
 *                            object robj, int source, int recvtag,
 *                            MPI_Comm comm, MPI_Status *status):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_sendrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sobj);
  __Pyx_XDECREF(__pyx_v_robj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":395
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_load(MPI_Status *status, object ob):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_load(MPI_Status *__pyx_v_status, PyObject *__pyx_v_ob) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_load", 0);
  __Pyx_INCREF(__pyx_v_ob);

  /* "mpi4py/MPI/msgpickle.pxi":396
 * 
 * cdef object PyMPI_load(MPI_Status *status, object ob):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":397
 * cdef object PyMPI_load(MPI_Status *status, object ob):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":398
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if type(ob) is not memory: return None
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":399
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     if type(ob) is not memory: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":400
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if type(ob) is not memory: return None             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     if rcount <= 0: return None
 */
  __pyx_t_1 = (((PyObject *)Py_TYPE(__pyx_v_ob)) != ((PyObject *)__pyx_ptype_6mpi4py_3MPI_memory));
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":401
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if type(ob) is not memory: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )             # <<<<<<<<<<<<<<
 *     if rcount <= 0: return None
 *     ob = asmemory(ob, &rbuf, NULL)
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count(__pyx_v_status, __pyx_v_rtype, (&__pyx_v_rcount))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 401, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":402
 *     if type(ob) is not memory: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     if rcount <= 0: return None             # <<<<<<<<<<<<<<
 *     ob = asmemory(ob, &rbuf, NULL)
 *     return pickle.load(rbuf, rcount)
 */
  __pyx_t_2 = ((__pyx_v_rcount <= 0) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":403
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     if rcount <= 0: return None
 *     ob = asmemory(ob, &rbuf, NULL)             # <<<<<<<<<<<<<<
 *     return pickle.load(rbuf, rcount)
 * 
 */
  __pyx_t_4 = ((PyObject *)__pyx_f_6mpi4py_3MPI_asmemory(__pyx_v_ob, (&__pyx_v_rbuf), NULL)); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF_SET(__pyx_v_ob, __pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":404
 *     if rcount <= 0: return None
 *     ob = asmemory(ob, &rbuf, NULL)
 *     return pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":395
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_load(MPI_Status *status, object ob):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_load", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_ob);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":407
 * 
 * 
 * cdef object PyMPI_wait(Request request, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_wait(struct PyMPIRequestObject *__pyx_v_request, struct PyMPIStatusObject *__pyx_v_status) {
  PyObject *__pyx_v_buf = 0;
  MPI_Status __pyx_v_rsts;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("PyMPI_wait", 0);

  /* "mpi4py/MPI/msgpickle.pxi":411
 *     #
 *     cdef MPI_Status rsts
 *     with nogil: CHKERR( MPI_Wait(&request.ob_mpi, &rsts) )             # <<<<<<<<<<<<<<
 *     buf = request.ob_buf
 *     if status is not None:
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Wait((&__pyx_v_request->ob_mpi), (&__pyx_v_rsts))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 411, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":412
 *     cdef MPI_Status rsts
 *     with nogil: CHKERR( MPI_Wait(&request.ob_mpi, &rsts) )
 *     buf = request.ob_buf             # <<<<<<<<<<<<<<
 *     if status is not None:
 *         status.ob_mpi = rsts
 */
  __pyx_t_2 = __pyx_v_request->ob_buf;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_buf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":413
 *     with nogil: CHKERR( MPI_Wait(&request.ob_mpi, &rsts) )
 *     buf = request.ob_buf
 *     if status is not None:             # <<<<<<<<<<<<<<
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_status) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/msgpickle.pxi":414
 *     buf = request.ob_buf
 *     if status is not None:
 *         status.ob_mpi = rsts             # <<<<<<<<<<<<<<
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 *         request.ob_buf = None
 */
    __pyx_v_status->ob_mpi = __pyx_v_rsts;

    /* "mpi4py/MPI/msgpickle.pxi":413
 *     with nogil: CHKERR( MPI_Wait(&request.ob_mpi, &rsts) )
 *     buf = request.ob_buf
 *     if status is not None:             # <<<<<<<<<<<<<<
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":415
 *     if status is not None:
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *         request.ob_buf = None
 *     #
 */
  __pyx_t_4 = ((__pyx_v_request->ob_mpi == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/msgpickle.pxi":416
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 *         request.ob_buf = None             # <<<<<<<<<<<<<<
 *     #
 *     return PyMPI_load(&rsts, buf)
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_request->ob_buf);
    __Pyx_DECREF(__pyx_v_request->ob_buf);
    __pyx_v_request->ob_buf = Py_None;

    /* "mpi4py/MPI/msgpickle.pxi":415
 *     if status is not None:
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *         request.ob_buf = None
 *     #
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":418
 *         request.ob_buf = None
 *     #
 *     return PyMPI_load(&rsts, buf)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_load((&__pyx_v_rsts), __pyx_v_buf); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":407
 * 
 * 
 * cdef object PyMPI_wait(Request request, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":421
 * 
 * 
 * cdef object PyMPI_test(Request request, int *flag, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf = None
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_test(struct PyMPIRequestObject *__pyx_v_request, int *__pyx_v_flag, struct PyMPIStatusObject *__pyx_v_status) {
  PyObject *__pyx_v_buf = 0;
  MPI_Status __pyx_v_rsts;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("PyMPI_test", 0);

  /* "mpi4py/MPI/msgpickle.pxi":422
 * 
 * cdef object PyMPI_test(Request request, int *flag, Status status):
 *     cdef object buf = None             # <<<<<<<<<<<<<<
 *     #
 *     cdef MPI_Status rsts
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_buf = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":425
 *     #
 *     cdef MPI_Status rsts
 *     with nogil: CHKERR( MPI_Test(&request.ob_mpi, flag, &rsts) )             # <<<<<<<<<<<<<<
 *     if flag[0]:
 *         buf = request.ob_buf
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Test((&__pyx_v_request->ob_mpi), __pyx_v_flag, (&__pyx_v_rsts))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 425, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":426
 *     cdef MPI_Status rsts
 *     with nogil: CHKERR( MPI_Test(&request.ob_mpi, flag, &rsts) )
 *     if flag[0]:             # <<<<<<<<<<<<<<
 *         buf = request.ob_buf
 *     if status is not None:
 */
  __pyx_t_2 = ((__pyx_v_flag[0]) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":427
 *     with nogil: CHKERR( MPI_Test(&request.ob_mpi, flag, &rsts) )
 *     if flag[0]:
 *         buf = request.ob_buf             # <<<<<<<<<<<<<<
 *     if status is not None:
 *         status.ob_mpi = rsts
 */
    __pyx_t_3 = __pyx_v_request->ob_buf;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":426
 *     cdef MPI_Status rsts
 *     with nogil: CHKERR( MPI_Test(&request.ob_mpi, flag, &rsts) )
 *     if flag[0]:             # <<<<<<<<<<<<<<
 *         buf = request.ob_buf
 *     if status is not None:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":428
 *     if flag[0]:
 *         buf = request.ob_buf
 *     if status is not None:             # <<<<<<<<<<<<<<
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_status) != Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/msgpickle.pxi":429
 *         buf = request.ob_buf
 *     if status is not None:
 *         status.ob_mpi = rsts             # <<<<<<<<<<<<<<
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 *         request.ob_buf = None
 */
    __pyx_v_status->ob_mpi = __pyx_v_rsts;

    /* "mpi4py/MPI/msgpickle.pxi":428
 *     if flag[0]:
 *         buf = request.ob_buf
 *     if status is not None:             # <<<<<<<<<<<<<<
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":430
 *     if status is not None:
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *         request.ob_buf = None
 *     #
 */
  __pyx_t_4 = ((__pyx_v_request->ob_mpi == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/msgpickle.pxi":431
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:
 *         request.ob_buf = None             # <<<<<<<<<<<<<<
 *     #
 *     if not flag[0]: return None
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_request->ob_buf);
    __Pyx_DECREF(__pyx_v_request->ob_buf);
    __pyx_v_request->ob_buf = Py_None;

    /* "mpi4py/MPI/msgpickle.pxi":430
 *     if status is not None:
 *         status.ob_mpi = rsts
 *     if request.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *         request.ob_buf = None
 *     #
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":433
 *         request.ob_buf = None
 *     #
 *     if not flag[0]: return None             # <<<<<<<<<<<<<<
 *     return PyMPI_load(&rsts, buf)
 * 
 */
  __pyx_t_4 = ((!((__pyx_v_flag[0]) != 0)) != 0);
  if (__pyx_t_4) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":434
 *     #
 *     if not flag[0]: return None
 *     return PyMPI_load(&rsts, buf)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_load((&__pyx_v_rsts), __pyx_v_buf); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":421
 * 
 * 
 * cdef object PyMPI_test(Request request, int *flag, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf = None
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":437
 * 
 * 
 * cdef object PyMPI_waitany(requests, int *index, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf = None
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_waitany(PyObject *__pyx_v_requests, int *__pyx_v_index, struct PyMPIStatusObject *__pyx_v_status) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  MPI_Status __pyx_v_rsts;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_t_14;
  __Pyx_RefNannySetupContext("PyMPI_waitany", 0);

  /* "mpi4py/MPI/msgpickle.pxi":438
 * 
 * cdef object PyMPI_waitany(requests, int *index, Status status):
 *     cdef object buf = None             # <<<<<<<<<<<<<<
 *     #
 *     cdef int count = 0
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_buf = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":440
 *     cdef object buf = None
 *     #
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Request *irequests = NULL
 *     cdef MPI_Status rsts
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":441
 *     #
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Status rsts
 *     #
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":444
 *     cdef MPI_Status rsts
 *     #
 *     cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)             # <<<<<<<<<<<<<<
 *     try:
 *         with nogil: CHKERR( MPI_Waitany(count, irequests, index, &rsts) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_None, (&__pyx_v_count), (&__pyx_v_irequests), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":445
 *     #
 *     cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *     try:             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Waitany(count, irequests, index, &rsts) )
 *         if index[0] != MPI_UNDEFINED:
 */
  /*try:*/ {

    /* "mpi4py/MPI/msgpickle.pxi":446
 *     cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *     try:
 *         with nogil: CHKERR( MPI_Waitany(count, irequests, index, &rsts) )             # <<<<<<<<<<<<<<
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Waitany(__pyx_v_count, __pyx_v_irequests, __pyx_v_index, (&__pyx_v_rsts))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 446, __pyx_L7_error)
        }
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }

    /* "mpi4py/MPI/msgpickle.pxi":447
 *     try:
 *         with nogil: CHKERR( MPI_Waitany(count, irequests, index, &rsts) )
 *         if index[0] != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:
 */
    __pyx_t_3 = (((__pyx_v_index[0]) != MPI_UNDEFINED) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgpickle.pxi":448
 *         with nogil: CHKERR( MPI_Waitany(count, irequests, index, &rsts) )
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf             # <<<<<<<<<<<<<<
 *         if status is not None:
 *             status.ob_mpi = rsts
 */
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_requests, (__pyx_v_index[0]), int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 448, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = ((struct PyMPIRequestObject *)__pyx_t_1)->ob_buf;
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":447
 *     try:
 *         with nogil: CHKERR( MPI_Waitany(count, irequests, index, &rsts) )
 *         if index[0] != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":449
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:             # <<<<<<<<<<<<<<
 *             status.ob_mpi = rsts
 *     finally:
 */
    __pyx_t_3 = (((PyObject *)__pyx_v_status) != Py_None);
    __pyx_t_5 = (__pyx_t_3 != 0);
    if (__pyx_t_5) {

      /* "mpi4py/MPI/msgpickle.pxi":450
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:
 *             status.ob_mpi = rsts             # <<<<<<<<<<<<<<
 *     finally:
 *         release_rs(requests, None, count, irequests, NULL)
 */
      __pyx_v_status->ob_mpi = __pyx_v_rsts;

      /* "mpi4py/MPI/msgpickle.pxi":449
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:             # <<<<<<<<<<<<<<
 *             status.ob_mpi = rsts
 *     finally:
 */
    }
  }

  /* "mpi4py/MPI/msgpickle.pxi":452
 *             status.ob_mpi = rsts
 *     finally:
 *         release_rs(requests, None, count, irequests, NULL)             # <<<<<<<<<<<<<<
 *     #
 *     if index[0] == MPI_UNDEFINED: return None
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 452, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_2 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_t_14 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(6, 452, __pyx_L12_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L12_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":454
 *         release_rs(requests, None, count, irequests, NULL)
 *     #
 *     if index[0] == MPI_UNDEFINED: return None             # <<<<<<<<<<<<<<
 *     return PyMPI_load(&rsts, buf)
 * 
 */
  __pyx_t_5 = (((__pyx_v_index[0]) == MPI_UNDEFINED) != 0);
  if (__pyx_t_5) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":455
 *     #
 *     if index[0] == MPI_UNDEFINED: return None
 *     return PyMPI_load(&rsts, buf)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_load((&__pyx_v_rsts), __pyx_v_buf); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":437
 * 
 * 
 * cdef object PyMPI_waitany(requests, int *index, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf = None
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_waitany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":458
 * 
 * 
 * cdef object PyMPI_testany(requests, int *index, int *flag, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf = None
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_testany(PyObject *__pyx_v_requests, int *__pyx_v_index, int *__pyx_v_flag, struct PyMPIStatusObject *__pyx_v_status) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  MPI_Status __pyx_v_rsts;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_t_14;
  __Pyx_RefNannySetupContext("PyMPI_testany", 0);

  /* "mpi4py/MPI/msgpickle.pxi":459
 * 
 * cdef object PyMPI_testany(requests, int *index, int *flag, Status status):
 *     cdef object buf = None             # <<<<<<<<<<<<<<
 *     #
 *     cdef int count = 0
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_buf = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":461
 *     cdef object buf = None
 *     #
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Request *irequests = NULL
 *     cdef MPI_Status rsts
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":462
 *     #
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Status rsts
 *     #
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":465
 *     cdef MPI_Status rsts
 *     #
 *     cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)             # <<<<<<<<<<<<<<
 *     try:
 *         with nogil: CHKERR( MPI_Testany(count, irequests, index, flag, &rsts) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_None, (&__pyx_v_count), (&__pyx_v_irequests), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 465, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":466
 *     #
 *     cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *     try:             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Testany(count, irequests, index, flag, &rsts) )
 *         if index[0] != MPI_UNDEFINED:
 */
  /*try:*/ {

    /* "mpi4py/MPI/msgpickle.pxi":467
 *     cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *     try:
 *         with nogil: CHKERR( MPI_Testany(count, irequests, index, flag, &rsts) )             # <<<<<<<<<<<<<<
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Testany(__pyx_v_count, __pyx_v_irequests, __pyx_v_index, __pyx_v_flag, (&__pyx_v_rsts))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 467, __pyx_L7_error)
        }
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }

    /* "mpi4py/MPI/msgpickle.pxi":468
 *     try:
 *         with nogil: CHKERR( MPI_Testany(count, irequests, index, flag, &rsts) )
 *         if index[0] != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:
 */
    __pyx_t_3 = (((__pyx_v_index[0]) != MPI_UNDEFINED) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgpickle.pxi":469
 *         with nogil: CHKERR( MPI_Testany(count, irequests, index, flag, &rsts) )
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf             # <<<<<<<<<<<<<<
 *         if status is not None:
 *             status.ob_mpi = rsts
 */
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_requests, (__pyx_v_index[0]), int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 469, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = ((struct PyMPIRequestObject *)__pyx_t_1)->ob_buf;
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":468
 *     try:
 *         with nogil: CHKERR( MPI_Testany(count, irequests, index, flag, &rsts) )
 *         if index[0] != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":470
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:             # <<<<<<<<<<<<<<
 *             status.ob_mpi = rsts
 *     finally:
 */
    __pyx_t_3 = (((PyObject *)__pyx_v_status) != Py_None);
    __pyx_t_5 = (__pyx_t_3 != 0);
    if (__pyx_t_5) {

      /* "mpi4py/MPI/msgpickle.pxi":471
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:
 *             status.ob_mpi = rsts             # <<<<<<<<<<<<<<
 *     finally:
 *         release_rs(requests, None, count, irequests, NULL)
 */
      __pyx_v_status->ob_mpi = __pyx_v_rsts;

      /* "mpi4py/MPI/msgpickle.pxi":470
 *         if index[0] != MPI_UNDEFINED:
 *             buf = (<Request>requests[index[0]]).ob_buf
 *         if status is not None:             # <<<<<<<<<<<<<<
 *             status.ob_mpi = rsts
 *     finally:
 */
    }
  }

  /* "mpi4py/MPI/msgpickle.pxi":473
 *             status.ob_mpi = rsts
 *     finally:
 *         release_rs(requests, None, count, irequests, NULL)             # <<<<<<<<<<<<<<
 *     #
 *     if index[0] == MPI_UNDEFINED: return None
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 473, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_2 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_t_14 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(6, 473, __pyx_L12_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L12_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":475
 *         release_rs(requests, None, count, irequests, NULL)
 *     #
 *     if index[0] == MPI_UNDEFINED: return None             # <<<<<<<<<<<<<<
 *     if not flag[0]: return None
 *     return PyMPI_load(&rsts, buf)
 */
  __pyx_t_5 = (((__pyx_v_index[0]) == MPI_UNDEFINED) != 0);
  if (__pyx_t_5) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":476
 *     #
 *     if index[0] == MPI_UNDEFINED: return None
 *     if not flag[0]: return None             # <<<<<<<<<<<<<<
 *     return PyMPI_load(&rsts, buf)
 * 
 */
  __pyx_t_5 = ((!((__pyx_v_flag[0]) != 0)) != 0);
  if (__pyx_t_5) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":477
 *     if index[0] == MPI_UNDEFINED: return None
 *     if not flag[0]: return None
 *     return PyMPI_load(&rsts, buf)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_load((&__pyx_v_rsts), __pyx_v_buf); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":458
 * 
 * 
 * cdef object PyMPI_testany(requests, int *index, int *flag, Status status):             # <<<<<<<<<<<<<<
 *     cdef object buf = None
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_testany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_buf);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":480
 * 
 * 
 * cdef object PyMPI_waitall(requests, statuses):             # <<<<<<<<<<<<<<
 *     cdef object bufs = None
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_waitall(PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  PyObject *__pyx_v_bufs = 0;
  Py_ssize_t __pyx_v_i;
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  MPI_Status *__pyx_v_istatuses;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  char const *__pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_waitall", 0);

  /* "mpi4py/MPI/msgpickle.pxi":481
 * 
 * cdef object PyMPI_waitall(requests, statuses):
 *     cdef object bufs = None             # <<<<<<<<<<<<<<
 *     #
 *     cdef Py_ssize_t i = 0
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_bufs = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":483
 *     cdef object bufs = None
 *     #
 *     cdef Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/msgpickle.pxi":484
 *     #
 *     cdef Py_ssize_t i = 0
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Request *irequests = NULL
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":485
 *     cdef Py_ssize_t i = 0
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *     #
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":486
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE             # <<<<<<<<<<<<<<
 *     #
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)
 */
  __pyx_v_istatuses = MPI_STATUSES_IGNORE;

  /* "mpi4py/MPI/msgpickle.pxi":488
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *     #
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)             # <<<<<<<<<<<<<<
 *     try:
 *         with nogil: CHKERR( MPI_Waitall(count, irequests, istatuses) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_True, (&__pyx_v_count), (&__pyx_v_irequests), (&__pyx_v_istatuses)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":489
 *     #
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)
 *     try:             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Waitall(count, irequests, istatuses) )
 *         bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 */
  /*try:*/ {

    /* "mpi4py/MPI/msgpickle.pxi":490
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)
 *     try:
 *         with nogil: CHKERR( MPI_Waitall(count, irequests, istatuses) )             # <<<<<<<<<<<<<<
 *         bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 *     finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Waitall(__pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 490, __pyx_L7_error)
        }
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }

    /* "mpi4py/MPI/msgpickle.pxi":491
 *     try:
 *         with nogil: CHKERR( MPI_Waitall(count, irequests, istatuses) )
 *         bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]             # <<<<<<<<<<<<<<
 *     finally:
 *         release_rs(requests, statuses, count, irequests, istatuses)
 */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 491, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_count;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_requests, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 491, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)((struct PyMPIRequestObject *)__pyx_t_3)->ob_buf))) __PYX_ERR(6, 491, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_bufs, __pyx_t_1);
    __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":493
 *         bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 *     finally:
 *         release_rs(requests, statuses, count, irequests, istatuses)             # <<<<<<<<<<<<<<
 *     #
 *     return [PyMPI_load(&istatuses[i], bufs[i]) for i from 0 <= i < count]
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 493, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __pyx_t_2 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
      {
        __pyx_t_12 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(6, 493, __pyx_L12_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      }
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
      goto __pyx_L1_error;
      __pyx_L12_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":495
 *         release_rs(requests, statuses, count, irequests, istatuses)
 *     #
 *     return [PyMPI_load(&istatuses[i], bufs[i]) for i from 0 <= i < count]             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_v_count;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_4; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_bufs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 495, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_13 = __pyx_f_6mpi4py_3MPI_PyMPI_load((&(__pyx_v_istatuses[__pyx_v_i])), __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 495, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_13))) __PYX_ERR(6, 495, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":480
 * 
 * 
 * cdef object PyMPI_waitall(requests, statuses):             # <<<<<<<<<<<<<<
 *     cdef object bufs = None
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_waitall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bufs);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":498
 * 
 * 
 * cdef object PyMPI_testall(requests, int *flag, statuses):             # <<<<<<<<<<<<<<
 *     cdef object bufs = None
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_testall(PyObject *__pyx_v_requests, int *__pyx_v_flag, PyObject *__pyx_v_statuses) {
  PyObject *__pyx_v_bufs = 0;
  Py_ssize_t __pyx_v_i;
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  MPI_Status *__pyx_v_istatuses;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  char const *__pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  int __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_testall", 0);

  /* "mpi4py/MPI/msgpickle.pxi":499
 * 
 * cdef object PyMPI_testall(requests, int *flag, statuses):
 *     cdef object bufs = None             # <<<<<<<<<<<<<<
 *     #
 *     cdef Py_ssize_t i = 0
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_bufs = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":501
 *     cdef object bufs = None
 *     #
 *     cdef Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/msgpickle.pxi":502
 *     #
 *     cdef Py_ssize_t i = 0
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Request *irequests = NULL
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":503
 *     cdef Py_ssize_t i = 0
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *     #
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":504
 *     cdef int count = 0
 *     cdef MPI_Request *irequests = NULL
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE             # <<<<<<<<<<<<<<
 *     #
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)
 */
  __pyx_v_istatuses = MPI_STATUSES_IGNORE;

  /* "mpi4py/MPI/msgpickle.pxi":506
 *     cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *     #
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)             # <<<<<<<<<<<<<<
 *     try:
 *         with nogil: CHKERR( MPI_Testall(count, irequests, flag, istatuses) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_True, (&__pyx_v_count), (&__pyx_v_irequests), (&__pyx_v_istatuses)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":507
 *     #
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)
 *     try:             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Testall(count, irequests, flag, istatuses) )
 *         if flag[0]:
 */
  /*try:*/ {

    /* "mpi4py/MPI/msgpickle.pxi":508
 *     cdef tmp = acquire_rs(requests, True, &count, &irequests, &istatuses)
 *     try:
 *         with nogil: CHKERR( MPI_Testall(count, irequests, flag, istatuses) )             # <<<<<<<<<<<<<<
 *         if flag[0]:
 *             bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Testall(__pyx_v_count, __pyx_v_irequests, __pyx_v_flag, __pyx_v_istatuses)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 508, __pyx_L7_error)
        }
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }

    /* "mpi4py/MPI/msgpickle.pxi":509
 *     try:
 *         with nogil: CHKERR( MPI_Testall(count, irequests, flag, istatuses) )
 *         if flag[0]:             # <<<<<<<<<<<<<<
 *             bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 *     finally:
 */
    __pyx_t_3 = ((__pyx_v_flag[0]) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgpickle.pxi":510
 *         with nogil: CHKERR( MPI_Testall(count, irequests, flag, istatuses) )
 *         if flag[0]:
 *             bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]             # <<<<<<<<<<<<<<
 *     finally:
 *         release_rs(requests, statuses, count, irequests, istatuses)
 */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 510, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_v_count;
      for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_requests, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 510, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)((struct PyMPIRequestObject *)__pyx_t_4)->ob_buf))) __PYX_ERR(6, 510, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF_SET(__pyx_v_bufs, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":509
 *     try:
 *         with nogil: CHKERR( MPI_Testall(count, irequests, flag, istatuses) )
 *         if flag[0]:             # <<<<<<<<<<<<<<
 *             bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 *     finally:
 */
    }
  }

  /* "mpi4py/MPI/msgpickle.pxi":512
 *             bufs = [(<Request>requests[i]).ob_buf for i from 0 <= i < count]
 *     finally:
 *         release_rs(requests, statuses, count, irequests, istatuses)             # <<<<<<<<<<<<<<
 *     #
 *     if not flag[0]: return None
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 512, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __pyx_t_2 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
      {
        __pyx_t_13 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(6, 512, __pyx_L13_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      }
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
      goto __pyx_L1_error;
      __pyx_L13_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":514
 *         release_rs(requests, statuses, count, irequests, istatuses)
 *     #
 *     if not flag[0]: return None             # <<<<<<<<<<<<<<
 *     return [PyMPI_load(&istatuses[i], bufs[i]) for i from 0 <= i < count]
 * 
 */
  __pyx_t_3 = ((!((__pyx_v_flag[0]) != 0)) != 0);
  if (__pyx_t_3) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":515
 *     #
 *     if not flag[0]: return None
 *     return [PyMPI_load(&istatuses[i], bufs[i]) for i from 0 <= i < count]             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __pyx_v_count;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_bufs, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 515, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_14 = __pyx_f_6mpi4py_3MPI_PyMPI_load((&(__pyx_v_istatuses[__pyx_v_i])), __pyx_t_4); if (unlikely(!__pyx_t_14)) __PYX_ERR(6, 515, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_14))) __PYX_ERR(6, 515, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":498
 * 
 * 
 * cdef object PyMPI_testall(requests, int *flag, statuses):             # <<<<<<<<<<<<<<
 *     cdef object bufs = None
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_testall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_bufs);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":519
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_probe(int source, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm, MPI_Status *status):
 *     with nogil: CHKERR( MPI_Probe(source, tag, comm, status) )
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_probe(int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("PyMPI_probe", 0);

  /* "mpi4py/MPI/msgpickle.pxi":521
 * cdef object PyMPI_probe(int source, int tag,
 *                         MPI_Comm comm, MPI_Status *status):
 *     with nogil: CHKERR( MPI_Probe(source, tag, comm, status) )             # <<<<<<<<<<<<<<
 *     return True
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Probe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_status)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 521, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":522
 *                         MPI_Comm comm, MPI_Status *status):
 *     with nogil: CHKERR( MPI_Probe(source, tag, comm, status) )
 *     return True             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_iprobe(int source, int tag,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":519
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_probe(int source, int tag,             # <<<<<<<<<<<<<<
 *                         MPI_Comm comm, MPI_Status *status):
 *     with nogil: CHKERR( MPI_Probe(source, tag, comm, status) )
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":524
 *     return True
 * 
 * cdef object PyMPI_iprobe(int source, int tag,             # <<<<<<<<<<<<<<
 *                          MPI_Comm comm, MPI_Status *status):
 *     cdef int flag = 0
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_iprobe(int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Status *__pyx_v_status) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_iprobe", 0);

  /* "mpi4py/MPI/msgpickle.pxi":526
 * cdef object PyMPI_iprobe(int source, int tag,
 *                          MPI_Comm comm, MPI_Status *status):
 *     cdef int flag = 0             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Iprobe(source, tag, comm, &flag, status) )
 *     return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/msgpickle.pxi":527
 *                          MPI_Comm comm, MPI_Status *status):
 *     cdef int flag = 0
 *     with nogil: CHKERR( MPI_Iprobe(source, tag, comm, &flag, status) )             # <<<<<<<<<<<<<<
 *     return <bint>flag
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_flag), __pyx_v_status)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 527, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":528
 *     cdef int flag = 0
 *     with nogil: CHKERR( MPI_Iprobe(source, tag, comm, &flag, status) )
 *     return <bint>flag             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_mprobe(int source, int tag, MPI_Comm comm,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 528, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":524
 *     return True
 * 
 * cdef object PyMPI_iprobe(int source, int tag,             # <<<<<<<<<<<<<<
 *                          MPI_Comm comm, MPI_Status *status):
 *     cdef int flag = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":530
 *     return <bint>flag
 * 
 * cdef object PyMPI_mprobe(int source, int tag, MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                          MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_mprobe(int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, MPI_Message *__pyx_v_message, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  MPI_Status __pyx_v_rsts;
  PyObject *__pyx_v_rmsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_mprobe", 0);

  /* "mpi4py/MPI/msgpickle.pxi":532
 * cdef object PyMPI_mprobe(int source, int tag, MPI_Comm comm,
 *                          MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void* rbuf = NULL
 *     cdef int rcount = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":533
 *                          MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void* rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":534
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void* rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status rsts
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":535
 *     cdef void* rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef MPI_Status rsts
 *     if (status == MPI_STATUS_IGNORE): status = &rsts
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":537
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status rsts
 *     if (status == MPI_STATUS_IGNORE): status = &rsts             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Mprobe(source, tag, comm, message, status) )
 *     if message[0] == MPI_MESSAGE_NO_PROC: return None
 */
  __pyx_t_1 = ((__pyx_v_status == MPI_STATUS_IGNORE) != 0);
  if (__pyx_t_1) {
    __pyx_v_status = (&__pyx_v_rsts);
  }

  /* "mpi4py/MPI/msgpickle.pxi":538
 *     cdef MPI_Status rsts
 *     if (status == MPI_STATUS_IGNORE): status = &rsts
 *     with nogil: CHKERR( MPI_Mprobe(source, tag, comm, message, status) )             # <<<<<<<<<<<<<<
 *     if message[0] == MPI_MESSAGE_NO_PROC: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_message, __pyx_v_status)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 538, __pyx_L5_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":539
 *     if (status == MPI_STATUS_IGNORE): status = &rsts
 *     with nogil: CHKERR( MPI_Mprobe(source, tag, comm, message, status) )
 *     if message[0] == MPI_MESSAGE_NO_PROC: return None             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)
 */
  __pyx_t_1 = (((__pyx_v_message[0]) == MPI_MESSAGE_NO_PROC) != 0);
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":540
 *     with nogil: CHKERR( MPI_Mprobe(source, tag, comm, message, status) )
 *     if message[0] == MPI_MESSAGE_NO_PROC: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )             # <<<<<<<<<<<<<<
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)
 *     return rmsg
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count(__pyx_v_status, __pyx_v_rtype, (&__pyx_v_rcount))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 540, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":541
 *     if message[0] == MPI_MESSAGE_NO_PROC: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *     return rmsg
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_rmsg = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":542
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_improbe(int source, int tag, MPI_Comm comm, int *flag,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":530
 *     return <bint>flag
 * 
 * cdef object PyMPI_mprobe(int source, int tag, MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                          MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_mprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":544
 *     return rmsg
 * 
 * cdef object PyMPI_improbe(int source, int tag, MPI_Comm comm, int *flag,             # <<<<<<<<<<<<<<
 *                           MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_improbe(int __pyx_v_source, int __pyx_v_tag, MPI_Comm __pyx_v_comm, int *__pyx_v_flag, MPI_Message *__pyx_v_message, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  MPI_Status __pyx_v_rsts;
  PyObject *__pyx_v_rmsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_improbe", 0);

  /* "mpi4py/MPI/msgpickle.pxi":546
 * cdef object PyMPI_improbe(int source, int tag, MPI_Comm comm, int *flag,
 *                           MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void* rbuf = NULL
 *     cdef int rcount = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":547
 *                           MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void* rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":548
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void* rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status rsts
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":549
 *     cdef void* rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef MPI_Status rsts
 *     if (status == MPI_STATUS_IGNORE): status = &rsts
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":551
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status rsts
 *     if (status == MPI_STATUS_IGNORE): status = &rsts             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Improbe(source, tag, comm, flag, message, status) )
 *     if flag[0] == 0 or message[0] == MPI_MESSAGE_NO_PROC: return None
 */
  __pyx_t_1 = ((__pyx_v_status == MPI_STATUS_IGNORE) != 0);
  if (__pyx_t_1) {
    __pyx_v_status = (&__pyx_v_rsts);
  }

  /* "mpi4py/MPI/msgpickle.pxi":552
 *     cdef MPI_Status rsts
 *     if (status == MPI_STATUS_IGNORE): status = &rsts
 *     with nogil: CHKERR( MPI_Improbe(source, tag, comm, flag, message, status) )             # <<<<<<<<<<<<<<
 *     if flag[0] == 0 or message[0] == MPI_MESSAGE_NO_PROC: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Improbe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_flag, __pyx_v_message, __pyx_v_status)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 552, __pyx_L5_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":553
 *     if (status == MPI_STATUS_IGNORE): status = &rsts
 *     with nogil: CHKERR( MPI_Improbe(source, tag, comm, flag, message, status) )
 *     if flag[0] == 0 or message[0] == MPI_MESSAGE_NO_PROC: return None             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)
 */
  __pyx_t_3 = (((__pyx_v_flag[0]) == 0) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_3 = (((__pyx_v_message[0]) == MPI_MESSAGE_NO_PROC) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":554
 *     with nogil: CHKERR( MPI_Improbe(source, tag, comm, flag, message, status) )
 *     if flag[0] == 0 or message[0] == MPI_MESSAGE_NO_PROC: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )             # <<<<<<<<<<<<<<
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)
 *     return rmsg
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count(__pyx_v_status, __pyx_v_rtype, (&__pyx_v_rcount))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 554, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":555
 *     if flag[0] == 0 or message[0] == MPI_MESSAGE_NO_PROC: return None
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *     return rmsg
 * 
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_rmsg = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":556
 *     CHKERR( MPI_Get_count(status, rtype, &rcount) )
 *     cdef object rmsg = pickle.alloc(&rbuf, rcount)
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_mrecv(object rmsg,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":544
 *     return rmsg
 * 
 * cdef object PyMPI_improbe(int source, int tag, MPI_Comm comm, int *flag,             # <<<<<<<<<<<<<<
 *                           MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_improbe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":558
 *     return rmsg
 * 
 * cdef object PyMPI_mrecv(object rmsg,             # <<<<<<<<<<<<<<
 *                         MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_mrecv(PyObject *__pyx_v_rmsg, MPI_Message *__pyx_v_message, MPI_Status *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  MPI_Aint __pyx_v_rlen;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_rcount;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("PyMPI_mrecv", 0);
  __Pyx_INCREF(__pyx_v_rmsg);

  /* "mpi4py/MPI/msgpickle.pxi":560
 * cdef object PyMPI_mrecv(object rmsg,
 *                         MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void* rbuf = NULL
 *     cdef MPI_Aint rlen = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":561
 *                         MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void* rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":562
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void* rbuf = NULL
 *     cdef MPI_Aint rlen = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 */
  __pyx_v_rlen = 0;

  /* "mpi4py/MPI/msgpickle.pxi":563
 *     cdef void* rbuf = NULL
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 *         rmsg = None
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":564
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *         rmsg = None
 *     elif rmsg is None:
 */
  __pyx_t_1 = (((__pyx_v_message[0]) == MPI_MESSAGE_NO_PROC) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":565
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 *         rmsg = None             # <<<<<<<<<<<<<<
 *     elif rmsg is None:
 *         pass
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_rmsg, Py_None);

    /* "mpi4py/MPI/msgpickle.pxi":564
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *         rmsg = None
 *     elif rmsg is None:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":566
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 *         rmsg = None
 *     elif rmsg is None:             # <<<<<<<<<<<<<<
 *         pass
 *     elif PyBytes_CheckExact(rmsg):
 */
  __pyx_t_1 = (__pyx_v_rmsg == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":568
 *     elif rmsg is None:
 *         pass
 *     elif PyBytes_CheckExact(rmsg):             # <<<<<<<<<<<<<<
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)
 *     else:
 */
  __pyx_t_2 = (PyBytes_CheckExact(__pyx_v_rmsg) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":569
 *         pass
 *     elif PyBytes_CheckExact(rmsg):
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)             # <<<<<<<<<<<<<<
 *     else:
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)
 */
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_rmsg, (&__pyx_v_rbuf), (&__pyx_v_rlen))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 569, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":568
 *     elif rmsg is None:
 *         pass
 *     elif PyBytes_CheckExact(rmsg):             # <<<<<<<<<<<<<<
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":571
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)
 *     else:
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)             # <<<<<<<<<<<<<<
 *     cdef int rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Mrecv(rbuf, rcount, rtype, message, status) )
 */
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_rmsg, (&__pyx_v_rbuf), (&__pyx_v_rlen))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":572
 *     else:
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)
 *     cdef int rcount = clipcount(rlen)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Mrecv(rbuf, rcount, rtype, message, status) )
 *     rmsg = pickle.load(rbuf, rcount)
 */
  __pyx_v_rcount = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_rlen);

  /* "mpi4py/MPI/msgpickle.pxi":573
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)
 *     cdef int rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Mrecv(rbuf, rcount, rtype, message, status) )             # <<<<<<<<<<<<<<
 *     rmsg = pickle.load(rbuf, rcount)
 *     return rmsg
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mrecv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_message, __pyx_v_status)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 573, __pyx_L5_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":574
 *     cdef int rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Mrecv(rbuf, rcount, rtype, message, status) )
 *     rmsg = pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 *     return rmsg
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":575
 *     with nogil: CHKERR( MPI_Mrecv(rbuf, rcount, rtype, message, status) )
 *     rmsg = pickle.load(rbuf, rcount)
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_imrecv(object rmsg,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":558
 *     return rmsg
 * 
 * cdef object PyMPI_mrecv(object rmsg,             # <<<<<<<<<<<<<<
 *                         MPI_Message *message, MPI_Status *status):
 *     cdef Pickle pickle = PyMPI_PICKLE
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_mrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":577
 *     return rmsg
 * 
 * cdef object PyMPI_imrecv(object rmsg,             # <<<<<<<<<<<<<<
 *                          MPI_Message *message, MPI_Request *request):
 *     cdef void* rbuf = NULL
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_imrecv(PyObject *__pyx_v_rmsg, MPI_Message *__pyx_v_message, MPI_Request *__pyx_v_request) {
  void *__pyx_v_rbuf;
  MPI_Aint __pyx_v_rlen;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_rcount;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("PyMPI_imrecv", 0);
  __Pyx_INCREF(__pyx_v_rmsg);

  /* "mpi4py/MPI/msgpickle.pxi":579
 * cdef object PyMPI_imrecv(object rmsg,
 *                          MPI_Message *message, MPI_Request *request):
 *     cdef void* rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":580
 *                          MPI_Message *message, MPI_Request *request):
 *     cdef void* rbuf = NULL
 *     cdef MPI_Aint rlen = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 */
  __pyx_v_rlen = 0;

  /* "mpi4py/MPI/msgpickle.pxi":581
 *     cdef void* rbuf = NULL
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 *         rmsg = None
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":582
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *         rmsg = None
 *     elif rmsg is None:
 */
  __pyx_t_1 = (((__pyx_v_message[0]) == MPI_MESSAGE_NO_PROC) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":583
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 *         rmsg = None             # <<<<<<<<<<<<<<
 *     elif rmsg is None:
 *         pass
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_rmsg, Py_None);

    /* "mpi4py/MPI/msgpickle.pxi":582
 *     cdef MPI_Aint rlen = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     if message[0] == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *         rmsg = None
 *     elif rmsg is None:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":584
 *     if message[0] == MPI_MESSAGE_NO_PROC:
 *         rmsg = None
 *     elif rmsg is None:             # <<<<<<<<<<<<<<
 *         pass
 *     elif PyBytes_CheckExact(rmsg):
 */
  __pyx_t_1 = (__pyx_v_rmsg == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":586
 *     elif rmsg is None:
 *         pass
 *     elif PyBytes_CheckExact(rmsg):             # <<<<<<<<<<<<<<
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)
 *     else:
 */
  __pyx_t_2 = (PyBytes_CheckExact(__pyx_v_rmsg) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":587
 *         pass
 *     elif PyBytes_CheckExact(rmsg):
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)             # <<<<<<<<<<<<<<
 *     else:
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)
 */
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_rmsg, (&__pyx_v_rbuf), (&__pyx_v_rlen))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 587, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":586
 *     elif rmsg is None:
 *         pass
 *     elif PyBytes_CheckExact(rmsg):             # <<<<<<<<<<<<<<
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":589
 *         rmsg = getbuffer_r(rmsg, &rbuf, &rlen)
 *     else:
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)             # <<<<<<<<<<<<<<
 *     cdef int rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Imrecv(rbuf, rcount, rtype, message, request) )
 */
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_rmsg, (&__pyx_v_rbuf), (&__pyx_v_rlen))); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":590
 *     else:
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)
 *     cdef int rcount = clipcount(rlen)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Imrecv(rbuf, rcount, rtype, message, request) )
 *     return rmsg
 */
  __pyx_v_rcount = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_rlen);

  /* "mpi4py/MPI/msgpickle.pxi":591
 *         rmsg = getbuffer_w(rmsg, &rbuf, &rlen)
 *     cdef int rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Imrecv(rbuf, rcount, rtype, message, request) )             # <<<<<<<<<<<<<<
 *     return rmsg
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Imrecv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_message, __pyx_v_request)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 591, __pyx_L5_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":592
 *     cdef int rcount = clipcount(rlen)
 *     with nogil: CHKERR( MPI_Imrecv(rbuf, rcount, rtype, message, request) )
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":577
 *     return rmsg
 * 
 * cdef object PyMPI_imrecv(object rmsg,             # <<<<<<<<<<<<<<
 *                          MPI_Message *message, MPI_Request *request):
 *     cdef void* rbuf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_imrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":596
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_barrier(MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Barrier(comm) )
 *     return None
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_barrier(MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("PyMPI_barrier", 0);

  /* "mpi4py/MPI/msgpickle.pxi":597
 * 
 * cdef object PyMPI_barrier(MPI_Comm comm):
 *     with nogil: CHKERR( MPI_Barrier(comm) )             # <<<<<<<<<<<<<<
 *     return None
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Barrier(__pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 597, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":598
 * cdef object PyMPI_barrier(MPI_Comm comm):
 *     with nogil: CHKERR( MPI_Barrier(comm) )
 *     return None             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":596
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyMPI_barrier(MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Barrier(comm) )
 *     return None
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_barrier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":601
 * 
 * 
 * cdef object PyMPI_bcast(object obj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_bcast(PyObject *__pyx_v_obj, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_buf;
  int __pyx_v_count;
  MPI_Datatype __pyx_v_dtype;
  int __pyx_v_dosend;
  int __pyx_v_dorecv;
  int __pyx_v_inter;
  int __pyx_v_rank;
  PyObject *__pyx_v_smsg = 0;
  PyObject *__pyx_v_rmsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_bcast", 0);

  /* "mpi4py/MPI/msgpickle.pxi":602
 * 
 * cdef object PyMPI_bcast(object obj, int root, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *buf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":604
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *buf = NULL             # <<<<<<<<<<<<<<
 *     cdef int count = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE
 */
  __pyx_v_buf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":605
 *     #
 *     cdef void *buf = NULL
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     #
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":606
 *     cdef void *buf = NULL
 *     cdef int count = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int dosend=0, dorecv=0
 */
  __pyx_v_dtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":608
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     #
 *     cdef int dosend=0, dorecv=0             # <<<<<<<<<<<<<<
 *     cdef int inter=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_v_dosend = 0;
  __pyx_v_dorecv = 0;

  /* "mpi4py/MPI/msgpickle.pxi":609
 *     #
 *     cdef int dosend=0, dorecv=0
 *     cdef int inter=0, rank=0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 */
  __pyx_v_inter = 0;
  __pyx_v_rank = 0;

  /* "mpi4py/MPI/msgpickle.pxi":610
 *     cdef int dosend=0, dorecv=0
 *     cdef int inter=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *     if inter:
 *         if root == MPI_PROC_NULL:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 610, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":611
 *     cdef int inter=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 */
  __pyx_t_2 = (__pyx_v_inter != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":612
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 *         if root == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 */
    __pyx_t_2 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":613
 *     if inter:
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;             # <<<<<<<<<<<<<<
 *         elif root == MPI_ROOT:
 *             dosend=1; dorecv=0;
 */
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 0;

      /* "mpi4py/MPI/msgpickle.pxi":612
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 *         if root == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":614
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=0;
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":615
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 *             dosend=1; dorecv=0;             # <<<<<<<<<<<<<<
 *         else:
 *             dosend=0; dorecv=1;
 */
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 0;

      /* "mpi4py/MPI/msgpickle.pxi":614
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=0;
 *         else:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":617
 *             dosend=1; dorecv=0;
 *         else:
 *             dosend=0; dorecv=1;             # <<<<<<<<<<<<<<
 *     else:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 */
    /*else*/ {
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 1;
    }
    __pyx_L4:;

    /* "mpi4py/MPI/msgpickle.pxi":611
 *     cdef int inter=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":619
 *             dosend=0; dorecv=1;
 *     else:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *         if root == rank:
 *             dosend=1; dorecv=1;
 */
  /*else*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 619, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":620
 *     else:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=1;
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":621
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:
 *             dosend=1; dorecv=1;             # <<<<<<<<<<<<<<
 *         else:
 *             dosend=0; dorecv=1;
 */
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 1;

      /* "mpi4py/MPI/msgpickle.pxi":620
 *     else:
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=1;
 *         else:
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgpickle.pxi":623
 *             dosend=1; dorecv=1;
 *         else:
 *             dosend=0; dorecv=1;             # <<<<<<<<<<<<<<
 *     #
 *     cdef object smsg = None
 */
    /*else*/ {
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 1;
    }
    __pyx_L5:;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":625
 *             dosend=0; dorecv=1;
 *     #
 *     cdef object smsg = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_smsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":626
 *     #
 *     cdef object smsg = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     #
 *     if dosend: smsg = pickle.dump(obj, &buf, &count)
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":628
 *     cdef object rmsg = None
 *     #
 *     if dosend: smsg = pickle.dump(obj, &buf, &count)             # <<<<<<<<<<<<<<
 *     if dosend and dorecv: rmsg = smsg
 *     with PyMPI_Lock(comm, "bcast"):
 */
  __pyx_t_2 = (__pyx_v_dosend != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_buf), (&__pyx_v_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_smsg, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":629
 *     #
 *     if dosend: smsg = pickle.dump(obj, &buf, &count)
 *     if dosend and dorecv: rmsg = smsg             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "bcast"):
 *         with nogil: CHKERR( MPI_Bcast(
 */
  __pyx_t_4 = (__pyx_v_dosend != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_v_dorecv != 0);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_2) {
    __Pyx_INCREF(__pyx_v_smsg);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_v_smsg);
  }

  /* "mpi4py/MPI/msgpickle.pxi":630
 *     if dosend: smsg = pickle.dump(obj, &buf, &count)
 *     if dosend and dorecv: rmsg = smsg
 *     with PyMPI_Lock(comm, "bcast"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(
 *             &count, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_bcast); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 630, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 630, __pyx_L10_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":631
 *     if dosend and dorecv: rmsg = smsg
 *     with PyMPI_Lock(comm, "bcast"):
 *         with nogil: CHKERR( MPI_Bcast(             # <<<<<<<<<<<<<<
 *             &count, 1, MPI_INT,
 *             root, comm) )
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":633
 *         with nogil: CHKERR( MPI_Bcast(
 *             &count, 1, MPI_INT,
 *             root, comm) )             # <<<<<<<<<<<<<<
 *         if dorecv and not dosend:
 *             rmsg = pickle.alloc(&buf, count)
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bcast((&__pyx_v_count), 1, MPI_INT, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 631, __pyx_L21_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":631
 *     if dosend and dorecv: rmsg = smsg
 *     with PyMPI_Lock(comm, "bcast"):
 *         with nogil: CHKERR( MPI_Bcast(             # <<<<<<<<<<<<<<
 *             &count, 1, MPI_INT,
 *             root, comm) )
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L22;
                }
                __pyx_L21_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L14_error;
                }
                __pyx_L22:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":634
 *             &count, 1, MPI_INT,
 *             root, comm) )
 *         if dorecv and not dosend:             # <<<<<<<<<<<<<<
 *             rmsg = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(
 */
          __pyx_t_4 = (__pyx_v_dorecv != 0);
          if (__pyx_t_4) {
          } else {
            __pyx_t_2 = __pyx_t_4;
            goto __pyx_L24_bool_binop_done;
          }
          __pyx_t_4 = ((!(__pyx_v_dosend != 0)) != 0);
          __pyx_t_2 = __pyx_t_4;
          __pyx_L24_bool_binop_done:;
          if (__pyx_t_2) {

            /* "mpi4py/MPI/msgpickle.pxi":635
 *             root, comm) )
 *         if dorecv and not dosend:
 *             rmsg = pickle.alloc(&buf, count)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(
 *             buf, count, dtype,
 */
            __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_buf), __pyx_v_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 635, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
            __pyx_t_3 = 0;

            /* "mpi4py/MPI/msgpickle.pxi":634
 *             &count, 1, MPI_INT,
 *             root, comm) )
 *         if dorecv and not dosend:             # <<<<<<<<<<<<<<
 *             rmsg = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(
 */
          }

          /* "mpi4py/MPI/msgpickle.pxi":636
 *         if dorecv and not dosend:
 *             rmsg = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(             # <<<<<<<<<<<<<<
 *             buf, count, dtype,
 *             root, comm) )
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":638
 *         with nogil: CHKERR( MPI_Bcast(
 *             buf, count, dtype,
 *             root, comm) )             # <<<<<<<<<<<<<<
 *     if dorecv: rmsg = pickle.load(buf, count)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bcast(__pyx_v_buf, __pyx_v_count, __pyx_v_dtype, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 636, __pyx_L27_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":636
 *         if dorecv and not dosend:
 *             rmsg = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(             # <<<<<<<<<<<<<<
 *             buf, count, dtype,
 *             root, comm) )
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L28;
                }
                __pyx_L27_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L14_error;
                }
                __pyx_L28:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":630
 *     if dosend: smsg = pickle.dump(obj, &buf, &count)
 *     if dosend and dorecv: rmsg = smsg
 *     with PyMPI_Lock(comm, "bcast"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(
 *             &count, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L19_try_end;
        __pyx_L14_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(6, 630, __pyx_L16_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_8 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 630, __pyx_L16_except_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(6, 630, __pyx_L16_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(6, 630, __pyx_L16_except_error)
          __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_6);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_6, __pyx_t_7);
            __pyx_t_3 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; 
            __PYX_ERR(6, 630, __pyx_L16_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L15_exception_handled;
        }
        __pyx_L16_except_error:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L1_error;
        __pyx_L15_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        __pyx_L19_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_5) {
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 630, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        goto __pyx_L13;
      }
      __pyx_L13:;
    }
    goto __pyx_L32;
    __pyx_L10_error:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L1_error;
    __pyx_L32:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":639
 *             buf, count, dtype,
 *             root, comm) )
 *     if dorecv: rmsg = pickle.load(buf, count)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_4 = (__pyx_v_dorecv != 0);
  if (__pyx_t_4) {
    __pyx_t_7 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_buf, __pyx_v_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_7);
    __pyx_t_7 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":641
 *     if dorecv: rmsg = pickle.load(buf, count)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":601
 * 
 * 
 * cdef object PyMPI_bcast(object obj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_smsg);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":644
 * 
 * 
 * cdef object PyMPI_gather(object sendobj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_gather(PyObject *__pyx_v_sendobj, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  void *__pyx_v_rbuf;
  int *__pyx_v_rcounts;
  int *__pyx_v_rdispls;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_dosend;
  int __pyx_v_dorecv;
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_v_rank;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_v_rmsg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_gather", 0);

  /* "mpi4py/MPI/msgpickle.pxi":645
 * 
 * cdef object PyMPI_gather(object sendobj, int root, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":647
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":648
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":649
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":650
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":651
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rcounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":652
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":653
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int dosend=0, dorecv=0
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":655
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef int dosend=0, dorecv=0             # <<<<<<<<<<<<<<
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_v_dosend = 0;
  __pyx_v_dorecv = 0;

  /* "mpi4py/MPI/msgpickle.pxi":656
 *     #
 *     cdef int dosend=0, dorecv=0
 *     cdef int inter=0, size=0, rank=0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;
  __pyx_v_rank = 0;

  /* "mpi4py/MPI/msgpickle.pxi":657
 *     cdef int dosend=0, dorecv=0
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 657, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":658
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:
 */
  __pyx_t_2 = (__pyx_v_inter != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":659
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 659, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":660
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 */
    __pyx_t_2 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":661
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;             # <<<<<<<<<<<<<<
 *         elif root == MPI_ROOT:
 *             dosend=0; dorecv=1;
 */
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 0;

      /* "mpi4py/MPI/msgpickle.pxi":660
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":662
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=1;
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":663
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 *             dosend=0; dorecv=1;             # <<<<<<<<<<<<<<
 *         else:
 *             dosend=1; dorecv=0;
 */
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 1;

      /* "mpi4py/MPI/msgpickle.pxi":662
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=1;
 *         else:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":665
 *             dosend=0; dorecv=1;
 *         else:
 *             dosend=1; dorecv=0;             # <<<<<<<<<<<<<<
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
    /*else*/ {
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 0;
    }
    __pyx_L4:;

    /* "mpi4py/MPI/msgpickle.pxi":658
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":667
 *             dosend=1; dorecv=0;
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:
 */
  /*else*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 667, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":668
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *         if root == rank:
 *             dosend=1; dorecv=1;
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 668, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":669
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=1;
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":670
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:
 *             dosend=1; dorecv=1;             # <<<<<<<<<<<<<<
 *         else:
 *             dosend=1; dorecv=0;
 */
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 1;

      /* "mpi4py/MPI/msgpickle.pxi":669
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=1;
 *         else:
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgpickle.pxi":672
 *             dosend=1; dorecv=1;
 *         else:
 *             dosend=1; dorecv=0;             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
    /*else*/ {
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 0;
    }
    __pyx_L5:;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":674
 *             dosend=1; dorecv=0;
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     cdef object tmp1
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":675
 *     #
 *     cdef object tmps = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     cdef object tmp1
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":678
 *     cdef object tmp1
 *     #
 *     if dorecv: tmp1 = allocate_count_displ(size, &rcounts, &rdispls)             # <<<<<<<<<<<<<<
 *     if dosend: tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "gather"):
 */
  __pyx_t_2 = (__pyx_v_dorecv != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_size, (&__pyx_v_rcounts), (&__pyx_v_rdispls)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 678, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":679
 *     #
 *     if dorecv: tmp1 = allocate_count_displ(size, &rcounts, &rdispls)
 *     if dosend: tmps = pickle.dump(sendobj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "gather"):
 *         with nogil: CHKERR( MPI_Gather(
 */
  __pyx_t_2 = (__pyx_v_dosend != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_sendobj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":680
 *     if dorecv: tmp1 = allocate_count_displ(size, &rcounts, &rdispls)
 *     if dosend: tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "gather"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Gather(
 *             &scount, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_gather); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 680, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 680, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":681
 *     if dosend: tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "gather"):
 *         with nogil: CHKERR( MPI_Gather(             # <<<<<<<<<<<<<<
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":684
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 *             root, comm) )             # <<<<<<<<<<<<<<
 *         if dorecv: rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Gatherv(
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Gather((&__pyx_v_scount), 1, MPI_INT, __pyx_v_rcounts, 1, MPI_INT, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 681, __pyx_L19_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":681
 *     if dosend: tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "gather"):
 *         with nogil: CHKERR( MPI_Gather(             # <<<<<<<<<<<<<<
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L20;
                }
                __pyx_L19_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L12_error;
                }
                __pyx_L20:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":685
 *             rcounts, 1, MPI_INT,
 *             root, comm) )
 *         if dorecv: rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Gatherv(
 *             sbuf, scount,           stype,
 */
          __pyx_t_2 = (__pyx_v_dorecv != 0);
          if (__pyx_t_2) {
            __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_allocv(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_size, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 685, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
            __pyx_t_3 = 0;
          }

          /* "mpi4py/MPI/msgpickle.pxi":686
 *             root, comm) )
 *         if dorecv: rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Gatherv(             # <<<<<<<<<<<<<<
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":689
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 *             root, comm) )             # <<<<<<<<<<<<<<
 *     if dorecv: rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Gatherv(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_rbuf, __pyx_v_rcounts, __pyx_v_rdispls, __pyx_v_rtype, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 686, __pyx_L23_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":686
 *             root, comm) )
 *         if dorecv: rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Gatherv(             # <<<<<<<<<<<<<<
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L24;
                }
                __pyx_L23_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L12_error;
                }
                __pyx_L24:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":680
 *     if dorecv: tmp1 = allocate_count_displ(size, &rcounts, &rdispls)
 *     if dosend: tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "gather"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Gather(
 *             &scount, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L17_try_end;
        __pyx_L12_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(6, 680, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 680, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 680, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(6, 680, __pyx_L14_except_error)
          __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_6);
            __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; 
            __PYX_ERR(6, 680, __pyx_L14_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L13_exception_handled;
        }
        __pyx_L14_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L13_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L17_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 680, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L11;
      }
      __pyx_L11:;
    }
    goto __pyx_L28;
    __pyx_L8_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L28:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":690
 *             rbuf, rcounts, rdispls, rtype,
 *             root, comm) )
 *     if dorecv: rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_12 = (__pyx_v_dorecv != 0);
  if (__pyx_t_12) {
    __pyx_t_6 = __pyx_f_6mpi4py_3MPI_6Pickle_loadv(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_size, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 690, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_6);
    __pyx_t_6 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":692
 *     if dorecv: rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":644
 * 
 * 
 * cdef object PyMPI_gather(object sendobj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":695
 * 
 * 
 * cdef object PyMPI_scatter(object sendobj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scatter(PyObject *__pyx_v_sendobj, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int *__pyx_v_scounts;
  int *__pyx_v_sdispls;
  MPI_Datatype __pyx_v_stype;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_dosend;
  int __pyx_v_dorecv;
  int __pyx_v_inter;
  int __pyx_v_size;
  int __pyx_v_rank;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_v_rmsg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_scatter", 0);

  /* "mpi4py/MPI/msgpickle.pxi":696
 * 
 * cdef object PyMPI_scatter(object sendobj, int root, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":698
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":699
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int *scounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_scounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":700
 *     cdef void *sbuf = NULL
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 */
  __pyx_v_sdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":701
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":702
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":703
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":704
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int dosend=0, dorecv=0
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":706
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef int dosend=0, dorecv=0             # <<<<<<<<<<<<<<
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */
  __pyx_v_dosend = 0;
  __pyx_v_dorecv = 0;

  /* "mpi4py/MPI/msgpickle.pxi":707
 *     #
 *     cdef int dosend=0, dorecv=0
 *     cdef int inter=0, size=0, rank=0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;
  __pyx_v_rank = 0;

  /* "mpi4py/MPI/msgpickle.pxi":708
 *     cdef int dosend=0, dorecv=0
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 708, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":709
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:
 */
  __pyx_t_2 = (__pyx_v_inter != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":710
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 710, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":711
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 */
    __pyx_t_2 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":712
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;             # <<<<<<<<<<<<<<
 *         elif root == MPI_ROOT:
 *             dosend=1; dorecv=0;
 */
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 0;

      /* "mpi4py/MPI/msgpickle.pxi":711
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:             # <<<<<<<<<<<<<<
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":713
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=0;
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_root == MPI_ROOT) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":714
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:
 *             dosend=1; dorecv=0;             # <<<<<<<<<<<<<<
 *         else:
 *             dosend=0; dorecv=1;
 */
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 0;

      /* "mpi4py/MPI/msgpickle.pxi":713
 *         if root == MPI_PROC_NULL:
 *             dosend=0; dorecv=0;
 *         elif root == MPI_ROOT:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=0;
 *         else:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/msgpickle.pxi":716
 *             dosend=1; dorecv=0;
 *         else:
 *             dosend=0; dorecv=1;             # <<<<<<<<<<<<<<
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
    /*else*/ {
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 1;
    }
    __pyx_L4:;

    /* "mpi4py/MPI/msgpickle.pxi":709
 *     cdef int inter=0, size=0, rank=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *         if root == MPI_PROC_NULL:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":718
 *             dosend=0; dorecv=1;
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:
 */
  /*else*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 718, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":719
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *         if root == rank:
 *             dosend=1; dorecv=1;
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 719, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":720
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=1;
 *         else:
 */
    __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":721
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:
 *             dosend=1; dorecv=1;             # <<<<<<<<<<<<<<
 *         else:
 *             dosend=0; dorecv=1;
 */
      __pyx_v_dosend = 1;
      __pyx_v_dorecv = 1;

      /* "mpi4py/MPI/msgpickle.pxi":720
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *         CHKERR( MPI_Comm_rank(comm, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             dosend=1; dorecv=1;
 *         else:
 */
      goto __pyx_L5;
    }

    /* "mpi4py/MPI/msgpickle.pxi":723
 *             dosend=1; dorecv=1;
 *         else:
 *             dosend=0; dorecv=1;             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
    /*else*/ {
      __pyx_v_dosend = 0;
      __pyx_v_dorecv = 1;
    }
    __pyx_L5:;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":725
 *             dosend=0; dorecv=1;
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     cdef object tmp1
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":726
 *     #
 *     cdef object tmps = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     cdef object tmp1
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":729
 *     cdef object tmp1
 *     #
 *     if dosend: tmp1 = allocate_count_displ(size, &scounts, &sdispls)             # <<<<<<<<<<<<<<
 *     if dosend: tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "scatter"):
 */
  __pyx_t_2 = (__pyx_v_dosend != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_size, (&__pyx_v_scounts), (&__pyx_v_sdispls)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":730
 *     #
 *     if dosend: tmp1 = allocate_count_displ(size, &scounts, &sdispls)
 *     if dosend: tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "scatter"):
 *         with nogil: CHKERR( MPI_Scatter(
 */
  __pyx_t_2 = (__pyx_v_dosend != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_dumpv(__pyx_v_pickle, __pyx_v_sendobj, (&__pyx_v_sbuf), __pyx_v_size, __pyx_v_scounts, __pyx_v_sdispls); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":731
 *     if dosend: tmp1 = allocate_count_displ(size, &scounts, &sdispls)
 *     if dosend: tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "scatter"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Scatter(
 *             scounts, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_scatter); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 731, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 731, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 731, __pyx_L8_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":732
 *     if dosend: tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "scatter"):
 *         with nogil: CHKERR( MPI_Scatter(             # <<<<<<<<<<<<<<
 *             scounts, 1, MPI_INT,
 *             &rcount, 1, MPI_INT,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":735
 *             scounts, 1, MPI_INT,
 *             &rcount, 1, MPI_INT,
 *             root, comm) )             # <<<<<<<<<<<<<<
 *         if dorecv: rmsg = pickle.alloc(&rbuf, rcount)
 *         with nogil: CHKERR( MPI_Scatterv(
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Scatter(__pyx_v_scounts, 1, MPI_INT, (&__pyx_v_rcount), 1, MPI_INT, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 732, __pyx_L19_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":732
 *     if dosend: tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "scatter"):
 *         with nogil: CHKERR( MPI_Scatter(             # <<<<<<<<<<<<<<
 *             scounts, 1, MPI_INT,
 *             &rcount, 1, MPI_INT,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L20;
                }
                __pyx_L19_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L12_error;
                }
                __pyx_L20:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":736
 *             &rcount, 1, MPI_INT,
 *             root, comm) )
 *         if dorecv: rmsg = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Scatterv(
 *             sbuf, scounts, sdispls, stype,
 */
          __pyx_t_2 = (__pyx_v_dorecv != 0);
          if (__pyx_t_2) {
            __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 736, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
            __pyx_t_3 = 0;
          }

          /* "mpi4py/MPI/msgpickle.pxi":737
 *             root, comm) )
 *         if dorecv: rmsg = pickle.alloc(&rbuf, rcount)
 *         with nogil: CHKERR( MPI_Scatterv(             # <<<<<<<<<<<<<<
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcount,           rtype,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":740
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcount,           rtype,
 *             root, comm) )             # <<<<<<<<<<<<<<
 *     if dorecv: rmsg = pickle.load(rbuf, rcount)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Scatterv(__pyx_v_sbuf, __pyx_v_scounts, __pyx_v_sdispls, __pyx_v_stype, __pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 737, __pyx_L23_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":737
 *             root, comm) )
 *         if dorecv: rmsg = pickle.alloc(&rbuf, rcount)
 *         with nogil: CHKERR( MPI_Scatterv(             # <<<<<<<<<<<<<<
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcount,           rtype,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L24;
                }
                __pyx_L23_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L12_error;
                }
                __pyx_L24:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":731
 *     if dosend: tmp1 = allocate_count_displ(size, &scounts, &sdispls)
 *     if dosend: tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "scatter"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Scatter(
 *             scounts, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L17_try_end;
        __pyx_L12_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(6, 731, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 731, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 731, __pyx_L14_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(6, 731, __pyx_L14_except_error)
          __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_6);
            __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; 
            __PYX_ERR(6, 731, __pyx_L14_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L13_exception_handled;
        }
        __pyx_L14_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L13_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L17_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 731, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L11;
      }
      __pyx_L11:;
    }
    goto __pyx_L28;
    __pyx_L8_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L28:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":741
 *             rbuf, rcount,           rtype,
 *             root, comm) )
 *     if dorecv: rmsg = pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_12 = (__pyx_v_dorecv != 0);
  if (__pyx_t_12) {
    __pyx_t_6 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_6);
    __pyx_t_6 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":743
 *     if dorecv: rmsg = pickle.load(rbuf, rcount)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":695
 * 
 * 
 * cdef object PyMPI_scatter(object sendobj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":746
 * 
 * 
 * cdef object PyMPI_allgather(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allgather(PyObject *__pyx_v_sendobj, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  void *__pyx_v_rbuf;
  int *__pyx_v_rcounts;
  int *__pyx_v_rdispls;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_inter;
  int __pyx_v_size;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_v_rmsg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_allgather", 0);

  /* "mpi4py/MPI/msgpickle.pxi":747
 * 
 * cdef object PyMPI_allgather(object sendobj, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":749
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":750
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":751
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":752
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":753
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rcounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":754
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":755
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int inter=0, size=0
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":757
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef int inter=0, size=0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;

  /* "mpi4py/MPI/msgpickle.pxi":758
 *     #
 *     cdef int inter=0, size=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 758, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":759
 *     cdef int inter=0, size=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     else:
 */
  __pyx_t_2 = (__pyx_v_inter != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":760
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 760, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":759
 *     cdef int inter=0, size=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":762
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  /*else*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 762, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":764
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     cdef object tmp1
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":765
 *     #
 *     cdef object tmps = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     cdef object tmp1
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":768
 *     cdef object tmp1
 *     #
 *     tmp1 = allocate_count_displ(size, &rcounts, &rdispls)             # <<<<<<<<<<<<<<
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "allgather"):
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_size, (&__pyx_v_rcounts), (&__pyx_v_rdispls)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tmp1 = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":769
 *     #
 *     tmp1 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "allgather"):
 *         with nogil: CHKERR( MPI_Allgather(
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_sendobj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":770
 *     tmp1 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "allgather"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Allgather(
 *             &scount, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_allgather); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 770, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 770, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 770, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":771
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "allgather"):
 *         with nogil: CHKERR( MPI_Allgather(             # <<<<<<<<<<<<<<
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":774
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 *             comm) )             # <<<<<<<<<<<<<<
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Allgatherv(
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Allgather((&__pyx_v_scount), 1, MPI_INT, __pyx_v_rcounts, 1, MPI_INT, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 771, __pyx_L15_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":771
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "allgather"):
 *         with nogil: CHKERR( MPI_Allgather(             # <<<<<<<<<<<<<<
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L16;
                }
                __pyx_L15_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L8_error;
                }
                __pyx_L16:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":775
 *             rcounts, 1, MPI_INT,
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Allgatherv(
 *             sbuf, scount,           stype,
 */
          __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_allocv(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_size, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 775, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
          __pyx_t_3 = 0;

          /* "mpi4py/MPI/msgpickle.pxi":776
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Allgatherv(             # <<<<<<<<<<<<<<
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":779
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )             # <<<<<<<<<<<<<<
 *     rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Allgatherv(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_rbuf, __pyx_v_rcounts, __pyx_v_rdispls, __pyx_v_rtype, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 776, __pyx_L18_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":776
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Allgatherv(             # <<<<<<<<<<<<<<
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L19;
                }
                __pyx_L18_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L8_error;
                }
                __pyx_L19:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":770
 *     tmp1 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "allgather"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Allgather(
 *             &scount, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(6, 770, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 770, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 770, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(6, 770, __pyx_L10_except_error)
          __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_6);
            __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; 
            __PYX_ERR(6, 770, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 770, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L23;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L23:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":780
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )
 *     rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_6 = __pyx_f_6mpi4py_3MPI_6Pickle_loadv(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_size, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_6);
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":782
 *     rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":746
 * 
 * 
 * cdef object PyMPI_allgather(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":785
 * 
 * 
 * cdef object PyMPI_alltoall(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_alltoall(PyObject *__pyx_v_sendobj, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int *__pyx_v_scounts;
  int *__pyx_v_sdispls;
  MPI_Datatype __pyx_v_stype;
  void *__pyx_v_rbuf;
  int *__pyx_v_rcounts;
  int *__pyx_v_rdispls;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_inter;
  int __pyx_v_size;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_v_rmsg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_alltoall", 0);

  /* "mpi4py/MPI/msgpickle.pxi":786
 * 
 * cdef object PyMPI_alltoall(object sendobj, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":788
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":789
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int *scounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_scounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":790
 *     cdef void *sbuf = NULL
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 */
  __pyx_v_sdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":791
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":792
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":793
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rcounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":794
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":795
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int inter=0, size=0
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":797
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef int inter=0, size=0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 */
  __pyx_v_inter = 0;
  __pyx_v_size = 0;

  /* "mpi4py/MPI/msgpickle.pxi":798
 *     #
 *     cdef int inter=0, size=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 798, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":799
 *     cdef int inter=0, size=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     else:
 */
  __pyx_t_2 = (__pyx_v_inter != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":800
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )
 */
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 800, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":799
 *     cdef int inter=0, size=0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/msgpickle.pxi":802
 *         CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     else:
 *         CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  /*else*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 802, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "mpi4py/MPI/msgpickle.pxi":804
 *         CHKERR( MPI_Comm_size(comm, &size) )
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     cdef object tmp1, tmp2
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":805
 *     #
 *     cdef object tmps = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     cdef object tmp1, tmp2
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":808
 *     cdef object tmp1, tmp2
 *     #
 *     tmp1 = allocate_count_displ(size, &scounts, &sdispls)             # <<<<<<<<<<<<<<
 *     tmp2 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_size, (&__pyx_v_scounts), (&__pyx_v_sdispls)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tmp1 = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":809
 *     #
 *     tmp1 = allocate_count_displ(size, &scounts, &sdispls)
 *     tmp2 = allocate_count_displ(size, &rcounts, &rdispls)             # <<<<<<<<<<<<<<
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "alltoall"):
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_size, (&__pyx_v_rcounts), (&__pyx_v_rdispls)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tmp2 = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":810
 *     tmp1 = allocate_count_displ(size, &scounts, &sdispls)
 *     tmp2 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "alltoall"):
 *         with nogil: CHKERR( MPI_Alltoall(
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_dumpv(__pyx_v_pickle, __pyx_v_sendobj, (&__pyx_v_sbuf), __pyx_v_size, __pyx_v_scounts, __pyx_v_sdispls); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":811
 *     tmp2 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "alltoall"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Alltoall(
 *             scounts, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_alltoall); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 811, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 811, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":812
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "alltoall"):
 *         with nogil: CHKERR( MPI_Alltoall(             # <<<<<<<<<<<<<<
 *             scounts, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":815
 *             scounts, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 *             comm) )             # <<<<<<<<<<<<<<
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Alltoallv(
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Alltoall(__pyx_v_scounts, 1, MPI_INT, __pyx_v_rcounts, 1, MPI_INT, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 812, __pyx_L15_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":812
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "alltoall"):
 *         with nogil: CHKERR( MPI_Alltoall(             # <<<<<<<<<<<<<<
 *             scounts, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L16;
                }
                __pyx_L15_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L8_error;
                }
                __pyx_L16:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":816
 *             rcounts, 1, MPI_INT,
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Alltoallv(
 *             sbuf, scounts, sdispls, stype,
 */
          __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_allocv(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_size, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 816, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_3);
          __pyx_t_3 = 0;

          /* "mpi4py/MPI/msgpickle.pxi":817
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Alltoallv(             # <<<<<<<<<<<<<<
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":820
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )             # <<<<<<<<<<<<<<
 *     rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Alltoallv(__pyx_v_sbuf, __pyx_v_scounts, __pyx_v_sdispls, __pyx_v_stype, __pyx_v_rbuf, __pyx_v_rcounts, __pyx_v_rdispls, __pyx_v_rtype, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 817, __pyx_L18_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":817
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, size, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Alltoallv(             # <<<<<<<<<<<<<<
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L19;
                }
                __pyx_L18_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L8_error;
                }
                __pyx_L19:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":811
 *     tmp2 = allocate_count_displ(size, &rcounts, &rdispls)
 *     tmps = pickle.dumpv(sendobj, &sbuf, size, scounts, sdispls)
 *     with PyMPI_Lock(comm, "alltoall"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Alltoall(
 *             scounts, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(6, 811, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 811, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 811, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(6, 811, __pyx_L10_except_error)
          __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_6);
            __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; 
            __PYX_ERR(6, 811, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 811, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L23;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L23:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":821
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )
 *     rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_6 = __pyx_f_6mpi4py_3MPI_6Pickle_loadv(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_size, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 821, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_6);
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":823
 *     rmsg = pickle.loadv(rbuf, size, rcounts, rdispls)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":785
 * 
 * 
 * cdef object PyMPI_alltoall(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":826
 * 
 * 
 * cdef object PyMPI_neighbor_allgather(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_neighbor_allgather(PyObject *__pyx_v_sendobj, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  void *__pyx_v_rbuf;
  int *__pyx_v_rcounts;
  int *__pyx_v_rdispls;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_i;
  int __pyx_v_rsize;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_v_rmsg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_neighbor_allgather", 0);

  /* "mpi4py/MPI/msgpickle.pxi":827
 * 
 * cdef object PyMPI_neighbor_allgather(object sendobj, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":829
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":830
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":831
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":832
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":833
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rcounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":834
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":835
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int i=0, rsize=0
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":837
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef int i=0, rsize=0             # <<<<<<<<<<<<<<
 *     comm_neighbors_count(comm, &rsize, NULL)
 *     #
 */
  __pyx_v_i = 0;
  __pyx_v_rsize = 0;

  /* "mpi4py/MPI/msgpickle.pxi":838
 *     #
 *     cdef int i=0, rsize=0
 *     comm_neighbors_count(comm, &rsize, NULL)             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_neighbors_count(__pyx_v_comm, (&__pyx_v_rsize), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 838, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":840
 *     comm_neighbors_count(comm, &rsize, NULL)
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     cdef object tmp1
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":841
 *     #
 *     cdef object tmps = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     cdef object tmp1
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":844
 *     cdef object tmp1
 *     #
 *     tmp1 = allocate_count_displ(rsize, &rcounts, &rdispls)             # <<<<<<<<<<<<<<
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_rsize, (&__pyx_v_rcounts), (&__pyx_v_rdispls)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":845
 *     #
 *     tmp1 = allocate_count_displ(rsize, &rcounts, &rdispls)
 *     for i from 0 <= i < rsize: rcounts[i] = 0             # <<<<<<<<<<<<<<
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "neighbor_allgather"):
 */
  __pyx_t_1 = __pyx_v_rsize;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    (__pyx_v_rcounts[__pyx_v_i]) = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":846
 *     tmp1 = allocate_count_displ(rsize, &rcounts, &rdispls)
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "neighbor_allgather"):
 *         with nogil: CHKERR( MPI_Neighbor_allgather(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_sendobj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":847
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "neighbor_allgather"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_allgather(
 *             &scount, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_neighbor_allgather); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 847, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 847, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 847, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 847, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":848
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "neighbor_allgather"):
 *         with nogil: CHKERR( MPI_Neighbor_allgather(             # <<<<<<<<<<<<<<
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":851
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 *             comm) )             # <<<<<<<<<<<<<<
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_allgather((&__pyx_v_scount), 1, MPI_INT, __pyx_v_rcounts, 1, MPI_INT, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 848, __pyx_L16_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":848
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "neighbor_allgather"):
 *         with nogil: CHKERR( MPI_Neighbor_allgather(             # <<<<<<<<<<<<<<
 *             &scount, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L17;
                }
                __pyx_L16_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L9_error;
                }
                __pyx_L17:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":852
 *             rcounts, 1, MPI_INT,
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(
 *             sbuf, scount,           stype,
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_allocv(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rsize, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 852, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_2);
          __pyx_t_2 = 0;

          /* "mpi4py/MPI/msgpickle.pxi":853
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(             # <<<<<<<<<<<<<<
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":856
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )             # <<<<<<<<<<<<<<
 *     rmsg = pickle.loadv(rbuf, rsize, rcounts, rdispls)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_allgatherv(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_rbuf, __pyx_v_rcounts, __pyx_v_rdispls, __pyx_v_rtype, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 853, __pyx_L19_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":853
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(             # <<<<<<<<<<<<<<
 *             sbuf, scount,           stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L20;
                }
                __pyx_L19_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L9_error;
                }
                __pyx_L20:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":847
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dump(sendobj, &sbuf, &scount)
 *     with PyMPI_Lock(comm, "neighbor_allgather"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_allgather(
 *             &scount, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L14_try_end;
        __pyx_L9_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(6, 847, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 847, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 847, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(6, 847, __pyx_L11_except_error)
          __pyx_t_12 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_5);
            __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; 
            __PYX_ERR(6, 847, __pyx_L11_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L10_exception_handled;
        }
        __pyx_L11_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L14_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 847, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L8;
      }
      __pyx_L8:;
    }
    goto __pyx_L24;
    __pyx_L5_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L24:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":857
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )
 *     rmsg = pickle.loadv(rbuf, rsize, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_6Pickle_loadv(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rsize, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":859
 *     rmsg = pickle.loadv(rbuf, rsize, rcounts, rdispls)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":826
 * 
 * 
 * cdef object PyMPI_neighbor_allgather(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":862
 * 
 * 
 * cdef object PyMPI_neighbor_alltoall(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_neighbor_alltoall(PyObject *__pyx_v_sendobj, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int *__pyx_v_scounts;
  int *__pyx_v_sdispls;
  MPI_Datatype __pyx_v_stype;
  void *__pyx_v_rbuf;
  int *__pyx_v_rcounts;
  int *__pyx_v_rdispls;
  MPI_Datatype __pyx_v_rtype;
  int __pyx_v_i;
  int __pyx_v_ssize;
  int __pyx_v_rsize;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_v_rmsg = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_neighbor_alltoall", 0);

  /* "mpi4py/MPI/msgpickle.pxi":863
 * 
 * cdef object PyMPI_neighbor_alltoall(object sendobj, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     #
 *     cdef void *sbuf = NULL
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":865
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":866
 *     #
 *     cdef void *sbuf = NULL
 *     cdef int *scounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_scounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":867
 *     cdef void *sbuf = NULL
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 */
  __pyx_v_sdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":868
 *     cdef int *scounts = NULL
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":869
 *     cdef int *sdispls = NULL
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":870
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL             # <<<<<<<<<<<<<<
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rcounts = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":871
 *     cdef void *rbuf = NULL
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 */
  __pyx_v_rdispls = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":872
 *     cdef int *rcounts = NULL
 *     cdef int *rdispls = NULL
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     #
 *     cdef int i=0, ssize=0, rsize=0
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":874
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     #
 *     cdef int i=0, ssize=0, rsize=0             # <<<<<<<<<<<<<<
 *     comm_neighbors_count(comm, &rsize, &ssize)
 *     #
 */
  __pyx_v_i = 0;
  __pyx_v_ssize = 0;
  __pyx_v_rsize = 0;

  /* "mpi4py/MPI/msgpickle.pxi":875
 *     #
 *     cdef int i=0, ssize=0, rsize=0
 *     comm_neighbors_count(comm, &rsize, &ssize)             # <<<<<<<<<<<<<<
 *     #
 *     cdef object tmps = None
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_neighbors_count(__pyx_v_comm, (&__pyx_v_rsize), (&__pyx_v_ssize)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 875, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":877
 *     comm_neighbors_count(comm, &rsize, &ssize)
 *     #
 *     cdef object tmps = None             # <<<<<<<<<<<<<<
 *     cdef object rmsg = None
 *     cdef object tmp1, tmp2
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_tmps = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":878
 *     #
 *     cdef object tmps = None
 *     cdef object rmsg = None             # <<<<<<<<<<<<<<
 *     cdef object tmp1, tmp2
 *     #
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_rmsg = Py_None;

  /* "mpi4py/MPI/msgpickle.pxi":881
 *     cdef object tmp1, tmp2
 *     #
 *     tmp1 = allocate_count_displ(ssize, &scounts, &sdispls)             # <<<<<<<<<<<<<<
 *     tmp2 = allocate_count_displ(rsize, &rcounts, &rdispls)
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_ssize, (&__pyx_v_scounts), (&__pyx_v_sdispls)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":882
 *     #
 *     tmp1 = allocate_count_displ(ssize, &scounts, &sdispls)
 *     tmp2 = allocate_count_displ(rsize, &rcounts, &rdispls)             # <<<<<<<<<<<<<<
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_allocate_count_displ(__pyx_v_rsize, (&__pyx_v_rcounts), (&__pyx_v_rdispls)); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":883
 *     tmp1 = allocate_count_displ(ssize, &scounts, &sdispls)
 *     tmp2 = allocate_count_displ(rsize, &rcounts, &rdispls)
 *     for i from 0 <= i < rsize: rcounts[i] = 0             # <<<<<<<<<<<<<<
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)
 *     with PyMPI_Lock(comm, "neighbor_alltoall"):
 */
  __pyx_t_1 = __pyx_v_rsize;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    (__pyx_v_rcounts[__pyx_v_i]) = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":884
 *     tmp2 = allocate_count_displ(rsize, &rcounts, &rdispls)
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "neighbor_alltoall"):
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_dumpv(__pyx_v_pickle, __pyx_v_sendobj, (&__pyx_v_sbuf), __pyx_v_ssize, __pyx_v_scounts, __pyx_v_sdispls); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_tmps, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":885
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)
 *     with PyMPI_Lock(comm, "neighbor_alltoall"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(
 *             scounts, 1, MPI_INT,
 */
  /*with:*/ {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_n_s_neighbor_alltoall); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 885, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 885, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 885, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 885, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":886
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)
 *     with PyMPI_Lock(comm, "neighbor_alltoall"):
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(             # <<<<<<<<<<<<<<
 *             scounts, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":889
 *             scounts, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 *             comm) )             # <<<<<<<<<<<<<<
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_alltoall(__pyx_v_scounts, 1, MPI_INT, __pyx_v_rcounts, 1, MPI_INT, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 886, __pyx_L16_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":886
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)
 *     with PyMPI_Lock(comm, "neighbor_alltoall"):
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(             # <<<<<<<<<<<<<<
 *             scounts, 1, MPI_INT,
 *             rcounts, 1, MPI_INT,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L17;
                }
                __pyx_L16_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L9_error;
                }
                __pyx_L17:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":890
 *             rcounts, 1, MPI_INT,
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(
 *             sbuf, scounts, sdispls, stype,
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_allocv(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rsize, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 890, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_2);
          __pyx_t_2 = 0;

          /* "mpi4py/MPI/msgpickle.pxi":891
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(             # <<<<<<<<<<<<<<
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {

                /* "mpi4py/MPI/msgpickle.pxi":894
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )             # <<<<<<<<<<<<<<
 *     rmsg = pickle.loadv(rbuf, rsize, rcounts, rdispls)
 *     #
 */
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_alltoallv(__pyx_v_sbuf, __pyx_v_scounts, __pyx_v_sdispls, __pyx_v_stype, __pyx_v_rbuf, __pyx_v_rcounts, __pyx_v_rdispls, __pyx_v_rtype, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 891, __pyx_L19_error)
              }

              /* "mpi4py/MPI/msgpickle.pxi":891
 *             comm) )
 *         rmsg = pickle.allocv(&rbuf, rsize, rcounts, rdispls)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(             # <<<<<<<<<<<<<<
 *             sbuf, scounts, sdispls, stype,
 *             rbuf, rcounts, rdispls, rtype,
 */
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L20;
                }
                __pyx_L19_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L9_error;
                }
                __pyx_L20:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":885
 *     for i from 0 <= i < rsize: rcounts[i] = 0
 *     tmps = pickle.dumpv(sendobj, &sbuf, ssize, scounts, sdispls)
 *     with PyMPI_Lock(comm, "neighbor_alltoall"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(
 *             scounts, 1, MPI_INT,
 */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L14_try_end;
        __pyx_L9_error:;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_5) < 0) __PYX_ERR(6, 885, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 885, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 885, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(6, 885, __pyx_L11_except_error)
          __pyx_t_12 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_4, __pyx_t_5);
            __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; 
            __PYX_ERR(6, 885, __pyx_L11_except_error)
          }
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L10_exception_handled;
        }
        __pyx_L11_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L14_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 885, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L8;
      }
      __pyx_L8:;
    }
    goto __pyx_L24;
    __pyx_L5_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L24:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":895
 *             rbuf, rcounts, rdispls, rtype,
 *             comm) )
 *     rmsg = pickle.loadv(rbuf, rsize, rcounts, rdispls)             # <<<<<<<<<<<<<<
 *     #
 *     return rmsg
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_6Pickle_loadv(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rsize, __pyx_v_rcounts, __pyx_v_rdispls); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":897
 *     rmsg = pickle.loadv(rbuf, rsize, rcounts, rdispls)
 *     #
 *     return rmsg             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":862
 * 
 * 
 * cdef object PyMPI_neighbor_alltoall(object sendobj, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     #
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":901
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline object _py_reduce(object seq, object op):             # <<<<<<<<<<<<<<
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI__py_reduce(PyObject *__pyx_v_seq, PyObject *__pyx_v_op) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyObject *__pyx_v_res = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("_py_reduce", 0);

  /* "mpi4py/MPI/msgpickle.pxi":902
 * 
 * cdef inline object _py_reduce(object seq, object op):
 *     if seq is None: return None             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i = 0
 *     cdef Py_ssize_t n = len(seq)
 */
  __pyx_t_1 = (__pyx_v_seq == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":903
 * cdef inline object _py_reduce(object seq, object op):
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t n = len(seq)
 *     cdef object res = seq[0]
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/msgpickle.pxi":904
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0
 *     cdef Py_ssize_t n = len(seq)             # <<<<<<<<<<<<<<
 *     cdef object res = seq[0]
 *     for i from 1 <= i < n:
 */
  __pyx_t_3 = PyObject_Length(__pyx_v_seq); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(6, 904, __pyx_L1_error)
  __pyx_v_n = __pyx_t_3;

  /* "mpi4py/MPI/msgpickle.pxi":905
 *     cdef Py_ssize_t i = 0
 *     cdef Py_ssize_t n = len(seq)
 *     cdef object res = seq[0]             # <<<<<<<<<<<<<<
 *     for i from 1 <= i < n:
 *         res = op(res, seq[i])
 */
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_seq, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_res = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":906
 *     cdef Py_ssize_t n = len(seq)
 *     cdef object res = seq[0]
 *     for i from 1 <= i < n:             # <<<<<<<<<<<<<<
 *         res = op(res, seq[i])
 *     return res
 */
  __pyx_t_3 = __pyx_v_n;
  for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {

    /* "mpi4py/MPI/msgpickle.pxi":907
 *     cdef object res = seq[0]
 *     for i from 1 <= i < n:
 *         res = op(res, seq[i])             # <<<<<<<<<<<<<<
 *     return res
 * 
 */
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_seq, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_op);
    __pyx_t_6 = __pyx_v_op; __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_res, __pyx_t_5};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 907, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_res, __pyx_t_5};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 907, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(__pyx_v_res);
      __Pyx_GIVEREF(__pyx_v_res);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_res);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 907, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_res, __pyx_t_4);
    __pyx_t_4 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":908
 *     for i from 1 <= i < n:
 *         res = op(res, seq[i])
 *     return res             # <<<<<<<<<<<<<<
 * 
 * cdef inline object _py_scan(object seq, object op):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_res);
  __pyx_r = __pyx_v_res;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":901
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline object _py_reduce(object seq, object op):             # <<<<<<<<<<<<<<
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI._py_reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":910
 *     return res
 * 
 * cdef inline object _py_scan(object seq, object op):             # <<<<<<<<<<<<<<
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI__py_scan(PyObject *__pyx_v_seq, PyObject *__pyx_v_op) {
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  __Pyx_RefNannySetupContext("_py_scan", 0);

  /* "mpi4py/MPI/msgpickle.pxi":911
 * 
 * cdef inline object _py_scan(object seq, object op):
 *     if seq is None: return None             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i = 0
 *     cdef Py_ssize_t n = len(seq)
 */
  __pyx_t_1 = (__pyx_v_seq == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":912
 * cdef inline object _py_scan(object seq, object op):
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t n = len(seq)
 *     for i from 1 <= i < n:
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/msgpickle.pxi":913
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0
 *     cdef Py_ssize_t n = len(seq)             # <<<<<<<<<<<<<<
 *     for i from 1 <= i < n:
 *         seq[i] = op(seq[i-1], seq[i])
 */
  __pyx_t_3 = PyObject_Length(__pyx_v_seq); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(6, 913, __pyx_L1_error)
  __pyx_v_n = __pyx_t_3;

  /* "mpi4py/MPI/msgpickle.pxi":914
 *     cdef Py_ssize_t i = 0
 *     cdef Py_ssize_t n = len(seq)
 *     for i from 1 <= i < n:             # <<<<<<<<<<<<<<
 *         seq[i] = op(seq[i-1], seq[i])
 *     return seq
 */
  __pyx_t_3 = __pyx_v_n;
  for (__pyx_v_i = 1; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {

    /* "mpi4py/MPI/msgpickle.pxi":915
 *     cdef Py_ssize_t n = len(seq)
 *     for i from 1 <= i < n:
 *         seq[i] = op(seq[i-1], seq[i])             # <<<<<<<<<<<<<<
 *     return seq
 * 
 */
    __pyx_t_5 = (__pyx_v_i - 1);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_seq, __pyx_t_5, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_seq, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_op);
    __pyx_t_8 = __pyx_v_op; __pyx_t_9 = NULL;
    __pyx_t_10 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_10 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_6, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 915, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_6, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 915, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_7);
      __pyx_t_6 = 0;
      __pyx_t_7 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_SetItemInt(__pyx_v_seq, __pyx_v_i, __pyx_t_4, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1) < 0)) __PYX_ERR(6, 915, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":916
 *     for i from 1 <= i < n:
 *         seq[i] = op(seq[i-1], seq[i])
 *     return seq             # <<<<<<<<<<<<<<
 * 
 * cdef inline object _py_exscan(object seq, object op):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_seq);
  __pyx_r = __pyx_v_seq;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":910
 *     return res
 * 
 * cdef inline object _py_scan(object seq, object op):             # <<<<<<<<<<<<<<
 *     if seq is None: return None
 *     cdef Py_ssize_t i = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("mpi4py.MPI._py_scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":918
 *     return seq
 * 
 * cdef inline object _py_exscan(object seq, object op):             # <<<<<<<<<<<<<<
 *     if seq is None: return None
 *     seq = _py_scan(seq, op)
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI__py_exscan(PyObject *__pyx_v_seq, PyObject *__pyx_v_op) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("_py_exscan", 0);
  __Pyx_INCREF(__pyx_v_seq);

  /* "mpi4py/MPI/msgpickle.pxi":919
 * 
 * cdef inline object _py_exscan(object seq, object op):
 *     if seq is None: return None             # <<<<<<<<<<<<<<
 *     seq = _py_scan(seq, op)
 *     seq.pop(-1)
 */
  __pyx_t_1 = (__pyx_v_seq == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":920
 * cdef inline object _py_exscan(object seq, object op):
 *     if seq is None: return None
 *     seq = _py_scan(seq, op)             # <<<<<<<<<<<<<<
 *     seq.pop(-1)
 *     seq.insert(0, None)
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI__py_scan(__pyx_v_seq, __pyx_v_op); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_seq, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":921
 *     if seq is None: return None
 *     seq = _py_scan(seq, op)
 *     seq.pop(-1)             # <<<<<<<<<<<<<<
 *     seq.insert(0, None)
 *     return seq
 */
  __pyx_t_3 = __Pyx_PyObject_PopIndex(__pyx_v_seq, __pyx_int_neg_1, -1L, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":922
 *     seq = _py_scan(seq, op)
 *     seq.pop(-1)
 *     seq.insert(0, None)             # <<<<<<<<<<<<<<
 *     return seq
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_seq, __pyx_n_s_insert); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":923
 *     seq.pop(-1)
 *     seq.insert(0, None)
 *     return seq             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_reduce_naive(object sendobj, object op,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_seq);
  __pyx_r = __pyx_v_seq;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":918
 *     return seq
 * 
 * cdef inline object _py_exscan(object seq, object op):             # <<<<<<<<<<<<<<
 *     if seq is None: return None
 *     seq = _py_scan(seq, op)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI._py_exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_seq);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":925
 *     return seq
 * 
 * cdef object PyMPI_reduce_naive(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                                int root, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, root, comm)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_naive(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_v_items = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_reduce_naive", 0);

  /* "mpi4py/MPI/msgpickle.pxi":927
 * cdef object PyMPI_reduce_naive(object sendobj, object op,
 *                                int root, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, root, comm)             # <<<<<<<<<<<<<<
 *     return _py_reduce(items, op)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_gather(__pyx_v_sendobj, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_items = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":928
 *                                int root, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, root, comm)
 *     return _py_reduce(items, op)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_allreduce_naive(object sendobj, object op, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__py_reduce(__pyx_v_items, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":925
 *     return seq
 * 
 * cdef object PyMPI_reduce_naive(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                                int root, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, root, comm)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_reduce_naive", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":930
 *     return _py_reduce(items, op)
 * 
 * cdef object PyMPI_allreduce_naive(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef object items = PyMPI_allgather(sendobj, comm)
 *     return _py_reduce(items, op)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce_naive(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_v_items = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_allreduce_naive", 0);

  /* "mpi4py/MPI/msgpickle.pxi":931
 * 
 * cdef object PyMPI_allreduce_naive(object sendobj, object op, MPI_Comm comm):
 *     cdef object items = PyMPI_allgather(sendobj, comm)             # <<<<<<<<<<<<<<
 *     return _py_reduce(items, op)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_allgather(__pyx_v_sendobj, __pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_items = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":932
 * cdef object PyMPI_allreduce_naive(object sendobj, object op, MPI_Comm comm):
 *     cdef object items = PyMPI_allgather(sendobj, comm)
 *     return _py_reduce(items, op)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_scan_naive(object sendobj, object op, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__py_reduce(__pyx_v_items, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":930
 *     return _py_reduce(items, op)
 * 
 * cdef object PyMPI_allreduce_naive(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef object items = PyMPI_allgather(sendobj, comm)
 *     return _py_reduce(items, op)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_allreduce_naive", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":934
 *     return _py_reduce(items, op)
 * 
 * cdef object PyMPI_scan_naive(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_scan(items, op)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan_naive(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_v_items = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_scan_naive", 0);

  /* "mpi4py/MPI/msgpickle.pxi":935
 * 
 * cdef object PyMPI_scan_naive(object sendobj, object op, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)             # <<<<<<<<<<<<<<
 *     items = _py_scan(items, op)
 *     return PyMPI_scatter(items, 0, comm)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_gather(__pyx_v_sendobj, 0, __pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_items = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":936
 * cdef object PyMPI_scan_naive(object sendobj, object op, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_scan(items, op)             # <<<<<<<<<<<<<<
 *     return PyMPI_scatter(items, 0, comm)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__py_scan(__pyx_v_items, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_items, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":937
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_scan(items, op)
 *     return PyMPI_scatter(items, 0, comm)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_exscan_naive(object sendobj, object op, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_scatter(__pyx_v_items, 0, __pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":934
 *     return _py_reduce(items, op)
 * 
 * cdef object PyMPI_scan_naive(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_scan(items, op)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_scan_naive", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":939
 *     return PyMPI_scatter(items, 0, comm)
 * 
 * cdef object PyMPI_exscan_naive(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_exscan(items, op)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan_naive(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_v_items = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_exscan_naive", 0);

  /* "mpi4py/MPI/msgpickle.pxi":940
 * 
 * cdef object PyMPI_exscan_naive(object sendobj, object op, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)             # <<<<<<<<<<<<<<
 *     items = _py_exscan(items, op)
 *     return PyMPI_scatter(items, 0, comm)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_gather(__pyx_v_sendobj, 0, __pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_items = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":941
 * cdef object PyMPI_exscan_naive(object sendobj, object op, MPI_Comm comm):
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_exscan(items, op)             # <<<<<<<<<<<<<<
 *     return PyMPI_scatter(items, 0, comm)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__py_exscan(__pyx_v_items, __pyx_v_op); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_items, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":942
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_exscan(items, op)
 *     return PyMPI_scatter(items, 0, comm)             # <<<<<<<<<<<<<<
 * 
 * # -----
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_scatter(__pyx_v_items, 0, __pyx_v_comm); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":939
 *     return PyMPI_scatter(items, 0, comm)
 * 
 * cdef object PyMPI_exscan_naive(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef object items = PyMPI_gather(sendobj, 0, comm)
 *     items = _py_exscan(items, op)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_exscan_naive", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":946
 * # -----
 * 
 * cdef inline object PyMPI_copy(object obj):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL
 */

static CYTHON_INLINE PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_copy(PyObject *__pyx_v_obj) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_buf;
  int __pyx_v_count;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_copy", 0);
  __Pyx_INCREF(__pyx_v_obj);

  /* "mpi4py/MPI/msgpickle.pxi":947
 * 
 * cdef inline object PyMPI_copy(object obj):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void *buf = NULL
 *     cdef int count = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":948
 * cdef inline object PyMPI_copy(object obj):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL             # <<<<<<<<<<<<<<
 *     cdef int count = 0
 *     obj = pickle.dump(obj, &buf, &count)
 */
  __pyx_v_buf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":949
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     obj = pickle.dump(obj, &buf, &count)
 *     return pickle.load(buf, count)
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":950
 *     cdef void *buf = NULL
 *     cdef int count = 0
 *     obj = pickle.dump(obj, &buf, &count)             # <<<<<<<<<<<<<<
 *     return pickle.load(buf, count)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_buf), (&__pyx_v_count)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":951
 *     cdef int count = 0
 *     obj = pickle.dump(obj, &buf, &count)
 *     return pickle.load(buf, count)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_send_p2p(object obj, int dst, int tag, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_buf, __pyx_v_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":946
 * # -----
 * 
 * cdef inline object PyMPI_copy(object obj):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":953
 *     return pickle.load(buf, count)
 * 
 * cdef object PyMPI_send_p2p(object obj, int dst, int tag, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *sbuf = NULL
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_send_p2p(PyObject *__pyx_v_obj, int __pyx_v_dst, int __pyx_v_tag, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  int __pyx_v_scount;
  MPI_Datatype __pyx_v_stype;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("PyMPI_send_p2p", 0);

  /* "mpi4py/MPI/msgpickle.pxi":954
 * 
 * cdef object PyMPI_send_p2p(object obj, int dst, int tag, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":955
 * cdef object PyMPI_send_p2p(object obj, int dst, int tag, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *sbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":956
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 */
  __pyx_v_scount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":957
 *     cdef void *sbuf = NULL
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(&scount, 1, MPI_INT, dst, tag, comm) )
 */
  __pyx_v_stype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":958
 *     cdef int scount = 0
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Send(&scount, 1, MPI_INT, dst, tag, comm) )
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype, dst, tag, comm) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmps = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":959
 *     cdef MPI_Datatype stype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(&scount, 1, MPI_INT, dst, tag, comm) )             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype, dst, tag, comm) )
 *     return None
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Send((&__pyx_v_scount), 1, MPI_INT, __pyx_v_dst, __pyx_v_tag, __pyx_v_comm)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 959, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":960
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Send(&scount, 1, MPI_INT, dst, tag, comm) )
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype, dst, tag, comm) )             # <<<<<<<<<<<<<<
 *     return None
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Send(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_stype, __pyx_v_dst, __pyx_v_tag, __pyx_v_comm)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 960, __pyx_L7_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":961
 *     with nogil: CHKERR( MPI_Send(&scount, 1, MPI_INT, dst, tag, comm) )
 *     with nogil: CHKERR( MPI_Send(sbuf, scount, stype, dst, tag, comm) )
 *     return None             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_recv_p2p(int src, int tag, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":953
 *     return pickle.load(buf, count)
 * 
 * cdef object PyMPI_send_p2p(object obj, int dst, int tag, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *sbuf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_send_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":963
 *     return None
 * 
 * cdef object PyMPI_recv_p2p(int src, int tag, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_recv_p2p(int __pyx_v_src, int __pyx_v_tag, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_rbuf;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_rtype;
  MPI_Status *__pyx_v_status;
  CYTHON_UNUSED PyObject *__pyx_v_tmpr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_recv_p2p", 0);

  /* "mpi4py/MPI/msgpickle.pxi":964
 * 
 * cdef object PyMPI_recv_p2p(int src, int tag, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":965
 * cdef object PyMPI_recv_p2p(int src, int tag, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 */
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":966
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status *status = MPI_STATUS_IGNORE
 */
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":967
 *     cdef void *rbuf = NULL
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef MPI_Status *status = MPI_STATUS_IGNORE
 *     with nogil: CHKERR( MPI_Recv(&rcount, 1, MPI_INT, src, tag, comm, status) )
 */
  __pyx_v_rtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":968
 *     cdef int rcount = 0
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status *status = MPI_STATUS_IGNORE             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Recv(&rcount, 1, MPI_INT, src, tag, comm, status) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 */
  __pyx_v_status = MPI_STATUS_IGNORE;

  /* "mpi4py/MPI/msgpickle.pxi":969
 *     cdef MPI_Datatype rtype = MPI_BYTE
 *     cdef MPI_Status *status = MPI_STATUS_IGNORE
 *     with nogil: CHKERR( MPI_Recv(&rcount, 1, MPI_INT, src, tag, comm, status) )             # <<<<<<<<<<<<<<
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil: CHKERR( MPI_Recv(rbuf, rcount, rtype, src, tag, comm, status) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Recv((&__pyx_v_rcount), 1, MPI_INT, __pyx_v_src, __pyx_v_tag, __pyx_v_comm, __pyx_v_status)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 969, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":970
 *     cdef MPI_Status *status = MPI_STATUS_IGNORE
 *     with nogil: CHKERR( MPI_Recv(&rcount, 1, MPI_INT, src, tag, comm, status) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Recv(rbuf, rcount, rtype, src, tag, comm, status) )
 *     return pickle.load(rbuf, rcount)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmpr = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":971
 *     with nogil: CHKERR( MPI_Recv(&rcount, 1, MPI_INT, src, tag, comm, status) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil: CHKERR( MPI_Recv(rbuf, rcount, rtype, src, tag, comm, status) )             # <<<<<<<<<<<<<<
 *     return pickle.load(rbuf, rcount)
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Recv(__pyx_v_rbuf, __pyx_v_rcount, __pyx_v_rtype, __pyx_v_src, __pyx_v_tag, __pyx_v_comm, __pyx_v_status)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 971, __pyx_L7_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":972
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil: CHKERR( MPI_Recv(rbuf, rcount, rtype, src, tag, comm, status) )
 *     return pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_sendrecv_p2p(object obj,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":963
 *     return None
 * 
 * cdef object PyMPI_recv_p2p(int src, int tag, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *rbuf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_recv_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmpr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":974
 *     return pickle.load(rbuf, rcount)
 * 
 * cdef object PyMPI_sendrecv_p2p(object obj,             # <<<<<<<<<<<<<<
 *                                int dst, int stag,
 *                                int src, int rtag,
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_sendrecv_p2p(PyObject *__pyx_v_obj, int __pyx_v_dst, int __pyx_v_stag, int __pyx_v_src, int __pyx_v_rtag, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_sbuf;
  void *__pyx_v_rbuf;
  int __pyx_v_scount;
  int __pyx_v_rcount;
  MPI_Datatype __pyx_v_dtype;
  CYTHON_UNUSED PyObject *__pyx_v_tmps = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmpr = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("PyMPI_sendrecv_p2p", 0);

  /* "mpi4py/MPI/msgpickle.pxi":978
 *                                int src, int rtag,
 *                                MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void *sbuf = NULL, *rbuf = NULL
 *     cdef int scount = 0, rcount = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":979
 *                                MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *sbuf = NULL, *rbuf = NULL             # <<<<<<<<<<<<<<
 *     cdef int scount = 0, rcount = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE
 */
  __pyx_v_sbuf = NULL;
  __pyx_v_rbuf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":980
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *sbuf = NULL, *rbuf = NULL
 *     cdef int scount = 0, rcount = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 */
  __pyx_v_scount = 0;
  __pyx_v_rcount = 0;

  /* "mpi4py/MPI/msgpickle.pxi":981
 *     cdef void *sbuf = NULL, *rbuf = NULL
 *     cdef int scount = 0, rcount = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Sendrecv(&scount, 1, MPI_INT, dst, stag,
 */
  __pyx_v_dtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":982
 *     cdef int scount = 0, rcount = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Sendrecv(&scount, 1, MPI_INT, dst, stag,
 *                                      &rcount, 1, MPI_INT, src, rtag,
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_sbuf), (&__pyx_v_scount)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmps = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":983
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Sendrecv(&scount, 1, MPI_INT, dst, stag,             # <<<<<<<<<<<<<<
 *                                      &rcount, 1, MPI_INT, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":985
 *     with nogil: CHKERR( MPI_Sendrecv(&scount, 1, MPI_INT, dst, stag,
 *                                      &rcount, 1, MPI_INT, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )             # <<<<<<<<<<<<<<
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil: CHKERR( MPI_Sendrecv(sbuf, scount, dtype, dst, stag,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Sendrecv((&__pyx_v_scount), 1, MPI_INT, __pyx_v_dst, __pyx_v_stag, (&__pyx_v_rcount), 1, MPI_INT, __pyx_v_src, __pyx_v_rtag, __pyx_v_comm, MPI_STATUS_IGNORE)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 983, __pyx_L4_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":983
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef object tmps = pickle.dump(obj, &sbuf, &scount)
 *     with nogil: CHKERR( MPI_Sendrecv(&scount, 1, MPI_INT, dst, stag,             # <<<<<<<<<<<<<<
 *                                      &rcount, 1, MPI_INT, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":986
 *                                      &rcount, 1, MPI_INT, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Sendrecv(sbuf, scount, dtype, dst, stag,
 *                                      rbuf, rcount, dtype, src, rtag,
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_rbuf), __pyx_v_rcount); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmpr = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":987
 *                                      comm, MPI_STATUS_IGNORE) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil: CHKERR( MPI_Sendrecv(sbuf, scount, dtype, dst, stag,             # <<<<<<<<<<<<<<
 *                                      rbuf, rcount, dtype, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":989
 *     with nogil: CHKERR( MPI_Sendrecv(sbuf, scount, dtype, dst, stag,
 *                                      rbuf, rcount, dtype, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )             # <<<<<<<<<<<<<<
 *     return pickle.load(rbuf, rcount)
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Sendrecv(__pyx_v_sbuf, __pyx_v_scount, __pyx_v_dtype, __pyx_v_dst, __pyx_v_stag, __pyx_v_rbuf, __pyx_v_rcount, __pyx_v_dtype, __pyx_v_src, __pyx_v_rtag, __pyx_v_comm, MPI_STATUS_IGNORE)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 987, __pyx_L7_error)
      }

      /* "mpi4py/MPI/msgpickle.pxi":987
 *                                      comm, MPI_STATUS_IGNORE) )
 *     cdef object tmpr = pickle.alloc(&rbuf, rcount)
 *     with nogil: CHKERR( MPI_Sendrecv(sbuf, scount, dtype, dst, stag,             # <<<<<<<<<<<<<<
 *                                      rbuf, rcount, dtype, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/msgpickle.pxi":990
 *                                      rbuf, rcount, dtype, src, rtag,
 *                                      comm, MPI_STATUS_IGNORE) )
 *     return pickle.load(rbuf, rcount)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_bcast_p2p(object obj, int root, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_rbuf, __pyx_v_rcount); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":974
 *     return pickle.load(rbuf, rcount)
 * 
 * cdef object PyMPI_sendrecv_p2p(object obj,             # <<<<<<<<<<<<<<
 *                                int dst, int stag,
 *                                int src, int rtag,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_sendrecv_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_tmps);
  __Pyx_XDECREF(__pyx_v_tmpr);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":992
 *     return pickle.load(rbuf, rcount)
 * 
 * cdef object PyMPI_bcast_p2p(object obj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_bcast_p2p(PyObject *__pyx_v_obj, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *__pyx_v_pickle = 0;
  void *__pyx_v_buf;
  int __pyx_v_count;
  MPI_Datatype __pyx_v_dtype;
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_bcast_p2p", 0);
  __Pyx_INCREF(__pyx_v_obj);

  /* "mpi4py/MPI/msgpickle.pxi":993
 * 
 * cdef object PyMPI_bcast_p2p(object obj, int root, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 *     cdef void *buf = NULL
 *     cdef int count = 0
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __pyx_v_pickle = __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE;

  /* "mpi4py/MPI/msgpickle.pxi":994
 * cdef object PyMPI_bcast_p2p(object obj, int root, MPI_Comm comm):
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL             # <<<<<<<<<<<<<<
 *     cdef int count = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE
 */
  __pyx_v_buf = NULL;

  /* "mpi4py/MPI/msgpickle.pxi":995
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL
 *     cdef int count = 0             # <<<<<<<<<<<<<<
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef int rank = MPI_PROC_NULL
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/msgpickle.pxi":996
 *     cdef void *buf = NULL
 *     cdef int count = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE             # <<<<<<<<<<<<<<
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_v_dtype = MPI_BYTE;

  /* "mpi4py/MPI/msgpickle.pxi":997
 *     cdef int count = 0
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root == rank: obj = pickle.dump(obj, &buf, &count)
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":998
 *     cdef MPI_Datatype dtype = MPI_BYTE
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *     if root == rank: obj = pickle.dump(obj, &buf, &count)
 *     with PyMPI_Lock(comm, "@bcast_p2p@"):
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 998, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":999
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root == rank: obj = pickle.dump(obj, &buf, &count)             # <<<<<<<<<<<<<<
 *     with PyMPI_Lock(comm, "@bcast_p2p@"):
 *         with nogil: CHKERR( MPI_Bcast(&count, 1, MPI_INT, root, comm) )
 */
  __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_dump(__pyx_v_pickle, __pyx_v_obj, (&__pyx_v_buf), (&__pyx_v_count)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 999, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1000
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root == rank: obj = pickle.dump(obj, &buf, &count)
 *     with PyMPI_Lock(comm, "@bcast_p2p@"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(&count, 1, MPI_INT, root, comm) )
 *         if root != rank: obj = pickle.alloc(&buf, count)
 */
  /*with:*/ {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_kp_s_bcast_p2p); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1000, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1000, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 1000, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1000, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":1001
 *     if root == rank: obj = pickle.dump(obj, &buf, &count)
 *     with PyMPI_Lock(comm, "@bcast_p2p@"):
 *         with nogil: CHKERR( MPI_Bcast(&count, 1, MPI_INT, root, comm) )             # <<<<<<<<<<<<<<
 *         if root != rank: obj = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(buf, count, dtype, root, comm) )
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bcast((&__pyx_v_count), 1, MPI_INT, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1001, __pyx_L15_error)
              }
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L16;
                }
                __pyx_L15_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L8_error;
                }
                __pyx_L16:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":1002
 *     with PyMPI_Lock(comm, "@bcast_p2p@"):
 *         with nogil: CHKERR( MPI_Bcast(&count, 1, MPI_INT, root, comm) )
 *         if root != rank: obj = pickle.alloc(&buf, count)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(buf, count, dtype, root, comm) )
 *     return pickle.load(buf, count)
 */
          __pyx_t_2 = ((__pyx_v_root != __pyx_v_rank) != 0);
          if (__pyx_t_2) {
            __pyx_t_3 = __pyx_f_6mpi4py_3MPI_6Pickle_alloc(__pyx_v_pickle, (&__pyx_v_buf), __pyx_v_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1002, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_3);
            __pyx_t_3 = 0;
          }

          /* "mpi4py/MPI/msgpickle.pxi":1003
 *         with nogil: CHKERR( MPI_Bcast(&count, 1, MPI_INT, root, comm) )
 *         if root != rank: obj = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(buf, count, dtype, root, comm) )             # <<<<<<<<<<<<<<
 *     return pickle.load(buf, count)
 * 
 */
          {
              #ifdef WITH_THREAD
              PyThreadState *_save;
              Py_UNBLOCK_THREADS
              __Pyx_FastGIL_Remember();
              #endif
              /*try:*/ {
                __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bcast(__pyx_v_buf, __pyx_v_count, __pyx_v_dtype, __pyx_v_root, __pyx_v_comm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1003, __pyx_L19_error)
              }
              /*finally:*/ {
                /*normal exit:*/{
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L20;
                }
                __pyx_L19_error: {
                  #ifdef WITH_THREAD
                  __Pyx_FastGIL_Forget();
                  Py_BLOCK_THREADS
                  #endif
                  goto __pyx_L8_error;
                }
                __pyx_L20:;
              }
          }

          /* "mpi4py/MPI/msgpickle.pxi":1000
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root == rank: obj = pickle.dump(obj, &buf, &count)
 *     with PyMPI_Lock(comm, "@bcast_p2p@"):             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(&count, 1, MPI_INT, root, comm) )
 *         if root != rank: obj = pickle.alloc(&buf, count)
 */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_bcast_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(6, 1000, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 1000, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 1000, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_2 < 0) __PYX_ERR(6, 1000, __pyx_L10_except_error)
          __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_5);
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_5, __pyx_t_6);
            __pyx_t_3 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0; 
            __PYX_ERR(6, 1000, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_4) {
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 1000, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L24;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L1_error;
    __pyx_L24:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1004
 *         if root != rank: obj = pickle.alloc(&buf, count)
 *         with nogil: CHKERR( MPI_Bcast(buf, count, dtype, root, comm) )
 *     return pickle.load(buf, count)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_reduce_p2p(object sendobj, object op, int root,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __pyx_f_6mpi4py_3MPI_6Pickle_load(__pyx_v_pickle, __pyx_v_buf, __pyx_v_count); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 1004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":992
 *     return pickle.load(rbuf, rcount)
 * 
 * cdef object PyMPI_bcast_p2p(object obj, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef Pickle pickle = PyMPI_PICKLE
 *     cdef void *buf = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_bcast_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_pickle);
  __Pyx_XDECREF(__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1006
 *     return pickle.load(buf, count)
 * 
 * cdef object PyMPI_reduce_p2p(object sendobj, object op, int root,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_p2p(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root, MPI_Comm __pyx_v_comm, int __pyx_v_tag) {
  int __pyx_v_size;
  int __pyx_v_rank;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_v_tmp = 0;
  unsigned int __pyx_v_umask;
  unsigned int __pyx_v_usize;
  unsigned int __pyx_v_urank;
  int __pyx_v_target;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_reduce_p2p", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1009
 *                              MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 *     cdef int size = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_v_size = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1010
 *     # Get communicator size and rank
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1011
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     # Check root argument
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1011, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1012
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *     # Check root argument
 *     if root < 0 or root >= size:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1012, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1014
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     # Check root argument
 *     if root < 0 or root >= size:             # <<<<<<<<<<<<<<
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)
 *         raise MPIException(MPI_ERR_ROOT)
 */
  __pyx_t_3 = ((__pyx_v_root < 0) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_root >= __pyx_v_size) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgpickle.pxi":1015
 *     # Check root argument
 *     if root < 0 or root >= size:
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)             # <<<<<<<<<<<<<<
 *         raise MPIException(MPI_ERR_ROOT)
 *     #
 */
    ((void)MPI_Comm_call_errhandler(__pyx_v_comm, MPI_ERR_ROOT));

    /* "mpi4py/MPI/msgpickle.pxi":1016
 *     if root < 0 or root >= size:
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)
 *         raise MPIException(MPI_ERR_ROOT)             # <<<<<<<<<<<<<<
 *     #
 *     cdef object result = PyMPI_copy(sendobj)
 */
    __pyx_t_5 = __Pyx_PyInt_From_int(MPI_ERR_ROOT); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_MPIException);
    __pyx_t_6 = __pyx_v_6mpi4py_3MPI_MPIException; __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(6, 1016, __pyx_L1_error)

    /* "mpi4py/MPI/msgpickle.pxi":1014
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     # Check root argument
 *     if root < 0 or root >= size:             # <<<<<<<<<<<<<<
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)
 *         raise MPIException(MPI_ERR_ROOT)
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1018
 *         raise MPIException(MPI_ERR_ROOT)
 *     #
 *     cdef object result = PyMPI_copy(sendobj)             # <<<<<<<<<<<<<<
 *     cdef object tmp
 *     # Compute reduction at process 0
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_copy(__pyx_v_sendobj); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1018, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_result = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1021
 *     cdef object tmp
 *     # Compute reduction at process 0
 *     cdef unsigned int umask = <unsigned int> 1             # <<<<<<<<<<<<<<
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank
 */
  __pyx_v_umask = ((unsigned int)1);

  /* "mpi4py/MPI/msgpickle.pxi":1022
 *     # Compute reduction at process 0
 *     cdef unsigned int umask = <unsigned int> 1
 *     cdef unsigned int usize = <unsigned int> size             # <<<<<<<<<<<<<<
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef int target = 0
 */
  __pyx_v_usize = ((unsigned int)__pyx_v_size);

  /* "mpi4py/MPI/msgpickle.pxi":1023
 *     cdef unsigned int umask = <unsigned int> 1
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank             # <<<<<<<<<<<<<<
 *     cdef int target = 0
 *     while umask < usize:
 */
  __pyx_v_urank = ((unsigned int)__pyx_v_rank);

  /* "mpi4py/MPI/msgpickle.pxi":1024
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef int target = 0             # <<<<<<<<<<<<<<
 *     while umask < usize:
 *         if (umask & urank) != 0:
 */
  __pyx_v_target = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1025
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef int target = 0
 *     while umask < usize:             # <<<<<<<<<<<<<<
 *         if (umask & urank) != 0:
 *             target = <int> ((urank & ~umask) % usize)
 */
  while (1) {
    __pyx_t_2 = ((__pyx_v_umask < __pyx_v_usize) != 0);
    if (!__pyx_t_2) break;

    /* "mpi4py/MPI/msgpickle.pxi":1026
 *     cdef int target = 0
 *     while umask < usize:
 *         if (umask & urank) != 0:             # <<<<<<<<<<<<<<
 *             target = <int> ((urank & ~umask) % usize)
 *             PyMPI_send_p2p(result, target, tag, comm)
 */
    __pyx_t_2 = (((__pyx_v_umask & __pyx_v_urank) != 0) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":1027
 *     while umask < usize:
 *         if (umask & urank) != 0:
 *             target = <int> ((urank & ~umask) % usize)             # <<<<<<<<<<<<<<
 *             PyMPI_send_p2p(result, target, tag, comm)
 *         else:
 */
      __pyx_v_target = ((int)((__pyx_v_urank & (~__pyx_v_umask)) % __pyx_v_usize));

      /* "mpi4py/MPI/msgpickle.pxi":1028
 *         if (umask & urank) != 0:
 *             target = <int> ((urank & ~umask) % usize)
 *             PyMPI_send_p2p(result, target, tag, comm)             # <<<<<<<<<<<<<<
 *         else:
 *             target = <int> (urank | umask)
 */
      __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_send_p2p(__pyx_v_result, __pyx_v_target, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1028, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":1026
 *     cdef int target = 0
 *     while umask < usize:
 *         if (umask & urank) != 0:             # <<<<<<<<<<<<<<
 *             target = <int> ((urank & ~umask) % usize)
 *             PyMPI_send_p2p(result, target, tag, comm)
 */
      goto __pyx_L8;
    }

    /* "mpi4py/MPI/msgpickle.pxi":1030
 *             PyMPI_send_p2p(result, target, tag, comm)
 *         else:
 *             target = <int> (urank | umask)             # <<<<<<<<<<<<<<
 *             if target < size:
 *                 tmp = PyMPI_recv_p2p(target, tag, comm)
 */
    /*else*/ {
      __pyx_v_target = ((int)(__pyx_v_urank | __pyx_v_umask));

      /* "mpi4py/MPI/msgpickle.pxi":1031
 *         else:
 *             target = <int> (urank | umask)
 *             if target < size:             # <<<<<<<<<<<<<<
 *                 tmp = PyMPI_recv_p2p(target, tag, comm)
 *                 result = op(result, tmp)
 */
      __pyx_t_2 = ((__pyx_v_target < __pyx_v_size) != 0);
      if (__pyx_t_2) {

        /* "mpi4py/MPI/msgpickle.pxi":1032
 *             target = <int> (urank | umask)
 *             if target < size:
 *                 tmp = PyMPI_recv_p2p(target, tag, comm)             # <<<<<<<<<<<<<<
 *                 result = op(result, tmp)
 *         umask <<= 1
 */
        __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_recv_p2p(__pyx_v_target, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1032, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_tmp, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1033
 *             if target < size:
 *                 tmp = PyMPI_recv_p2p(target, tag, comm)
 *                 result = op(result, tmp)             # <<<<<<<<<<<<<<
 *         umask <<= 1
 *     # Send reduction to root
 */
        __Pyx_INCREF(__pyx_v_op);
        __pyx_t_6 = __pyx_v_op; __pyx_t_5 = NULL;
        __pyx_t_1 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_1 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_6)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_result, __pyx_v_tmp};
          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1033, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_4);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_result, __pyx_v_tmp};
          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1033, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_4);
        } else
        #endif
        {
          __pyx_t_7 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 1033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(__pyx_v_result);
          __Pyx_GIVEREF(__pyx_v_result);
          PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_1, __pyx_v_result);
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_1, __pyx_v_tmp);
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1031
 *         else:
 *             target = <int> (urank | umask)
 *             if target < size:             # <<<<<<<<<<<<<<
 *                 tmp = PyMPI_recv_p2p(target, tag, comm)
 *                 result = op(result, tmp)
 */
      }
    }
    __pyx_L8:;

    /* "mpi4py/MPI/msgpickle.pxi":1034
 *                 tmp = PyMPI_recv_p2p(target, tag, comm)
 *                 result = op(result, tmp)
 *         umask <<= 1             # <<<<<<<<<<<<<<
 *     # Send reduction to root
 *     if root != 0:
 */
    __pyx_v_umask = (__pyx_v_umask << 1);
  }

  /* "mpi4py/MPI/msgpickle.pxi":1036
 *         umask <<= 1
 *     # Send reduction to root
 *     if root != 0:             # <<<<<<<<<<<<<<
 *         if rank == 0:
 *             PyMPI_send_p2p(result, root, tag, comm)
 */
  __pyx_t_2 = ((__pyx_v_root != 0) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":1037
 *     # Send reduction to root
 *     if root != 0:
 *         if rank == 0:             # <<<<<<<<<<<<<<
 *             PyMPI_send_p2p(result, root, tag, comm)
 *         elif rank == root:
 */
    __pyx_t_2 = ((__pyx_v_rank == 0) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":1038
 *     if root != 0:
 *         if rank == 0:
 *             PyMPI_send_p2p(result, root, tag, comm)             # <<<<<<<<<<<<<<
 *         elif rank == root:
 *             result = PyMPI_recv_p2p(0, tag, comm)
 */
      __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_send_p2p(__pyx_v_result, __pyx_v_root, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1038, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":1037
 *     # Send reduction to root
 *     if root != 0:
 *         if rank == 0:             # <<<<<<<<<<<<<<
 *             PyMPI_send_p2p(result, root, tag, comm)
 *         elif rank == root:
 */
      goto __pyx_L11;
    }

    /* "mpi4py/MPI/msgpickle.pxi":1039
 *         if rank == 0:
 *             PyMPI_send_p2p(result, root, tag, comm)
 *         elif rank == root:             # <<<<<<<<<<<<<<
 *             result = PyMPI_recv_p2p(0, tag, comm)
 *     if rank != root:
 */
    __pyx_t_2 = ((__pyx_v_rank == __pyx_v_root) != 0);
    if (__pyx_t_2) {

      /* "mpi4py/MPI/msgpickle.pxi":1040
 *             PyMPI_send_p2p(result, root, tag, comm)
 *         elif rank == root:
 *             result = PyMPI_recv_p2p(0, tag, comm)             # <<<<<<<<<<<<<<
 *     if rank != root:
 *         result = None
 */
      __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_recv_p2p(0, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1040, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":1039
 *         if rank == 0:
 *             PyMPI_send_p2p(result, root, tag, comm)
 *         elif rank == root:             # <<<<<<<<<<<<<<
 *             result = PyMPI_recv_p2p(0, tag, comm)
 *     if rank != root:
 */
    }
    __pyx_L11:;

    /* "mpi4py/MPI/msgpickle.pxi":1036
 *         umask <<= 1
 *     # Send reduction to root
 *     if root != 0:             # <<<<<<<<<<<<<<
 *         if rank == 0:
 *             PyMPI_send_p2p(result, root, tag, comm)
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1041
 *         elif rank == root:
 *             result = PyMPI_recv_p2p(0, tag, comm)
 *     if rank != root:             # <<<<<<<<<<<<<<
 *         result = None
 *     #
 */
  __pyx_t_2 = ((__pyx_v_rank != __pyx_v_root) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":1042
 *             result = PyMPI_recv_p2p(0, tag, comm)
 *     if rank != root:
 *         result = None             # <<<<<<<<<<<<<<
 *     #
 *     return result
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_result, Py_None);

    /* "mpi4py/MPI/msgpickle.pxi":1041
 *         elif rank == root:
 *             result = PyMPI_recv_p2p(0, tag, comm)
 *     if rank != root:             # <<<<<<<<<<<<<<
 *         result = None
 *     #
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1044
 *         result = None
 *     #
 *     return result             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_scan_p2p(object sendobj, object op,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1006
 *     return pickle.load(buf, count)
 * 
 * cdef object PyMPI_reduce_p2p(object sendobj, object op, int root,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_reduce_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1046
 *     return result
 * 
 * cdef object PyMPI_scan_p2p(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                            MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan_p2p(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm, int __pyx_v_tag) {
  int __pyx_v_size;
  int __pyx_v_rank;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_v_partial = 0;
  PyObject *__pyx_v_tmp = 0;
  unsigned int __pyx_v_umask;
  unsigned int __pyx_v_usize;
  unsigned int __pyx_v_urank;
  int __pyx_v_target;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_scan_p2p", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1049
 *                            MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 *     cdef int size = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_v_size = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1050
 *     # Get communicator size and rank
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1051
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1051, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1052
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *     #
 *     cdef object result  = PyMPI_copy(sendobj)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1052, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1054
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     #
 *     cdef object result  = PyMPI_copy(sendobj)             # <<<<<<<<<<<<<<
 *     cdef object partial = result
 *     cdef object tmp
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_copy(__pyx_v_sendobj); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1055
 *     #
 *     cdef object result  = PyMPI_copy(sendobj)
 *     cdef object partial = result             # <<<<<<<<<<<<<<
 *     cdef object tmp
 *     # Compute prefix reduction
 */
  __Pyx_INCREF(__pyx_v_result);
  __pyx_v_partial = __pyx_v_result;

  /* "mpi4py/MPI/msgpickle.pxi":1058
 *     cdef object tmp
 *     # Compute prefix reduction
 *     cdef unsigned int umask = <unsigned int> 1             # <<<<<<<<<<<<<<
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank
 */
  __pyx_v_umask = ((unsigned int)1);

  /* "mpi4py/MPI/msgpickle.pxi":1059
 *     # Compute prefix reduction
 *     cdef unsigned int umask = <unsigned int> 1
 *     cdef unsigned int usize = <unsigned int> size             # <<<<<<<<<<<<<<
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef int target = 0
 */
  __pyx_v_usize = ((unsigned int)__pyx_v_size);

  /* "mpi4py/MPI/msgpickle.pxi":1060
 *     cdef unsigned int umask = <unsigned int> 1
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank             # <<<<<<<<<<<<<<
 *     cdef int target = 0
 *     while umask < usize:
 */
  __pyx_v_urank = ((unsigned int)__pyx_v_rank);

  /* "mpi4py/MPI/msgpickle.pxi":1061
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef int target = 0             # <<<<<<<<<<<<<<
 *     while umask < usize:
 *         target = <int> (urank ^ umask)
 */
  __pyx_v_target = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1062
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef int target = 0
 *     while umask < usize:             # <<<<<<<<<<<<<<
 *         target = <int> (urank ^ umask)
 *         if target < size:
 */
  while (1) {
    __pyx_t_3 = ((__pyx_v_umask < __pyx_v_usize) != 0);
    if (!__pyx_t_3) break;

    /* "mpi4py/MPI/msgpickle.pxi":1063
 *     cdef int target = 0
 *     while umask < usize:
 *         target = <int> (urank ^ umask)             # <<<<<<<<<<<<<<
 *         if target < size:
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 */
    __pyx_v_target = ((int)(__pyx_v_urank ^ __pyx_v_umask));

    /* "mpi4py/MPI/msgpickle.pxi":1064
 *     while umask < usize:
 *         target = <int> (urank ^ umask)
 *         if target < size:             # <<<<<<<<<<<<<<
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 */
    __pyx_t_3 = ((__pyx_v_target < __pyx_v_size) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgpickle.pxi":1065
 *         target = <int> (urank ^ umask)
 *         if target < size:
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,             # <<<<<<<<<<<<<<
 *                                      target, tag, comm)
 *             if rank > target:
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_sendrecv_p2p(__pyx_v_partial, __pyx_v_target, __pyx_v_tag, __pyx_v_target, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1065, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_tmp, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":1067
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 *             if rank > target:             # <<<<<<<<<<<<<<
 *                 partial = op(tmp, partial)
 *                 result = op(tmp, result)
 */
      __pyx_t_3 = ((__pyx_v_rank > __pyx_v_target) != 0);
      if (__pyx_t_3) {

        /* "mpi4py/MPI/msgpickle.pxi":1068
 *                                      target, tag, comm)
 *             if rank > target:
 *                 partial = op(tmp, partial)             # <<<<<<<<<<<<<<
 *                 result = op(tmp, result)
 *             else:
 */
        __Pyx_INCREF(__pyx_v_op);
        __pyx_t_4 = __pyx_v_op; __pyx_t_5 = NULL;
        __pyx_t_1 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_1 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_tmp, __pyx_v_partial};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1068, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_tmp, __pyx_v_partial};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1068, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 1068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_1, __pyx_v_tmp);
          __Pyx_INCREF(__pyx_v_partial);
          __Pyx_GIVEREF(__pyx_v_partial);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_partial);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_partial, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1069
 *             if rank > target:
 *                 partial = op(tmp, partial)
 *                 result = op(tmp, result)             # <<<<<<<<<<<<<<
 *             else:
 *                 tmp = op(partial, tmp)
 */
        __Pyx_INCREF(__pyx_v_op);
        __pyx_t_4 = __pyx_v_op; __pyx_t_6 = NULL;
        __pyx_t_1 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_1 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_tmp, __pyx_v_result};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1069, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_tmp, __pyx_v_result};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1069, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_5 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (__pyx_t_6) {
            __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
          }
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_1, __pyx_v_tmp);
          __Pyx_INCREF(__pyx_v_result);
          __Pyx_GIVEREF(__pyx_v_result);
          PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_1, __pyx_v_result);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1067
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 *             if rank > target:             # <<<<<<<<<<<<<<
 *                 partial = op(tmp, partial)
 *                 result = op(tmp, result)
 */
        goto __pyx_L6;
      }

      /* "mpi4py/MPI/msgpickle.pxi":1071
 *                 result = op(tmp, result)
 *             else:
 *                 tmp = op(partial, tmp)             # <<<<<<<<<<<<<<
 *                 partial = tmp
 *         umask <<= 1
 */
      /*else*/ {
        __Pyx_INCREF(__pyx_v_op);
        __pyx_t_4 = __pyx_v_op; __pyx_t_5 = NULL;
        __pyx_t_1 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_1 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_partial, __pyx_v_tmp};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1071, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_partial, __pyx_v_tmp};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1071, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 1071, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(__pyx_v_partial);
          __Pyx_GIVEREF(__pyx_v_partial);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_1, __pyx_v_partial);
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_tmp);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1071, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_tmp, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1072
 *             else:
 *                 tmp = op(partial, tmp)
 *                 partial = tmp             # <<<<<<<<<<<<<<
 *         umask <<= 1
 *     #
 */
        __Pyx_INCREF(__pyx_v_tmp);
        __Pyx_DECREF_SET(__pyx_v_partial, __pyx_v_tmp);
      }
      __pyx_L6:;

      /* "mpi4py/MPI/msgpickle.pxi":1064
 *     while umask < usize:
 *         target = <int> (urank ^ umask)
 *         if target < size:             # <<<<<<<<<<<<<<
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":1073
 *                 tmp = op(partial, tmp)
 *                 partial = tmp
 *         umask <<= 1             # <<<<<<<<<<<<<<
 *     #
 *     return result
 */
    __pyx_v_umask = (__pyx_v_umask << 1);
  }

  /* "mpi4py/MPI/msgpickle.pxi":1075
 *         umask <<= 1
 *     #
 *     return result             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_exscan_p2p(object sendobj, object op,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1046
 *     return result
 * 
 * cdef object PyMPI_scan_p2p(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                            MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_scan_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_partial);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1077
 *     return result
 * 
 * cdef object PyMPI_exscan_p2p(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan_p2p(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm, int __pyx_v_tag) {
  int __pyx_v_size;
  int __pyx_v_rank;
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_v_partial = 0;
  PyObject *__pyx_v_tmp = 0;
  unsigned int __pyx_v_umask;
  unsigned int __pyx_v_usize;
  unsigned int __pyx_v_urank;
  unsigned int __pyx_v_uflag;
  int __pyx_v_target;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_exscan_p2p", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1080
 *                              MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 *     cdef int size = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )
 */
  __pyx_v_size = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1081
 *     # Get communicator size and rank
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1082
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1082, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1083
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *     #
 *     cdef object result  = PyMPI_copy(sendobj)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1083, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1085
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     #
 *     cdef object result  = PyMPI_copy(sendobj)             # <<<<<<<<<<<<<<
 *     cdef object partial = result
 *     cdef object tmp
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_copy(__pyx_v_sendobj); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1086
 *     #
 *     cdef object result  = PyMPI_copy(sendobj)
 *     cdef object partial = result             # <<<<<<<<<<<<<<
 *     cdef object tmp
 *     # Compute prefix reduction
 */
  __Pyx_INCREF(__pyx_v_result);
  __pyx_v_partial = __pyx_v_result;

  /* "mpi4py/MPI/msgpickle.pxi":1089
 *     cdef object tmp
 *     # Compute prefix reduction
 *     cdef unsigned int umask = <unsigned int> 1             # <<<<<<<<<<<<<<
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank
 */
  __pyx_v_umask = ((unsigned int)1);

  /* "mpi4py/MPI/msgpickle.pxi":1090
 *     # Compute prefix reduction
 *     cdef unsigned int umask = <unsigned int> 1
 *     cdef unsigned int usize = <unsigned int> size             # <<<<<<<<<<<<<<
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef unsigned int uflag = <unsigned int> 0
 */
  __pyx_v_usize = ((unsigned int)__pyx_v_size);

  /* "mpi4py/MPI/msgpickle.pxi":1091
 *     cdef unsigned int umask = <unsigned int> 1
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank             # <<<<<<<<<<<<<<
 *     cdef unsigned int uflag = <unsigned int> 0
 *     cdef int target = 0
 */
  __pyx_v_urank = ((unsigned int)__pyx_v_rank);

  /* "mpi4py/MPI/msgpickle.pxi":1092
 *     cdef unsigned int usize = <unsigned int> size
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef unsigned int uflag = <unsigned int> 0             # <<<<<<<<<<<<<<
 *     cdef int target = 0
 *     while umask < usize:
 */
  __pyx_v_uflag = ((unsigned int)0);

  /* "mpi4py/MPI/msgpickle.pxi":1093
 *     cdef unsigned int urank = <unsigned int> rank
 *     cdef unsigned int uflag = <unsigned int> 0
 *     cdef int target = 0             # <<<<<<<<<<<<<<
 *     while umask < usize:
 *         target = <int> (urank ^ umask)
 */
  __pyx_v_target = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1094
 *     cdef unsigned int uflag = <unsigned int> 0
 *     cdef int target = 0
 *     while umask < usize:             # <<<<<<<<<<<<<<
 *         target = <int> (urank ^ umask)
 *         if target < size:
 */
  while (1) {
    __pyx_t_3 = ((__pyx_v_umask < __pyx_v_usize) != 0);
    if (!__pyx_t_3) break;

    /* "mpi4py/MPI/msgpickle.pxi":1095
 *     cdef int target = 0
 *     while umask < usize:
 *         target = <int> (urank ^ umask)             # <<<<<<<<<<<<<<
 *         if target < size:
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 */
    __pyx_v_target = ((int)(__pyx_v_urank ^ __pyx_v_umask));

    /* "mpi4py/MPI/msgpickle.pxi":1096
 *     while umask < usize:
 *         target = <int> (urank ^ umask)
 *         if target < size:             # <<<<<<<<<<<<<<
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 */
    __pyx_t_3 = ((__pyx_v_target < __pyx_v_size) != 0);
    if (__pyx_t_3) {

      /* "mpi4py/MPI/msgpickle.pxi":1097
 *         target = <int> (urank ^ umask)
 *         if target < size:
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,             # <<<<<<<<<<<<<<
 *                                      target, tag, comm)
 *             if rank > target:
 */
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_sendrecv_p2p(__pyx_v_partial, __pyx_v_target, __pyx_v_tag, __pyx_v_target, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1097, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF_SET(__pyx_v_tmp, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":1099
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 *             if rank > target:             # <<<<<<<<<<<<<<
 *                 partial = op(tmp, partial)
 *                 if uflag == 0:
 */
      __pyx_t_3 = ((__pyx_v_rank > __pyx_v_target) != 0);
      if (__pyx_t_3) {

        /* "mpi4py/MPI/msgpickle.pxi":1100
 *                                      target, tag, comm)
 *             if rank > target:
 *                 partial = op(tmp, partial)             # <<<<<<<<<<<<<<
 *                 if uflag == 0:
 *                     result = tmp; uflag = 1
 */
        __Pyx_INCREF(__pyx_v_op);
        __pyx_t_4 = __pyx_v_op; __pyx_t_5 = NULL;
        __pyx_t_1 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_1 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_tmp, __pyx_v_partial};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1100, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_tmp, __pyx_v_partial};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1100, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 1100, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_1, __pyx_v_tmp);
          __Pyx_INCREF(__pyx_v_partial);
          __Pyx_GIVEREF(__pyx_v_partial);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_partial);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1100, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_partial, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1101
 *             if rank > target:
 *                 partial = op(tmp, partial)
 *                 if uflag == 0:             # <<<<<<<<<<<<<<
 *                     result = tmp; uflag = 1
 *                 else:
 */
        __pyx_t_3 = ((__pyx_v_uflag == 0) != 0);
        if (__pyx_t_3) {

          /* "mpi4py/MPI/msgpickle.pxi":1102
 *                 partial = op(tmp, partial)
 *                 if uflag == 0:
 *                     result = tmp; uflag = 1             # <<<<<<<<<<<<<<
 *                 else:
 *                     result = op(tmp, result)
 */
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_DECREF_SET(__pyx_v_result, __pyx_v_tmp);
          __pyx_v_uflag = 1;

          /* "mpi4py/MPI/msgpickle.pxi":1101
 *             if rank > target:
 *                 partial = op(tmp, partial)
 *                 if uflag == 0:             # <<<<<<<<<<<<<<
 *                     result = tmp; uflag = 1
 *                 else:
 */
          goto __pyx_L7;
        }

        /* "mpi4py/MPI/msgpickle.pxi":1104
 *                     result = tmp; uflag = 1
 *                 else:
 *                     result = op(tmp, result)             # <<<<<<<<<<<<<<
 *             else:
 *                 tmp = op(partial, tmp)
 */
        /*else*/ {
          __Pyx_INCREF(__pyx_v_op);
          __pyx_t_4 = __pyx_v_op; __pyx_t_6 = NULL;
          __pyx_t_1 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_6)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_6);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
              __pyx_t_1 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_4)) {
            PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_tmp, __pyx_v_result};
            __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1104, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_GOTREF(__pyx_t_2);
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
            PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_tmp, __pyx_v_result};
            __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1104, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_GOTREF(__pyx_t_2);
          } else
          #endif
          {
            __pyx_t_5 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1104, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            if (__pyx_t_6) {
              __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6); __pyx_t_6 = NULL;
            }
            __Pyx_INCREF(__pyx_v_tmp);
            __Pyx_GIVEREF(__pyx_v_tmp);
            PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_1, __pyx_v_tmp);
            __Pyx_INCREF(__pyx_v_result);
            __Pyx_GIVEREF(__pyx_v_result);
            PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_1, __pyx_v_result);
            __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1104, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          }
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_2);
          __pyx_t_2 = 0;
        }
        __pyx_L7:;

        /* "mpi4py/MPI/msgpickle.pxi":1099
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 *             if rank > target:             # <<<<<<<<<<<<<<
 *                 partial = op(tmp, partial)
 *                 if uflag == 0:
 */
        goto __pyx_L6;
      }

      /* "mpi4py/MPI/msgpickle.pxi":1106
 *                     result = op(tmp, result)
 *             else:
 *                 tmp = op(partial, tmp)             # <<<<<<<<<<<<<<
 *                 partial = tmp
 *         umask <<= 1
 */
      /*else*/ {
        __Pyx_INCREF(__pyx_v_op);
        __pyx_t_4 = __pyx_v_op; __pyx_t_5 = NULL;
        __pyx_t_1 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_1 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_partial, __pyx_v_tmp};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1106, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_partial, __pyx_v_tmp};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_1, 2+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1106, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_2);
        } else
        #endif
        {
          __pyx_t_6 = PyTuple_New(2+__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 1106, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_INCREF(__pyx_v_partial);
          __Pyx_GIVEREF(__pyx_v_partial);
          PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_1, __pyx_v_partial);
          __Pyx_INCREF(__pyx_v_tmp);
          __Pyx_GIVEREF(__pyx_v_tmp);
          PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_1, __pyx_v_tmp);
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1106, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF_SET(__pyx_v_tmp, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":1107
 *             else:
 *                 tmp = op(partial, tmp)
 *                 partial = tmp             # <<<<<<<<<<<<<<
 *         umask <<= 1
 *     #
 */
        __Pyx_INCREF(__pyx_v_tmp);
        __Pyx_DECREF_SET(__pyx_v_partial, __pyx_v_tmp);
      }
      __pyx_L6:;

      /* "mpi4py/MPI/msgpickle.pxi":1096
 *     while umask < usize:
 *         target = <int> (urank ^ umask)
 *         if target < size:             # <<<<<<<<<<<<<<
 *             tmp = PyMPI_sendrecv_p2p(partial, target, tag,
 *                                      target, tag, comm)
 */
    }

    /* "mpi4py/MPI/msgpickle.pxi":1108
 *                 tmp = op(partial, tmp)
 *                 partial = tmp
 *         umask <<= 1             # <<<<<<<<<<<<<<
 *     #
 *     if rank == 0:
 */
    __pyx_v_umask = (__pyx_v_umask << 1);
  }

  /* "mpi4py/MPI/msgpickle.pxi":1110
 *         umask <<= 1
 *     #
 *     if rank == 0:             # <<<<<<<<<<<<<<
 *         result = None
 *     return result
 */
  __pyx_t_3 = ((__pyx_v_rank == 0) != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgpickle.pxi":1111
 *     #
 *     if rank == 0:
 *         result = None             # <<<<<<<<<<<<<<
 *     return result
 * 
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_result, Py_None);

    /* "mpi4py/MPI/msgpickle.pxi":1110
 *         umask <<= 1
 *     #
 *     if rank == 0:             # <<<<<<<<<<<<<<
 *         result = None
 *     return result
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1112
 *     if rank == 0:
 *         result = None
 *     return result             # <<<<<<<<<<<<<<
 * 
 * # -----
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1077
 *     return result
 * 
 * cdef object PyMPI_exscan_p2p(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                              MPI_Comm comm, int tag):
 *     # Get communicator size and rank
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_exscan_p2p", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XDECREF(__pyx_v_partial);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1120
 *     int PyMPI_Commctx_inter(MPI_Comm,MPI_Comm*,int*,MPI_Comm*,int*) nogil
 * 
 * cdef int PyMPI_Commctx_INTRA(MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                              MPI_Comm *dupcomm, int *tag) except -1:
 *     with PyMPI_Lock(comm, "@commctx_intra"):
 */

static int __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTRA(MPI_Comm __pyx_v_comm, MPI_Comm *__pyx_v_dupcomm, int *__pyx_v_tag) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_Commctx_INTRA", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1122
 * cdef int PyMPI_Commctx_INTRA(MPI_Comm comm,
 *                              MPI_Comm *dupcomm, int *tag) except -1:
 *     with PyMPI_Lock(comm, "@commctx_intra"):             # <<<<<<<<<<<<<<
 *         CHKERR( PyMPI_Commctx_intra(comm, dupcomm, tag) )
 *     return 0
 */
  /*with:*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_kp_s_commctx_intra); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1122, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1122, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":1123
 *                              MPI_Comm *dupcomm, int *tag) except -1:
 *     with PyMPI_Lock(comm, "@commctx_intra"):
 *         CHKERR( PyMPI_Commctx_intra(comm, dupcomm, tag) )             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
          __pyx_t_9 = __pyx_f_6mpi4py_3MPI_CHKERR(PyMPI_Commctx_intra(__pyx_v_comm, __pyx_v_dupcomm, __pyx_v_tag)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(6, 1123, __pyx_L7_error)

          /* "mpi4py/MPI/msgpickle.pxi":1122
 * cdef int PyMPI_Commctx_INTRA(MPI_Comm comm,
 *                              MPI_Comm *dupcomm, int *tag) except -1:
 *     with PyMPI_Lock(comm, "@commctx_intra"):             # <<<<<<<<<<<<<<
 *         CHKERR( PyMPI_Commctx_intra(comm, dupcomm, tag) )
 *     return 0
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Commctx_INTRA", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(6, 1122, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1122, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 1122, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(6, 1122, __pyx_L9_except_error)
          __pyx_t_12 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_4);
            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; 
            __PYX_ERR(6, 1122, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1122, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1124
 *     with PyMPI_Lock(comm, "@commctx_intra"):
 *         CHKERR( PyMPI_Commctx_intra(comm, dupcomm, tag) )
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * cdef int PyMPI_Commctx_INTER(MPI_Comm comm,
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1120
 *     int PyMPI_Commctx_inter(MPI_Comm,MPI_Comm*,int*,MPI_Comm*,int*) nogil
 * 
 * cdef int PyMPI_Commctx_INTRA(MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                              MPI_Comm *dupcomm, int *tag) except -1:
 *     with PyMPI_Lock(comm, "@commctx_intra"):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Commctx_INTRA", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1126
 *     return 0
 * 
 * cdef int PyMPI_Commctx_INTER(MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                              MPI_Comm *dupcomm, int *tag,
 *                              MPI_Comm *localcomm, int *low_group) except -1:
 */

static int __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTER(MPI_Comm __pyx_v_comm, MPI_Comm *__pyx_v_dupcomm, int *__pyx_v_tag, MPI_Comm *__pyx_v_localcomm, int *__pyx_v_low_group) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("PyMPI_Commctx_INTER", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1129
 *                              MPI_Comm *dupcomm, int *tag,
 *                              MPI_Comm *localcomm, int *low_group) except -1:
 *     with PyMPI_Lock(comm, "@commctx_inter"):             # <<<<<<<<<<<<<<
 *         CHKERR( PyMPI_Commctx_inter(comm, dupcomm, tag,
 *                                     localcomm, low_group) )
 */
  /*with:*/ {
    __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Lock(__pyx_v_comm, __pyx_kp_s_commctx_inter); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1129, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1129, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        /*try:*/ {

          /* "mpi4py/MPI/msgpickle.pxi":1130
 *                              MPI_Comm *localcomm, int *low_group) except -1:
 *     with PyMPI_Lock(comm, "@commctx_inter"):
 *         CHKERR( PyMPI_Commctx_inter(comm, dupcomm, tag,             # <<<<<<<<<<<<<<
 *                                     localcomm, low_group) )
 *     return 0
 */
          __pyx_t_9 = __pyx_f_6mpi4py_3MPI_CHKERR(PyMPI_Commctx_inter(__pyx_v_comm, __pyx_v_dupcomm, __pyx_v_tag, __pyx_v_localcomm, __pyx_v_low_group)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(6, 1130, __pyx_L7_error)

          /* "mpi4py/MPI/msgpickle.pxi":1129
 *                              MPI_Comm *dupcomm, int *tag,
 *                              MPI_Comm *localcomm, int *low_group) except -1:
 *     with PyMPI_Lock(comm, "@commctx_inter"):             # <<<<<<<<<<<<<<
 *         CHKERR( PyMPI_Commctx_inter(comm, dupcomm, tag,
 *                                     localcomm, low_group) )
 */
        }
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L12_try_end;
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Commctx_INTER", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_4) < 0) __PYX_ERR(6, 1129, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1129, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 1129, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(6, 1129, __pyx_L9_except_error)
          __pyx_t_12 = ((!(__pyx_t_11 != 0)) != 0);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_XGIVEREF(__pyx_t_4);
            __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_3, __pyx_t_4);
            __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_4 = 0; 
            __PYX_ERR(6, 1129, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        goto __pyx_L1_error;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
        __pyx_L12_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__24, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1129, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1132
 *         CHKERR( PyMPI_Commctx_inter(comm, dupcomm, tag,
 *                                     localcomm, low_group) )
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1126
 *     return 0
 * 
 * cdef int PyMPI_Commctx_INTER(MPI_Comm comm,             # <<<<<<<<<<<<<<
 *                              MPI_Comm *dupcomm, int *tag,
 *                              MPI_Comm *localcomm, int *low_group) except -1:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_Commctx_INTER", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1135
 * 
 * 
 * cdef object PyMPI_reduce_intra(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_intra(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  int __pyx_v_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_reduce_intra", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1137
 * cdef object PyMPI_reduce_intra(object sendobj, object op,
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     return PyMPI_reduce_p2p(sendobj, op, root, comm, tag)
 */
  __pyx_v_tag = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1138
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)             # <<<<<<<<<<<<<<
 *     return PyMPI_reduce_p2p(sendobj, op, root, comm, tag)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTRA(__pyx_v_comm, (&__pyx_v_comm), (&__pyx_v_tag)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1138, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1139
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     return PyMPI_reduce_p2p(sendobj, op, root, comm, tag)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_reduce_inter(object sendobj, object op,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_p2p(__pyx_v_sendobj, __pyx_v_op, __pyx_v_root, __pyx_v_comm, __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1135
 * 
 * 
 * cdef object PyMPI_reduce_intra(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_reduce_intra", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1141
 *     return PyMPI_reduce_p2p(sendobj, op, root, comm, tag)
 * 
 * cdef object PyMPI_reduce_inter(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce_inter(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  int __pyx_v_tag;
  MPI_Comm __pyx_v_localcomm;
  int __pyx_v_size;
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_reduce_inter", 0);
  __Pyx_INCREF(__pyx_v_sendobj);

  /* "mpi4py/MPI/msgpickle.pxi":1143
 * cdef object PyMPI_reduce_inter(object sendobj, object op,
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)
 */
  __pyx_v_tag = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1144
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)
 *     # Get communicator remote size and rank
 */
  __pyx_v_localcomm = MPI_COMM_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1145
 *     cdef int tag = MPI_UNDEFINED
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)             # <<<<<<<<<<<<<<
 *     # Get communicator remote size and rank
 *     cdef int size = MPI_UNDEFINED
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTER(__pyx_v_comm, (&__pyx_v_comm), (&__pyx_v_tag), (&__pyx_v_localcomm), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1145, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1147
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)
 *     # Get communicator remote size and rank
 *     cdef int size = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_remote_size(comm, &size) )
 */
  __pyx_v_size = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1148
 *     # Get communicator remote size and rank
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1149
 *     cdef int size = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_remote_size(comm, &size) )             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root >= 0 and root < size:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_comm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1149, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1150
 *     cdef int rank = MPI_PROC_NULL
 *     CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *     if root >= 0 and root < size:
 *         # Reduce in local group and send to remote root
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1150, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1151
 *     CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root >= 0 and root < size:             # <<<<<<<<<<<<<<
 *         # Reduce in local group and send to remote root
 *         sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 */
  __pyx_t_3 = ((__pyx_v_root >= 0) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_root < __pyx_v_size) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":1153
 *     if root >= 0 and root < size:
 *         # Reduce in local group and send to remote root
 *         sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)             # <<<<<<<<<<<<<<
 *         if rank == 0: PyMPI_send_p2p(sendobj, root, tag, comm)
 *         return None
 */
    __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_p2p(__pyx_v_sendobj, __pyx_v_op, 0, __pyx_v_localcomm, __pyx_v_tag); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_sendobj, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":1154
 *         # Reduce in local group and send to remote root
 *         sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 *         if rank == 0: PyMPI_send_p2p(sendobj, root, tag, comm)             # <<<<<<<<<<<<<<
 *         return None
 *     elif root == MPI_ROOT: # Receive from remote group
 */
    __pyx_t_2 = ((__pyx_v_rank == 0) != 0);
    if (__pyx_t_2) {
      __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_send_p2p(__pyx_v_sendobj, __pyx_v_root, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1154, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }

    /* "mpi4py/MPI/msgpickle.pxi":1155
 *         sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 *         if rank == 0: PyMPI_send_p2p(sendobj, root, tag, comm)
 *         return None             # <<<<<<<<<<<<<<
 *     elif root == MPI_ROOT: # Receive from remote group
 *         return PyMPI_recv_p2p(0, tag, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1151
 *     CHKERR( MPI_Comm_remote_size(comm, &size) )
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     if root >= 0 and root < size:             # <<<<<<<<<<<<<<
 *         # Reduce in local group and send to remote root
 *         sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1156
 *         if rank == 0: PyMPI_send_p2p(sendobj, root, tag, comm)
 *         return None
 *     elif root == MPI_ROOT: # Receive from remote group             # <<<<<<<<<<<<<<
 *         return PyMPI_recv_p2p(0, tag, comm)
 *     elif root == MPI_PROC_NULL: # This process does nothing
 */
  __pyx_t_2 = ((__pyx_v_root == MPI_ROOT) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/msgpickle.pxi":1157
 *         return None
 *     elif root == MPI_ROOT: # Receive from remote group
 *         return PyMPI_recv_p2p(0, tag, comm)             # <<<<<<<<<<<<<<
 *     elif root == MPI_PROC_NULL: # This process does nothing
 *         return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __pyx_f_6mpi4py_3MPI_PyMPI_recv_p2p(0, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1157, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1156
 *         if rank == 0: PyMPI_send_p2p(sendobj, root, tag, comm)
 *         return None
 *     elif root == MPI_ROOT: # Receive from remote group             # <<<<<<<<<<<<<<
 *         return PyMPI_recv_p2p(0, tag, comm)
 *     elif root == MPI_PROC_NULL: # This process does nothing
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1158
 *     elif root == MPI_ROOT: # Receive from remote group
 *         return PyMPI_recv_p2p(0, tag, comm)
 *     elif root == MPI_PROC_NULL: # This process does nothing             # <<<<<<<<<<<<<<
 *         return None
 *     else: # Wrong root argument
 */
  __pyx_t_2 = ((__pyx_v_root == MPI_PROC_NULL) != 0);
  if (likely(__pyx_t_2)) {

    /* "mpi4py/MPI/msgpickle.pxi":1159
 *         return PyMPI_recv_p2p(0, tag, comm)
 *     elif root == MPI_PROC_NULL: # This process does nothing
 *         return None             # <<<<<<<<<<<<<<
 *     else: # Wrong root argument
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1158
 *     elif root == MPI_ROOT: # Receive from remote group
 *         return PyMPI_recv_p2p(0, tag, comm)
 *     elif root == MPI_PROC_NULL: # This process does nothing             # <<<<<<<<<<<<<<
 *         return None
 *     else: # Wrong root argument
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1161
 *         return None
 *     else: # Wrong root argument
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)             # <<<<<<<<<<<<<<
 *         raise MPIException(MPI_ERR_ROOT)
 * 
 */
  /*else*/ {
    ((void)MPI_Comm_call_errhandler(__pyx_v_comm, MPI_ERR_ROOT));

    /* "mpi4py/MPI/msgpickle.pxi":1162
 *     else: # Wrong root argument
 *         <void>MPI_Comm_call_errhandler(comm, MPI_ERR_ROOT)
 *         raise MPIException(MPI_ERR_ROOT)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_5 = __Pyx_PyInt_From_int(MPI_ERR_ROOT); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 1162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_MPIException);
    __pyx_t_6 = __pyx_v_6mpi4py_3MPI_MPIException; __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1162, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(6, 1162, __pyx_L1_error)
  }

  /* "mpi4py/MPI/msgpickle.pxi":1141
 *     return PyMPI_reduce_p2p(sendobj, op, root, comm, tag)
 * 
 * cdef object PyMPI_reduce_inter(object sendobj, object op,             # <<<<<<<<<<<<<<
 *                                int root, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_reduce_inter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sendobj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1165
 * 
 * 
 * cdef object PyMPI_allreduce_intra(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce_intra(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  int __pyx_v_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_allreduce_intra", 0);
  __Pyx_INCREF(__pyx_v_sendobj);

  /* "mpi4py/MPI/msgpickle.pxi":1166
 * 
 * cdef object PyMPI_allreduce_intra(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, comm, tag)
 */
  __pyx_v_tag = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1167
 * cdef object PyMPI_allreduce_intra(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)             # <<<<<<<<<<<<<<
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, comm, tag)
 *     return PyMPI_bcast_p2p(sendobj, 0, comm)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTRA(__pyx_v_comm, (&__pyx_v_comm), (&__pyx_v_tag)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1167, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1168
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, comm, tag)             # <<<<<<<<<<<<<<
 *     return PyMPI_bcast_p2p(sendobj, 0, comm)
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_p2p(__pyx_v_sendobj, __pyx_v_op, 0, __pyx_v_comm, __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_sendobj, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1169
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, comm, tag)
 *     return PyMPI_bcast_p2p(sendobj, 0, comm)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_allreduce_inter(object sendobj, object op, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_bcast_p2p(__pyx_v_sendobj, 0, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1165
 * 
 * 
 * cdef object PyMPI_allreduce_intra(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_allreduce_intra", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sendobj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1171
 *     return PyMPI_bcast_p2p(sendobj, 0, comm)
 * 
 * cdef object PyMPI_allreduce_inter(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce_inter(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  int __pyx_v_tag;
  int __pyx_v_rank;
  MPI_Comm __pyx_v_localcomm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_allreduce_inter", 0);
  __Pyx_INCREF(__pyx_v_sendobj);

  /* "mpi4py/MPI/msgpickle.pxi":1172
 * 
 * cdef object PyMPI_allreduce_inter(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     cdef int rank = MPI_PROC_NULL
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL
 */
  __pyx_v_tag = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1173
 * cdef object PyMPI_allreduce_inter(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1174
 *     cdef int tag = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 */
  __pyx_v_localcomm = MPI_COMM_NULL;

  /* "mpi4py/MPI/msgpickle.pxi":1175
 *     cdef int rank = MPI_PROC_NULL
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     # Reduce in local group, exchange, and broadcast in local group
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTER(__pyx_v_comm, (&__pyx_v_comm), (&__pyx_v_tag), (&__pyx_v_localcomm), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1175, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1176
 *     cdef MPI_Comm localcomm = MPI_COMM_NULL
 *     PyMPI_Commctx_INTER(comm, &comm, &tag, &localcomm, NULL)
 *     CHKERR( MPI_Comm_rank(comm, &rank) )             # <<<<<<<<<<<<<<
 *     # Reduce in local group, exchange, and broadcast in local group
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_comm, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1176, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1178
 *     CHKERR( MPI_Comm_rank(comm, &rank) )
 *     # Reduce in local group, exchange, and broadcast in local group
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)             # <<<<<<<<<<<<<<
 *     if rank == 0:
 *         sendobj = PyMPI_sendrecv_p2p(sendobj, 0, tag, 0, tag, comm)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_p2p(__pyx_v_sendobj, __pyx_v_op, 0, __pyx_v_localcomm, __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_sendobj, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1179
 *     # Reduce in local group, exchange, and broadcast in local group
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 *     if rank == 0:             # <<<<<<<<<<<<<<
 *         sendobj = PyMPI_sendrecv_p2p(sendobj, 0, tag, 0, tag, comm)
 *     return PyMPI_bcast_p2p(sendobj, 0, localcomm)
 */
  __pyx_t_3 = ((__pyx_v_rank == 0) != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgpickle.pxi":1180
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 *     if rank == 0:
 *         sendobj = PyMPI_sendrecv_p2p(sendobj, 0, tag, 0, tag, comm)             # <<<<<<<<<<<<<<
 *     return PyMPI_bcast_p2p(sendobj, 0, localcomm)
 * 
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_sendrecv_p2p(__pyx_v_sendobj, 0, __pyx_v_tag, 0, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_sendobj, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":1179
 *     # Reduce in local group, exchange, and broadcast in local group
 *     sendobj = PyMPI_reduce_p2p(sendobj, op, 0, localcomm, tag)
 *     if rank == 0:             # <<<<<<<<<<<<<<
 *         sendobj = PyMPI_sendrecv_p2p(sendobj, 0, tag, 0, tag, comm)
 *     return PyMPI_bcast_p2p(sendobj, 0, localcomm)
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1181
 *     if rank == 0:
 *         sendobj = PyMPI_sendrecv_p2p(sendobj, 0, tag, 0, tag, comm)
 *     return PyMPI_bcast_p2p(sendobj, 0, localcomm)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_bcast_p2p(__pyx_v_sendobj, 0, __pyx_v_localcomm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1171
 *     return PyMPI_bcast_p2p(sendobj, 0, comm)
 * 
 * cdef object PyMPI_allreduce_inter(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     cdef int rank = MPI_PROC_NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_allreduce_inter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_sendobj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1184
 * 
 * 
 * cdef object PyMPI_scan_intra(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan_intra(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  int __pyx_v_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_scan_intra", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1185
 * 
 * cdef object PyMPI_scan_intra(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     return PyMPI_scan_p2p(sendobj, op, comm, tag)
 */
  __pyx_v_tag = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1186
 * cdef object PyMPI_scan_intra(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)             # <<<<<<<<<<<<<<
 *     return PyMPI_scan_p2p(sendobj, op, comm, tag)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTRA(__pyx_v_comm, (&__pyx_v_comm), (&__pyx_v_tag)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1186, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1187
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     return PyMPI_scan_p2p(sendobj, op, comm, tag)             # <<<<<<<<<<<<<<
 * 
 * cdef object PyMPI_exscan_intra(object sendobj, object op, MPI_Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_scan_p2p(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm, __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1184
 * 
 * 
 * cdef object PyMPI_scan_intra(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_scan_intra", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1189
 *     return PyMPI_scan_p2p(sendobj, op, comm, tag)
 * 
 * cdef object PyMPI_exscan_intra(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan_intra(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  int __pyx_v_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_exscan_intra", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1190
 * 
 * cdef object PyMPI_exscan_intra(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     return PyMPI_exscan_p2p(sendobj, op, comm, tag)
 */
  __pyx_v_tag = MPI_UNDEFINED;

  /* "mpi4py/MPI/msgpickle.pxi":1191
 * cdef object PyMPI_exscan_intra(object sendobj, object op, MPI_Comm comm):
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)             # <<<<<<<<<<<<<<
 *     return PyMPI_exscan_p2p(sendobj, op, comm, tag)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_Commctx_INTRA(__pyx_v_comm, (&__pyx_v_comm), (&__pyx_v_tag)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1191, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1192
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 *     return PyMPI_exscan_p2p(sendobj, op, comm, tag)             # <<<<<<<<<<<<<<
 * 
 * # -----
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_exscan_p2p(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm, __pyx_v_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/msgpickle.pxi":1189
 *     return PyMPI_scan_p2p(sendobj, op, comm, tag)
 * 
 * cdef object PyMPI_exscan_intra(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     cdef int tag = MPI_UNDEFINED
 *     PyMPI_Commctx_INTRA(comm, &comm, &tag)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_exscan_intra", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1196
 * # -----
 * 
 * cdef inline bint comm_is_intra(MPI_Comm comm) nogil except -1:             # <<<<<<<<<<<<<<
 *     cdef int inter = 0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_comm_is_intra(MPI_Comm __pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "mpi4py/MPI/msgpickle.pxi":1197
 * 
 * cdef inline bint comm_is_intra(MPI_Comm comm) nogil except -1:
 *     cdef int inter = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter: return 0
 */
  __pyx_v_inter = 0;

  /* "mpi4py/MPI/msgpickle.pxi":1198
 * cdef inline bint comm_is_intra(MPI_Comm comm) nogil except -1:
 *     cdef int inter = 0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )             # <<<<<<<<<<<<<<
 *     if inter: return 0
 *     else:     return 1
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_comm, (&__pyx_v_inter))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1198, __pyx_L1_error)

  /* "mpi4py/MPI/msgpickle.pxi":1199
 *     cdef int inter = 0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter: return 0             # <<<<<<<<<<<<<<
 *     else:     return 1
 * 
 */
  __pyx_t_2 = (__pyx_v_inter != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1200
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 *     if inter: return 0
 *     else:     return 1             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __pyx_r = 1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1196
 * # -----
 * 
 * cdef inline bint comm_is_intra(MPI_Comm comm) nogil except -1:             # <<<<<<<<<<<<<<
 *     cdef int inter = 0
 *     CHKERR( MPI_Comm_test_inter(comm, &inter) )
 */

  /* function exit code */
  __pyx_L1_error:;
  {
    #ifdef WITH_THREAD
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    #endif
    __Pyx_AddTraceback("mpi4py.MPI.comm_is_intra", __pyx_clineno, __pyx_lineno, __pyx_filename);
    #ifdef WITH_THREAD
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    #endif
  }
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1203
 * 
 * 
 * cdef object PyMPI_reduce(object sendobj, object op, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_reduce(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_reduce", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1204
 * 
 * cdef object PyMPI_reduce(object sendobj, object op, int root, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 *     elif comm_is_intra(comm):
 */
  __pyx_t_1 = ((!(__pyx_v_6mpi4py_3MPI_options.fast_reduce != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":1205
 * cdef object PyMPI_reduce(object sendobj, object op, int root, MPI_Comm comm):
 *     if not options.fast_reduce:
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)             # <<<<<<<<<<<<<<
 *     elif comm_is_intra(comm):
 *         return PyMPI_reduce_intra(sendobj, op, root, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_naive(__pyx_v_sendobj, __pyx_v_op, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1204
 * 
 * cdef object PyMPI_reduce(object sendobj, object op, int root, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 *     elif comm_is_intra(comm):
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1206
 *     if not options.fast_reduce:
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 *     elif comm_is_intra(comm):             # <<<<<<<<<<<<<<
 *         return PyMPI_reduce_intra(sendobj, op, root, comm)
 *     else:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_is_intra(__pyx_v_comm); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1206, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgpickle.pxi":1207
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 *     elif comm_is_intra(comm):
 *         return PyMPI_reduce_intra(sendobj, op, root, comm)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMPI_reduce_inter(sendobj, op, root, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_intra(__pyx_v_sendobj, __pyx_v_op, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1206
 *     if not options.fast_reduce:
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 *     elif comm_is_intra(comm):             # <<<<<<<<<<<<<<
 *         return PyMPI_reduce_intra(sendobj, op, root, comm)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1209
 *         return PyMPI_reduce_intra(sendobj, op, root, comm)
 *     else:
 *         return PyMPI_reduce_inter(sendobj, op, root, comm)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce_inter(__pyx_v_sendobj, __pyx_v_op, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1203
 * 
 * 
 * cdef object PyMPI_reduce(object sendobj, object op, int root, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_reduce_naive(sendobj, op, root, comm)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1212
 * 
 * 
 * cdef object PyMPI_allreduce(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_allreduce(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("PyMPI_allreduce", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1213
 * 
 * cdef object PyMPI_allreduce(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 *     elif comm_is_intra(comm):
 */
  __pyx_t_1 = ((!(__pyx_v_6mpi4py_3MPI_options.fast_reduce != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":1214
 * cdef object PyMPI_allreduce(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:
 *         return PyMPI_allreduce_naive(sendobj, op, comm)             # <<<<<<<<<<<<<<
 *     elif comm_is_intra(comm):
 *         return PyMPI_allreduce_intra(sendobj, op, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_allreduce_naive(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1213
 * 
 * cdef object PyMPI_allreduce(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 *     elif comm_is_intra(comm):
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1215
 *     if not options.fast_reduce:
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 *     elif comm_is_intra(comm):             # <<<<<<<<<<<<<<
 *         return PyMPI_allreduce_intra(sendobj, op, comm)
 *     else:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_is_intra(__pyx_v_comm); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 1215, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_1 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/msgpickle.pxi":1216
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 *     elif comm_is_intra(comm):
 *         return PyMPI_allreduce_intra(sendobj, op, comm)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMPI_allreduce_inter(sendobj, op, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_allreduce_intra(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1215
 *     if not options.fast_reduce:
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 *     elif comm_is_intra(comm):             # <<<<<<<<<<<<<<
 *         return PyMPI_allreduce_intra(sendobj, op, comm)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1218
 *         return PyMPI_allreduce_intra(sendobj, op, comm)
 *     else:
 *         return PyMPI_allreduce_inter(sendobj, op, comm)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_allreduce_inter(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1212
 * 
 * 
 * cdef object PyMPI_allreduce(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_allreduce_naive(sendobj, op, comm)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_allreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1221
 * 
 * 
 * cdef object PyMPI_scan(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_scan_naive(sendobj, op, comm)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_scan(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_scan", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1222
 * 
 * cdef object PyMPI_scan(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_scan_naive(sendobj, op, comm)
 *     else:
 */
  __pyx_t_1 = ((!(__pyx_v_6mpi4py_3MPI_options.fast_reduce != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":1223
 * cdef object PyMPI_scan(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:
 *         return PyMPI_scan_naive(sendobj, op, comm)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMPI_scan_intra(sendobj, op, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_scan_naive(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1222
 * 
 * cdef object PyMPI_scan(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_scan_naive(sendobj, op, comm)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1225
 *         return PyMPI_scan_naive(sendobj, op, comm)
 *     else:
 *         return PyMPI_scan_intra(sendobj, op, comm)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_scan_intra(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1221
 * 
 * 
 * cdef object PyMPI_scan(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_scan_naive(sendobj, op, comm)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/msgpickle.pxi":1228
 * 
 * 
 * cdef object PyMPI_exscan(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_exscan_naive(sendobj, op, comm)
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPI_exscan(PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, MPI_Comm __pyx_v_comm) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPI_exscan", 0);

  /* "mpi4py/MPI/msgpickle.pxi":1229
 * 
 * cdef object PyMPI_exscan(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_exscan_naive(sendobj, op, comm)
 *     else:
 */
  __pyx_t_1 = ((!(__pyx_v_6mpi4py_3MPI_options.fast_reduce != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/msgpickle.pxi":1230
 * cdef object PyMPI_exscan(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:
 *         return PyMPI_exscan_naive(sendobj, op, comm)             # <<<<<<<<<<<<<<
 *     else:
 *         return PyMPI_exscan_intra(sendobj, op, comm)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_exscan_naive(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/msgpickle.pxi":1229
 * 
 * cdef object PyMPI_exscan(object sendobj, object op, MPI_Comm comm):
 *     if not options.fast_reduce:             # <<<<<<<<<<<<<<
 *         return PyMPI_exscan_naive(sendobj, op, comm)
 *     else:
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":1232
 *         return PyMPI_exscan_naive(sendobj, op, comm)
 *     else:
 *         return PyMPI_exscan_intra(sendobj, op, comm)             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_exscan_intra(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1232, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/msgpickle.pxi":1228
 * 
 * 
 * cdef object PyMPI_exscan(object sendobj, object op, MPI_Comm comm):             # <<<<<<<<<<<<<<
 *     if not options.fast_reduce:
 *         return PyMPI_exscan_naive(sendobj, op, comm)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPI_exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":5
 * #  Datatype
 * 
 * cdef api object PyMPIDatatype_New(MPI_Datatype arg):             # <<<<<<<<<<<<<<
 *     cdef Datatype obj = <Datatype>Datatype.__new__(Datatype)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIDatatype_New(MPI_Datatype __pyx_v_arg) {
  struct PyMPIDatatypeObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIDatatype_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":6
 * 
 * cdef api object PyMPIDatatype_New(MPI_Datatype arg):
 *     cdef Datatype obj = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 6, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":7
 * cdef api object PyMPIDatatype_New(MPI_Datatype arg):
 *     cdef Datatype obj = <Datatype>Datatype.__new__(Datatype)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":8
 *     cdef Datatype obj = <Datatype>Datatype.__new__(Datatype)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Datatype* PyMPIDatatype_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":5
 * #  Datatype
 * 
 * cdef api object PyMPIDatatype_New(MPI_Datatype arg):             # <<<<<<<<<<<<<<
 *     cdef Datatype obj = <Datatype>Datatype.__new__(Datatype)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIDatatype_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":10
 *     return obj
 * 
 * cdef api MPI_Datatype* PyMPIDatatype_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Datatype?>arg).ob_mpi
 * 
 */

static MPI_Datatype *__pyx_f_6mpi4py_3MPI_PyMPIDatatype_Get(PyObject *__pyx_v_arg) {
  MPI_Datatype *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIDatatype_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":11
 * 
 * cdef api MPI_Datatype* PyMPIDatatype_Get(object arg) except NULL:
 *     return &(<Datatype?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Datatype)))) __PYX_ERR(18, 11, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIDatatypeObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":10
 *     return obj
 * 
 * cdef api MPI_Datatype* PyMPIDatatype_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Datatype?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIDatatype_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":17
 * #  Status
 * 
 * cdef api object PyMPIStatus_New(MPI_Status *arg):             # <<<<<<<<<<<<<<
 *     cdef Status obj = <Status>Status.__new__(Status)
 *     if (arg != NULL and
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIStatus_New(MPI_Status *__pyx_v_arg) {
  struct PyMPIStatusObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("PyMPIStatus_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":18
 * 
 * cdef api object PyMPIStatus_New(MPI_Status *arg):
 *     cdef Status obj = <Status>Status.__new__(Status)             # <<<<<<<<<<<<<<
 *     if (arg != NULL and
 *         arg != MPI_STATUS_IGNORE and
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Status(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Status), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 18, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIStatusObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":19
 * cdef api object PyMPIStatus_New(MPI_Status *arg):
 *     cdef Status obj = <Status>Status.__new__(Status)
 *     if (arg != NULL and             # <<<<<<<<<<<<<<
 *         arg != MPI_STATUS_IGNORE and
 *         arg != MPI_STATUSES_IGNORE):
 */
  __pyx_t_4 = ((__pyx_v_arg != NULL) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/CAPI.pxi":20
 *     cdef Status obj = <Status>Status.__new__(Status)
 *     if (arg != NULL and
 *         arg != MPI_STATUS_IGNORE and             # <<<<<<<<<<<<<<
 *         arg != MPI_STATUSES_IGNORE):
 *         obj.ob_mpi = arg[0]
 */
  __pyx_t_4 = ((__pyx_v_arg != MPI_STATUS_IGNORE) != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/CAPI.pxi":21
 *     if (arg != NULL and
 *         arg != MPI_STATUS_IGNORE and
 *         arg != MPI_STATUSES_IGNORE):             # <<<<<<<<<<<<<<
 *         obj.ob_mpi = arg[0]
 *     else: pass  # XXX should fail ?
 */
  __pyx_t_4 = ((__pyx_v_arg != MPI_STATUSES_IGNORE) != 0);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;

  /* "mpi4py/MPI/CAPI.pxi":19
 * cdef api object PyMPIStatus_New(MPI_Status *arg):
 *     cdef Status obj = <Status>Status.__new__(Status)
 *     if (arg != NULL and             # <<<<<<<<<<<<<<
 *         arg != MPI_STATUS_IGNORE and
 *         arg != MPI_STATUSES_IGNORE):
 */
  if (__pyx_t_3) {

    /* "mpi4py/MPI/CAPI.pxi":22
 *         arg != MPI_STATUS_IGNORE and
 *         arg != MPI_STATUSES_IGNORE):
 *         obj.ob_mpi = arg[0]             # <<<<<<<<<<<<<<
 *     else: pass  # XXX should fail ?
 *     return obj
 */
    __pyx_v_obj->ob_mpi = (__pyx_v_arg[0]);

    /* "mpi4py/MPI/CAPI.pxi":19
 * cdef api object PyMPIStatus_New(MPI_Status *arg):
 *     cdef Status obj = <Status>Status.__new__(Status)
 *     if (arg != NULL and             # <<<<<<<<<<<<<<
 *         arg != MPI_STATUS_IGNORE and
 *         arg != MPI_STATUSES_IGNORE):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/CAPI.pxi":23
 *         arg != MPI_STATUSES_IGNORE):
 *         obj.ob_mpi = arg[0]
 *     else: pass  # XXX should fail ?             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  /*else*/ {
  }
  __pyx_L3:;

  /* "mpi4py/MPI/CAPI.pxi":24
 *         obj.ob_mpi = arg[0]
 *     else: pass  # XXX should fail ?
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Status* PyMPIStatus_Get(object arg) except? NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":17
 * #  Status
 * 
 * cdef api object PyMPIStatus_New(MPI_Status *arg):             # <<<<<<<<<<<<<<
 *     cdef Status obj = <Status>Status.__new__(Status)
 *     if (arg != NULL and
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIStatus_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":26
 *     return obj
 * 
 * cdef api MPI_Status* PyMPIStatus_Get(object arg) except? NULL:             # <<<<<<<<<<<<<<
 *     if arg is None: return MPI_STATUS_IGNORE
 *     return &(<Status?>arg).ob_mpi
 */

static MPI_Status *__pyx_f_6mpi4py_3MPI_PyMPIStatus_Get(PyObject *__pyx_v_arg) {
  MPI_Status *__pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("PyMPIStatus_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":27
 * 
 * cdef api MPI_Status* PyMPIStatus_Get(object arg) except? NULL:
 *     if arg is None: return MPI_STATUS_IGNORE             # <<<<<<<<<<<<<<
 *     return &(<Status?>arg).ob_mpi
 * 
 */
  __pyx_t_1 = (__pyx_v_arg == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = MPI_STATUS_IGNORE;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/CAPI.pxi":28
 * cdef api MPI_Status* PyMPIStatus_Get(object arg) except? NULL:
 *     if arg is None: return MPI_STATUS_IGNORE
 *     return &(<Status?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Status)))) __PYX_ERR(18, 28, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIStatusObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":26
 *     return obj
 * 
 * cdef api MPI_Status* PyMPIStatus_Get(object arg) except? NULL:             # <<<<<<<<<<<<<<
 *     if arg is None: return MPI_STATUS_IGNORE
 *     return &(<Status?>arg).ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIStatus_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":34
 * #  Request
 * 
 * cdef api object PyMPIRequest_New(MPI_Request arg):             # <<<<<<<<<<<<<<
 *     cdef Request obj = <Request>Request.__new__(Request)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIRequest_New(MPI_Request __pyx_v_arg) {
  struct PyMPIRequestObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIRequest_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":35
 * 
 * cdef api object PyMPIRequest_New(MPI_Request arg):
 *     cdef Request obj = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 35, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":36
 * cdef api object PyMPIRequest_New(MPI_Request arg):
 *     cdef Request obj = <Request>Request.__new__(Request)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":37
 *     cdef Request obj = <Request>Request.__new__(Request)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Request* PyMPIRequest_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":34
 * #  Request
 * 
 * cdef api object PyMPIRequest_New(MPI_Request arg):             # <<<<<<<<<<<<<<
 *     cdef Request obj = <Request>Request.__new__(Request)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIRequest_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":39
 *     return obj
 * 
 * cdef api MPI_Request* PyMPIRequest_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Request?>arg).ob_mpi
 * 
 */

static MPI_Request *__pyx_f_6mpi4py_3MPI_PyMPIRequest_Get(PyObject *__pyx_v_arg) {
  MPI_Request *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIRequest_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":40
 * 
 * cdef api MPI_Request* PyMPIRequest_Get(object arg) except NULL:
 *     return &(<Request?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Request)))) __PYX_ERR(18, 40, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIRequestObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":39
 *     return obj
 * 
 * cdef api MPI_Request* PyMPIRequest_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Request?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIRequest_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":46
 * #  Message
 * 
 * cdef api object PyMPIMessage_New(MPI_Message arg):             # <<<<<<<<<<<<<<
 *     cdef Message obj = <Message>Message.__new__(Message)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIMessage_New(MPI_Message __pyx_v_arg) {
  struct PyMPIMessageObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIMessage_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":47
 * 
 * cdef api object PyMPIMessage_New(MPI_Message arg):
 *     cdef Message obj = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 47, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIMessageObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":48
 * cdef api object PyMPIMessage_New(MPI_Message arg):
 *     cdef Message obj = <Message>Message.__new__(Message)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":49
 *     cdef Message obj = <Message>Message.__new__(Message)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Message* PyMPIMessage_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":46
 * #  Message
 * 
 * cdef api object PyMPIMessage_New(MPI_Message arg):             # <<<<<<<<<<<<<<
 *     cdef Message obj = <Message>Message.__new__(Message)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIMessage_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":51
 *     return obj
 * 
 * cdef api MPI_Message* PyMPIMessage_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Message?>arg).ob_mpi
 * 
 */

static MPI_Message *__pyx_f_6mpi4py_3MPI_PyMPIMessage_Get(PyObject *__pyx_v_arg) {
  MPI_Message *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIMessage_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":52
 * 
 * cdef api MPI_Message* PyMPIMessage_Get(object arg) except NULL:
 *     return &(<Message?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Message)))) __PYX_ERR(18, 52, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIMessageObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":51
 *     return obj
 * 
 * cdef api MPI_Message* PyMPIMessage_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Message?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIMessage_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":58
 * #  Op
 * 
 * cdef api object PyMPIOp_New(MPI_Op arg):             # <<<<<<<<<<<<<<
 *     cdef Op obj = <Op>Op.__new__(Op)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIOp_New(MPI_Op __pyx_v_arg) {
  struct PyMPIOpObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIOp_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":59
 * 
 * cdef api object PyMPIOp_New(MPI_Op arg):
 *     cdef Op obj = <Op>Op.__new__(Op)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Op(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Op), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 59, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIOpObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":60
 * cdef api object PyMPIOp_New(MPI_Op arg):
 *     cdef Op obj = <Op>Op.__new__(Op)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":61
 *     cdef Op obj = <Op>Op.__new__(Op)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Op* PyMPIOp_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":58
 * #  Op
 * 
 * cdef api object PyMPIOp_New(MPI_Op arg):             # <<<<<<<<<<<<<<
 *     cdef Op obj = <Op>Op.__new__(Op)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIOp_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":63
 *     return obj
 * 
 * cdef api MPI_Op* PyMPIOp_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Op?>arg).ob_mpi
 * 
 */

static MPI_Op *__pyx_f_6mpi4py_3MPI_PyMPIOp_Get(PyObject *__pyx_v_arg) {
  MPI_Op *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIOp_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":64
 * 
 * cdef api MPI_Op* PyMPIOp_Get(object arg) except NULL:
 *     return &(<Op?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Op)))) __PYX_ERR(18, 64, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIOpObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":63
 *     return obj
 * 
 * cdef api MPI_Op* PyMPIOp_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Op?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIOp_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":70
 * #  Info
 * 
 * cdef api object PyMPIInfo_New(MPI_Info arg):             # <<<<<<<<<<<<<<
 *     cdef Info obj = <Info>Info.__new__(Info)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIInfo_New(MPI_Info __pyx_v_arg) {
  struct PyMPIInfoObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIInfo_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":71
 * 
 * cdef api object PyMPIInfo_New(MPI_Info arg):
 *     cdef Info obj = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 71, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":72
 * cdef api object PyMPIInfo_New(MPI_Info arg):
 *     cdef Info obj = <Info>Info.__new__(Info)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":73
 *     cdef Info obj = <Info>Info.__new__(Info)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Info* PyMPIInfo_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":70
 * #  Info
 * 
 * cdef api object PyMPIInfo_New(MPI_Info arg):             # <<<<<<<<<<<<<<
 *     cdef Info obj = <Info>Info.__new__(Info)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIInfo_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":75
 *     return obj
 * 
 * cdef api MPI_Info* PyMPIInfo_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Info?>arg).ob_mpi
 * 
 */

static MPI_Info *__pyx_f_6mpi4py_3MPI_PyMPIInfo_Get(PyObject *__pyx_v_arg) {
  MPI_Info *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIInfo_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":76
 * 
 * cdef api MPI_Info* PyMPIInfo_Get(object arg) except NULL:
 *     return &(<Info?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Info)))) __PYX_ERR(18, 76, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIInfoObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":75
 *     return obj
 * 
 * cdef api MPI_Info* PyMPIInfo_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Info?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIInfo_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":82
 * #  Group
 * 
 * cdef api object PyMPIGroup_New(MPI_Group arg):             # <<<<<<<<<<<<<<
 *     cdef Group obj = <Group>Group.__new__(Group)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIGroup_New(MPI_Group __pyx_v_arg) {
  struct PyMPIGroupObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIGroup_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":83
 * 
 * cdef api object PyMPIGroup_New(MPI_Group arg):
 *     cdef Group obj = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 83, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":84
 * cdef api object PyMPIGroup_New(MPI_Group arg):
 *     cdef Group obj = <Group>Group.__new__(Group)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":85
 *     cdef Group obj = <Group>Group.__new__(Group)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Group* PyMPIGroup_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":82
 * #  Group
 * 
 * cdef api object PyMPIGroup_New(MPI_Group arg):             # <<<<<<<<<<<<<<
 *     cdef Group obj = <Group>Group.__new__(Group)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIGroup_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":87
 *     return obj
 * 
 * cdef api MPI_Group* PyMPIGroup_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Group?>arg).ob_mpi
 * 
 */

static MPI_Group *__pyx_f_6mpi4py_3MPI_PyMPIGroup_Get(PyObject *__pyx_v_arg) {
  MPI_Group *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIGroup_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":88
 * 
 * cdef api MPI_Group* PyMPIGroup_Get(object arg) except NULL:
 *     return &(<Group?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Group)))) __PYX_ERR(18, 88, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIGroupObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":87
 *     return obj
 * 
 * cdef api MPI_Group* PyMPIGroup_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Group?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIGroup_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":94
 * # Comm
 * 
 * cdef api object PyMPIComm_New(MPI_Comm arg):             # <<<<<<<<<<<<<<
 *     cdef type cls   = Comm
 *     cdef int  inter = 0
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIComm_New(MPI_Comm __pyx_v_arg) {
  PyTypeObject *__pyx_v_cls = 0;
  int __pyx_v_inter;
  int __pyx_v_topo;
  struct PyMPICommObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("PyMPIComm_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":95
 * 
 * cdef api object PyMPIComm_New(MPI_Comm arg):
 *     cdef type cls   = Comm             # <<<<<<<<<<<<<<
 *     cdef int  inter = 0
 *     cdef int  topo  = MPI_UNDEFINED
 */
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm));
  __pyx_v_cls = __pyx_ptype_6mpi4py_3MPI_Comm;

  /* "mpi4py/MPI/CAPI.pxi":96
 * cdef api object PyMPIComm_New(MPI_Comm arg):
 *     cdef type cls   = Comm
 *     cdef int  inter = 0             # <<<<<<<<<<<<<<
 *     cdef int  topo  = MPI_UNDEFINED
 *     if arg != MPI_COMM_NULL:
 */
  __pyx_v_inter = 0;

  /* "mpi4py/MPI/CAPI.pxi":97
 *     cdef type cls   = Comm
 *     cdef int  inter = 0
 *     cdef int  topo  = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *     if arg != MPI_COMM_NULL:
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/CAPI.pxi":98
 *     cdef int  inter = 0
 *     cdef int  topo  = MPI_UNDEFINED
 *     if arg != MPI_COMM_NULL:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )
 *         if inter:
 */
  __pyx_t_1 = ((__pyx_v_arg != MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/CAPI.pxi":99
 *     cdef int  topo  = MPI_UNDEFINED
 *     if arg != MPI_COMM_NULL:
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )             # <<<<<<<<<<<<<<
 *         if inter:
 *             cls = Intercomm
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_arg, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(18, 99, __pyx_L1_error)

    /* "mpi4py/MPI/CAPI.pxi":100
 *     if arg != MPI_COMM_NULL:
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )
 *         if inter:             # <<<<<<<<<<<<<<
 *             cls = Intercomm
 *         else:
 */
    __pyx_t_1 = (__pyx_v_inter != 0);
    if (__pyx_t_1) {

      /* "mpi4py/MPI/CAPI.pxi":101
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )
 *         if inter:
 *             cls = Intercomm             # <<<<<<<<<<<<<<
 *         else:
 *             CHKERR( MPI_Topo_test(arg, &topo) )
 */
      __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm));
      __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_6mpi4py_3MPI_Intercomm);

      /* "mpi4py/MPI/CAPI.pxi":100
 *     if arg != MPI_COMM_NULL:
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )
 *         if inter:             # <<<<<<<<<<<<<<
 *             cls = Intercomm
 *         else:
 */
      goto __pyx_L4;
    }

    /* "mpi4py/MPI/CAPI.pxi":103
 *             cls = Intercomm
 *         else:
 *             CHKERR( MPI_Topo_test(arg, &topo) )             # <<<<<<<<<<<<<<
 *             if topo == MPI_UNDEFINED:
 *                 cls = Intracomm
 */
    /*else*/ {
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_arg, (&__pyx_v_topo))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(18, 103, __pyx_L1_error)

      /* "mpi4py/MPI/CAPI.pxi":104
 *         else:
 *             CHKERR( MPI_Topo_test(arg, &topo) )
 *             if topo == MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *                 cls = Intracomm
 *             elif topo == MPI_CART:
 */
      __pyx_t_1 = ((__pyx_v_topo == MPI_UNDEFINED) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/CAPI.pxi":105
 *             CHKERR( MPI_Topo_test(arg, &topo) )
 *             if topo == MPI_UNDEFINED:
 *                 cls = Intracomm             # <<<<<<<<<<<<<<
 *             elif topo == MPI_CART:
 *                 cls = Cartcomm
 */
        __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm));
        __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_6mpi4py_3MPI_Intracomm);

        /* "mpi4py/MPI/CAPI.pxi":104
 *         else:
 *             CHKERR( MPI_Topo_test(arg, &topo) )
 *             if topo == MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *                 cls = Intracomm
 *             elif topo == MPI_CART:
 */
        goto __pyx_L5;
      }

      /* "mpi4py/MPI/CAPI.pxi":106
 *             if topo == MPI_UNDEFINED:
 *                 cls = Intracomm
 *             elif topo == MPI_CART:             # <<<<<<<<<<<<<<
 *                 cls = Cartcomm
 *             elif topo == MPI_GRAPH:
 */
      __pyx_t_1 = ((__pyx_v_topo == MPI_CART) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/CAPI.pxi":107
 *                 cls = Intracomm
 *             elif topo == MPI_CART:
 *                 cls = Cartcomm             # <<<<<<<<<<<<<<
 *             elif topo == MPI_GRAPH:
 *                 cls = Graphcomm
 */
        __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Cartcomm));
        __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_6mpi4py_3MPI_Cartcomm);

        /* "mpi4py/MPI/CAPI.pxi":106
 *             if topo == MPI_UNDEFINED:
 *                 cls = Intracomm
 *             elif topo == MPI_CART:             # <<<<<<<<<<<<<<
 *                 cls = Cartcomm
 *             elif topo == MPI_GRAPH:
 */
        goto __pyx_L5;
      }

      /* "mpi4py/MPI/CAPI.pxi":108
 *             elif topo == MPI_CART:
 *                 cls = Cartcomm
 *             elif topo == MPI_GRAPH:             # <<<<<<<<<<<<<<
 *                 cls = Graphcomm
 *             elif topo == MPI_DIST_GRAPH:
 */
      __pyx_t_1 = ((__pyx_v_topo == MPI_GRAPH) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/CAPI.pxi":109
 *                 cls = Cartcomm
 *             elif topo == MPI_GRAPH:
 *                 cls = Graphcomm             # <<<<<<<<<<<<<<
 *             elif topo == MPI_DIST_GRAPH:
 *                 cls = Distgraphcomm
 */
        __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Graphcomm));
        __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_6mpi4py_3MPI_Graphcomm);

        /* "mpi4py/MPI/CAPI.pxi":108
 *             elif topo == MPI_CART:
 *                 cls = Cartcomm
 *             elif topo == MPI_GRAPH:             # <<<<<<<<<<<<<<
 *                 cls = Graphcomm
 *             elif topo == MPI_DIST_GRAPH:
 */
        goto __pyx_L5;
      }

      /* "mpi4py/MPI/CAPI.pxi":110
 *             elif topo == MPI_GRAPH:
 *                 cls = Graphcomm
 *             elif topo == MPI_DIST_GRAPH:             # <<<<<<<<<<<<<<
 *                 cls = Distgraphcomm
 *             else:
 */
      __pyx_t_1 = ((__pyx_v_topo == MPI_DIST_GRAPH) != 0);
      if (__pyx_t_1) {

        /* "mpi4py/MPI/CAPI.pxi":111
 *                 cls = Graphcomm
 *             elif topo == MPI_DIST_GRAPH:
 *                 cls = Distgraphcomm             # <<<<<<<<<<<<<<
 *             else:
 *                 cls = Intracomm
 */
        __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Distgraphcomm));
        __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_6mpi4py_3MPI_Distgraphcomm);

        /* "mpi4py/MPI/CAPI.pxi":110
 *             elif topo == MPI_GRAPH:
 *                 cls = Graphcomm
 *             elif topo == MPI_DIST_GRAPH:             # <<<<<<<<<<<<<<
 *                 cls = Distgraphcomm
 *             else:
 */
        goto __pyx_L5;
      }

      /* "mpi4py/MPI/CAPI.pxi":113
 *                 cls = Distgraphcomm
 *             else:
 *                 cls = Intracomm             # <<<<<<<<<<<<<<
 *     cdef Comm obj = <Comm>cls.__new__(cls)
 *     obj.ob_mpi = arg
 */
      /*else*/ {
        __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm));
        __Pyx_DECREF_SET(__pyx_v_cls, __pyx_ptype_6mpi4py_3MPI_Intracomm);
      }
      __pyx_L5:;
    }
    __pyx_L4:;

    /* "mpi4py/MPI/CAPI.pxi":98
 *     cdef int  inter = 0
 *     cdef int  topo  = MPI_UNDEFINED
 *     if arg != MPI_COMM_NULL:             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(arg, &inter) )
 *         if inter:
 */
  }

  /* "mpi4py/MPI/CAPI.pxi":114
 *             else:
 *                 cls = Intracomm
 *     cdef Comm obj = <Comm>cls.__new__(cls)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  if (unlikely(((PyObject *)__pyx_v_cls) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
    __PYX_ERR(18, 114, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_tp_new(((PyObject *)__pyx_v_cls), __pyx_empty_tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_obj = ((struct PyMPICommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/CAPI.pxi":115
 *                 cls = Intracomm
 *     cdef Comm obj = <Comm>cls.__new__(cls)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":116
 *     cdef Comm obj = <Comm>cls.__new__(cls)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Comm* PyMPIComm_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":94
 * # Comm
 * 
 * cdef api object PyMPIComm_New(MPI_Comm arg):             # <<<<<<<<<<<<<<
 *     cdef type cls   = Comm
 *     cdef int  inter = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIComm_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":118
 *     return obj
 * 
 * cdef api MPI_Comm* PyMPIComm_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Comm?>arg).ob_mpi
 * 
 */

static MPI_Comm *__pyx_f_6mpi4py_3MPI_PyMPIComm_Get(PyObject *__pyx_v_arg) {
  MPI_Comm *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIComm_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":119
 * 
 * cdef api MPI_Comm* PyMPIComm_Get(object arg) except NULL:
 *     return &(<Comm?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Comm)))) __PYX_ERR(18, 119, __pyx_L1_error)
  __pyx_r = (&((struct PyMPICommObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":118
 *     return obj
 * 
 * cdef api MPI_Comm* PyMPIComm_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Comm?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIComm_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":125
 * # Win
 * 
 * cdef api object PyMPIWin_New(MPI_Win arg):             # <<<<<<<<<<<<<<
 *     cdef Win obj = <Win>Win.__new__(Win)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIWin_New(MPI_Win __pyx_v_arg) {
  struct PyMPIWinObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIWin_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":126
 * 
 * cdef api object PyMPIWin_New(MPI_Win arg):
 *     cdef Win obj = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 126, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIWinObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":127
 * cdef api object PyMPIWin_New(MPI_Win arg):
 *     cdef Win obj = <Win>Win.__new__(Win)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":128
 *     cdef Win obj = <Win>Win.__new__(Win)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Win* PyMPIWin_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":125
 * # Win
 * 
 * cdef api object PyMPIWin_New(MPI_Win arg):             # <<<<<<<<<<<<<<
 *     cdef Win obj = <Win>Win.__new__(Win)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIWin_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":130
 *     return obj
 * 
 * cdef api MPI_Win* PyMPIWin_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Win?>arg).ob_mpi
 * 
 */

static MPI_Win *__pyx_f_6mpi4py_3MPI_PyMPIWin_Get(PyObject *__pyx_v_arg) {
  MPI_Win *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIWin_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":131
 * 
 * cdef api MPI_Win* PyMPIWin_Get(object arg) except NULL:
 *     return &(<Win?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Win)))) __PYX_ERR(18, 131, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIWinObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":130
 *     return obj
 * 
 * cdef api MPI_Win* PyMPIWin_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Win?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIWin_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":137
 * # File
 * 
 * cdef api object PyMPIFile_New(MPI_File arg):             # <<<<<<<<<<<<<<
 *     cdef File obj = <File>File.__new__(File)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIFile_New(MPI_File __pyx_v_arg) {
  struct PyMPIFileObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIFile_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":138
 * 
 * cdef api object PyMPIFile_New(MPI_File arg):
 *     cdef File obj = <File>File.__new__(File)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_File(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_File), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 138, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIFileObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":139
 * cdef api object PyMPIFile_New(MPI_File arg):
 *     cdef File obj = <File>File.__new__(File)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":140
 *     cdef File obj = <File>File.__new__(File)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_File* PyMPIFile_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":137
 * # File
 * 
 * cdef api object PyMPIFile_New(MPI_File arg):             # <<<<<<<<<<<<<<
 *     cdef File obj = <File>File.__new__(File)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIFile_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":142
 *     return obj
 * 
 * cdef api MPI_File* PyMPIFile_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<File?>arg).ob_mpi
 * 
 */

static MPI_File *__pyx_f_6mpi4py_3MPI_PyMPIFile_Get(PyObject *__pyx_v_arg) {
  MPI_File *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIFile_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":143
 * 
 * cdef api MPI_File* PyMPIFile_Get(object arg) except NULL:
 *     return &(<File?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_File)))) __PYX_ERR(18, 143, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIFileObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":142
 *     return obj
 * 
 * cdef api MPI_File* PyMPIFile_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<File?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIFile_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":149
 * # Errhandler
 * 
 * cdef api object PyMPIErrhandler_New(MPI_Errhandler arg):             # <<<<<<<<<<<<<<
 *     cdef Errhandler obj = <Errhandler>Errhandler.__new__(Errhandler)
 *     obj.ob_mpi = arg
 */

static PyObject *__pyx_f_6mpi4py_3MPI_PyMPIErrhandler_New(MPI_Errhandler __pyx_v_arg) {
  struct PyMPIErrhandlerObject *__pyx_v_obj = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("PyMPIErrhandler_New", 0);

  /* "mpi4py/MPI/CAPI.pxi":150
 * 
 * cdef api object PyMPIErrhandler_New(MPI_Errhandler arg):
 *     cdef Errhandler obj = <Errhandler>Errhandler.__new__(Errhandler)             # <<<<<<<<<<<<<<
 *     obj.ob_mpi = arg
 *     return obj
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Errhandler(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 150, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_obj = ((struct PyMPIErrhandlerObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/CAPI.pxi":151
 * cdef api object PyMPIErrhandler_New(MPI_Errhandler arg):
 *     cdef Errhandler obj = <Errhandler>Errhandler.__new__(Errhandler)
 *     obj.ob_mpi = arg             # <<<<<<<<<<<<<<
 *     return obj
 * 
 */
  __pyx_v_obj->ob_mpi = __pyx_v_arg;

  /* "mpi4py/MPI/CAPI.pxi":152
 *     cdef Errhandler obj = <Errhandler>Errhandler.__new__(Errhandler)
 *     obj.ob_mpi = arg
 *     return obj             # <<<<<<<<<<<<<<
 * 
 * cdef api MPI_Errhandler* PyMPIErrhandler_Get(object arg) except NULL:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_obj));
  __pyx_r = ((PyObject *)__pyx_v_obj);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":149
 * # Errhandler
 * 
 * cdef api object PyMPIErrhandler_New(MPI_Errhandler arg):             # <<<<<<<<<<<<<<
 *     cdef Errhandler obj = <Errhandler>Errhandler.__new__(Errhandler)
 *     obj.ob_mpi = arg
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIErrhandler_New", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_obj);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/CAPI.pxi":154
 *     return obj
 * 
 * cdef api MPI_Errhandler* PyMPIErrhandler_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Errhandler?>arg).ob_mpi
 * 
 */

static MPI_Errhandler *__pyx_f_6mpi4py_3MPI_PyMPIErrhandler_Get(PyObject *__pyx_v_arg) {
  MPI_Errhandler *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMPIErrhandler_Get", 0);

  /* "mpi4py/MPI/CAPI.pxi":155
 * 
 * cdef api MPI_Errhandler* PyMPIErrhandler_Get(object arg) except NULL:
 *     return &(<Errhandler?>arg).ob_mpi             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Errhandler)))) __PYX_ERR(18, 155, __pyx_L1_error)
  __pyx_r = (&((struct PyMPIErrhandlerObject *)__pyx_v_arg)->ob_mpi);
  goto __pyx_L0;

  /* "mpi4py/MPI/CAPI.pxi":154
 *     return obj
 * 
 * cdef api MPI_Errhandler* PyMPIErrhandler_Get(object arg) except NULL:             # <<<<<<<<<<<<<<
 *     return &(<Errhandler?>arg).ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.PyMPIErrhandler_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":7
 *     """
 * 
 *     def __init__(self, int ierr=0):             # <<<<<<<<<<<<<<
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN
 *         self.ob_mpi = ierr
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception___init__[] = "Exception.__init__(self, int ierr=0)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_1__init__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception___init__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  int __pyx_v_ierr;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_ierr,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ierr);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_self = values[0];
    if (values[1]) {
      __pyx_v_ierr = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_ierr == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 7, __pyx_L3_error)
    } else {
      __pyx_v_ierr = ((int)((int)0));
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception___init__(__pyx_self, __pyx_v_self, __pyx_v_ierr);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, int __pyx_v_ierr) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":8
 * 
 *     def __init__(self, int ierr=0):
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN             # <<<<<<<<<<<<<<
 *         self.ob_mpi = ierr
 *         RuntimeError.__init__(self, self.ob_mpi)
 */
  __pyx_t_1 = ((__pyx_v_ierr < MPI_SUCCESS) != 0);
  if (__pyx_t_1) {
    __pyx_v_ierr = MPI_ERR_UNKNOWN;
  }

  /* "mpi4py/MPI/ExceptionP.pyx":9
 *     def __init__(self, int ierr=0):
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN
 *         self.ob_mpi = ierr             # <<<<<<<<<<<<<<
 *         RuntimeError.__init__(self, self.ob_mpi)
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi, __pyx_t_2) < 0) __PYX_ERR(1, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":10
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN
 *         self.ob_mpi = ierr
 *         RuntimeError.__init__(self, self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, object error):
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_RuntimeError, __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_self, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_self, __pyx_t_4};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 10, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_self);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":7
 *     """
 * 
 *     def __init__(self, int ierr=0):             # <<<<<<<<<<<<<<
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN
 *         self.ob_mpi = ierr
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":12
 *         RuntimeError.__init__(self, self.ob_mpi)
 * 
 *     def __eq__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr == error)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_2__eq__[] = "Exception.__eq__(self, error)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_3__eq__ = {"__eq__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_3__eq__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_2__eq__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_3__eq__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_error,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, 1); __PYX_ERR(1, 12, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__eq__") < 0)) __PYX_ERR(1, 12, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_error = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__eq__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 12, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_2__eq__(__pyx_self, __pyx_v_self, __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_2__eq__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":13
 * 
 *     def __eq__(self, object error):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return <bint> (ierr == error)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":14
 *     def __eq__(self, object error):
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr == error)             # <<<<<<<<<<<<<<
 * 
 *     def __ne__(self, object error):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_error, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":12
 *         RuntimeError.__init__(self, self.ob_mpi)
 * 
 *     def __eq__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr == error)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":16
 *         return <bint> (ierr == error)
 * 
 *     def __ne__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr != error)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_5__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_4__ne__[] = "Exception.__ne__(self, error)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_5__ne__ = {"__ne__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_5__ne__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_4__ne__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_5__ne__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__ne__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_error,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, 1); __PYX_ERR(1, 16, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ne__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_error = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__ne__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 16, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_4__ne__(__pyx_self, __pyx_v_self, __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_4__ne__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__ne__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":17
 * 
 *     def __ne__(self, object error):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return <bint> (ierr != error)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":18
 *     def __ne__(self, object error):
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr != error)             # <<<<<<<<<<<<<<
 * 
 *     def __lt__(self, object error):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_error, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":16
 *         return <bint> (ierr == error)
 * 
 *     def __ne__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr != error)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__ne__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":20
 *         return <bint> (ierr != error)
 * 
 *     def __lt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr < error)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_7__lt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_6__lt__[] = "Exception.__lt__(self, error)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_7__lt__ = {"__lt__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_7__lt__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_6__lt__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_7__lt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__lt__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_error,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__lt__", 1, 2, 2, 1); __PYX_ERR(1, 20, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__lt__") < 0)) __PYX_ERR(1, 20, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_error = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__lt__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 20, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__lt__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_6__lt__(__pyx_self, __pyx_v_self, __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_6__lt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__lt__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":21
 * 
 *     def __lt__(self, object error):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return <bint> (ierr < error)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":22
 *     def __lt__(self, object error):
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr < error)             # <<<<<<<<<<<<<<
 * 
 *     def __le__(self, object error):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_error, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":20
 *         return <bint> (ierr != error)
 * 
 *     def __lt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr < error)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__lt__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":24
 *         return <bint> (ierr < error)
 * 
 *     def __le__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr <= error)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_9__le__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_8__le__[] = "Exception.__le__(self, error)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_9__le__ = {"__le__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_9__le__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_8__le__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_9__le__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__le__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_error,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__le__", 1, 2, 2, 1); __PYX_ERR(1, 24, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__le__") < 0)) __PYX_ERR(1, 24, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_error = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__le__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 24, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__le__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_8__le__(__pyx_self, __pyx_v_self, __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_8__le__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__le__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":25
 * 
 *     def __le__(self, object error):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return <bint> (ierr <= error)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":26
 *     def __le__(self, object error):
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr <= error)             # <<<<<<<<<<<<<<
 * 
 *     def __gt__(self, object error):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_error, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":24
 *         return <bint> (ierr < error)
 * 
 *     def __le__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr <= error)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__le__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":28
 *         return <bint> (ierr <= error)
 * 
 *     def __gt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr > error)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_11__gt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_10__gt__[] = "Exception.__gt__(self, error)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_11__gt__ = {"__gt__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_11__gt__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_10__gt__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_11__gt__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__gt__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_error,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__gt__", 1, 2, 2, 1); __PYX_ERR(1, 28, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__gt__") < 0)) __PYX_ERR(1, 28, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_error = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__gt__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 28, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__gt__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_10__gt__(__pyx_self, __pyx_v_self, __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_10__gt__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__gt__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":29
 * 
 *     def __gt__(self, object error):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return <bint> (ierr > error)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":30
 *     def __gt__(self, object error):
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr > error)             # <<<<<<<<<<<<<<
 * 
 *     def __ge__(self, object error):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_error, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":28
 *         return <bint> (ierr <= error)
 * 
 *     def __gt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr > error)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__gt__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":32
 *         return <bint> (ierr > error)
 * 
 *     def __ge__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr >= error)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_13__ge__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_12__ge__[] = "Exception.__ge__(self, error)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_13__ge__ = {"__ge__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_13__ge__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_12__ge__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_13__ge__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_error = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__ge__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_error,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__ge__", 1, 2, 2, 1); __PYX_ERR(1, 32, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__ge__") < 0)) __PYX_ERR(1, 32, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_error = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__ge__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 32, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__ge__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_12__ge__(__pyx_self, __pyx_v_self, __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_12__ge__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_error) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__ge__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":33
 * 
 *     def __ge__(self, object error):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return <bint> (ierr >= error)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":34
 *     def __ge__(self, object error):
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr >= error)             # <<<<<<<<<<<<<<
 * 
 *     def __hash__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ierr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_error, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":32
 *         return <bint> (ierr > error)
 * 
 *     def __ge__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr >= error)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__ge__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":36
 *         return <bint> (ierr >= error)
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         return hash(self.ob_mpi)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_15__hash__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_14__hash__[] = "Exception.__hash__(self)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_15__hash__ = {"__hash__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_15__hash__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_14__hash__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_15__hash__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__hash__") < 0)) __PYX_ERR(1, 36, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__hash__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 36, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__hash__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_14__hash__(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_14__hash__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_hash_t __pyx_t_2;
  __Pyx_RefNannySetupContext("__hash__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":37
 * 
 *     def __hash__(self):
 *         return hash(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_FromHash_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":36
 *         return <bint> (ierr >= error)
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         return hash(self.ob_mpi)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__hash__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":39
 *         return hash(self.ob_mpi)
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return ierr != MPI_SUCCESS
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_17__bool__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_16__bool__[] = "Exception.__bool__(self)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_17__bool__ = {"__bool__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_17__bool__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_16__bool__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_17__bool__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__bool__") < 0)) __PYX_ERR(1, 39, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__bool__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 39, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_16__bool__(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_16__bool__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  int __pyx_v_ierr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":40
 * 
 *     def __bool__(self):
 *         cdef int ierr = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return ierr != MPI_SUCCESS
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_ierr = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":41
 *     def __bool__(self):
 *         cdef int ierr = self.ob_mpi
 *         return ierr != MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 *     __nonzero__ = __bool__
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_ierr != MPI_SUCCESS)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":39
 *         return hash(self.ob_mpi)
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return ierr != MPI_SUCCESS
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":45
 *     __nonzero__ = __bool__
 * 
 *     def __int__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_19__int__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_18__int__[] = "Exception.__int__(self)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_19__int__ = {"__int__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_19__int__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_18__int__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_19__int__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__int__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__int__") < 0)) __PYX_ERR(1, 45, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__int__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 45, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_18__int__(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_18__int__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__int__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":46
 * 
 *     def __int__(self):
 *         return self.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":45
 *     __nonzero__ = __bool__
 * 
 *     def __int__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__int__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":48
 *         return self.ob_mpi
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_21__repr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_20__repr__[] = "Exception.__repr__(self)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_21__repr__ = {"__repr__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_21__repr__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_20__repr__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_21__repr__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__repr__") < 0)) __PYX_ERR(1, 48, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__repr__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 48, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_20__repr__(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_20__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":49
 * 
 *     def __repr__(self):
 *         return "MPI.Exception(%d)" % self.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_MPI_Exception_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":48
 *         return self.ob_mpi
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":51
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         if not mpi_active():
 *             return "error code: %d" % self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_23__str__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_22__str__[] = "Exception.__str__(self)";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_23__str__ = {"__str__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_23__str__, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_22__str__};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_23__str__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__str__") < 0)) __PYX_ERR(1, 51, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 51, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_22__str__(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_22__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__str__", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":52
 * 
 *     def __str__(self):
 *         if not mpi_active():             # <<<<<<<<<<<<<<
 *             return "error code: %d" % self.ob_mpi
 *         return self.Get_error_string()
 */
  __pyx_t_1 = ((!(__pyx_f_6mpi4py_3MPI_mpi_active() != 0)) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/ExceptionP.pyx":53
 *     def __str__(self):
 *         if not mpi_active():
 *             return "error code: %d" % self.ob_mpi             # <<<<<<<<<<<<<<
 *         return self.Get_error_string()
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_error_code_d, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/ExceptionP.pyx":52
 * 
 *     def __str__(self):
 *         if not mpi_active():             # <<<<<<<<<<<<<<
 *             return "error code: %d" % self.ob_mpi
 *         return self.Get_error_string()
 */
  }

  /* "mpi4py/MPI/ExceptionP.pyx":54
 *         if not mpi_active():
 *             return "error code: %d" % self.ob_mpi
 *         return self.Get_error_string()             # <<<<<<<<<<<<<<
 * 
 *     def Get_error_code(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_Get_error_string); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":51
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         if not mpi_active():
 *             return "error code: %d" % self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":56
 *         return self.Get_error_string()
 * 
 *     def Get_error_code(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error code
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_25Get_error_code(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_24Get_error_code[] = "Exception.Get_error_code(self)\n\n        Error code\n        ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_25Get_error_code = {"Get_error_code", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_25Get_error_code, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_24Get_error_code};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_25Get_error_code(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_error_code (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_error_code") < 0)) __PYX_ERR(1, 56, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_error_code", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 56, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.Get_error_code", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_24Get_error_code(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_24Get_error_code(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Get_error_code", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":60
 *         Error code
 *         """
 *         cdef int errorcode = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *         errorcode = self.ob_mpi
 *         return errorcode
 */
  __pyx_v_errorcode = MPI_SUCCESS;

  /* "mpi4py/MPI/ExceptionP.pyx":61
 *         """
 *         cdef int errorcode = MPI_SUCCESS
 *         errorcode = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return errorcode
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_errorcode = __pyx_t_2;

  /* "mpi4py/MPI/ExceptionP.pyx":62
 *         cdef int errorcode = MPI_SUCCESS
 *         errorcode = self.ob_mpi
 *         return errorcode             # <<<<<<<<<<<<<<
 * 
 *     error_code = property(Get_error_code, doc="error code")
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_errorcode); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":56
 *         return self.Get_error_string()
 * 
 *     def Get_error_code(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error code
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.Get_error_code", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":66
 *     error_code = property(Get_error_code, doc="error code")
 * 
 *     def Get_error_class(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error class
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_27Get_error_class(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_26Get_error_class[] = "Exception.Get_error_class(self)\n\n        Error class\n        ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_27Get_error_class = {"Get_error_class", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_27Get_error_class, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_26Get_error_class};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_27Get_error_class(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_error_class (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_error_class") < 0)) __PYX_ERR(1, 66, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_error_class", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 66, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.Get_error_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_26Get_error_class(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_26Get_error_class(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  int __pyx_v_errorclass;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_error_class", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":70
 *         Error class
 *         """
 *         cdef int errorclass = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Error_class(self.ob_mpi, &errorclass) )
 *         return errorclass
 */
  __pyx_v_errorclass = MPI_SUCCESS;

  /* "mpi4py/MPI/ExceptionP.pyx":71
 *         """
 *         cdef int errorclass = MPI_SUCCESS
 *         CHKERR( MPI_Error_class(self.ob_mpi, &errorclass) )             # <<<<<<<<<<<<<<
 *         return errorclass
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Error_class(__pyx_t_2, (&__pyx_v_errorclass))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 71, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":72
 *         cdef int errorclass = MPI_SUCCESS
 *         CHKERR( MPI_Error_class(self.ob_mpi, &errorclass) )
 *         return errorclass             # <<<<<<<<<<<<<<
 * 
 *     error_class = property(Get_error_class, doc="error class")
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_errorclass); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":66
 *     error_code = property(Get_error_code, doc="error code")
 * 
 *     def Get_error_class(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error class
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.Get_error_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/ExceptionP.pyx":76
 *     error_class = property(Get_error_class, doc="error class")
 * 
 *     def Get_error_string(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error string
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_29Get_error_string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Exception_28Get_error_string[] = "Exception.Get_error_string(self)\n\n        Error string\n        ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Exception_29Get_error_string = {"Get_error_string", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Exception_29Get_error_string, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Exception_28Get_error_string};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Exception_29Get_error_string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_error_string (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_error_string") < 0)) __PYX_ERR(1, 76, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_error_string", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 76, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Exception.Get_error_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Exception_28Get_error_string(__pyx_self, __pyx_v_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Exception_28Get_error_string(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  char __pyx_v_string[(MPI_MAX_ERROR_STRING + 1)];
  int __pyx_v_resultlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_error_string", 0);

  /* "mpi4py/MPI/ExceptionP.pyx":81
 *         """
 *         cdef char string[MPI_MAX_ERROR_STRING+1]
 *         cdef int resultlen = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Error_string(self.ob_mpi, string, &resultlen) )
 *         return tompistr(string, resultlen)
 */
  __pyx_v_resultlen = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":82
 *         cdef char string[MPI_MAX_ERROR_STRING+1]
 *         cdef int resultlen = 0
 *         CHKERR( MPI_Error_string(self.ob_mpi, string, &resultlen) )             # <<<<<<<<<<<<<<
 *         return tompistr(string, resultlen)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_ob_mpi); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 82, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Error_string(__pyx_t_2, __pyx_v_string, (&__pyx_v_resultlen))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 82, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":83
 *         cdef int resultlen = 0
 *         CHKERR( MPI_Error_string(self.ob_mpi, string, &resultlen) )
 *         return tompistr(string, resultlen)             # <<<<<<<<<<<<<<
 * 
 *     error_string = property(Get_error_string, doc="error string")
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_string, __pyx_v_resultlen); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/ExceptionP.pyx":76
 *     error_class = property(Get_error_class, doc="error class")
 * 
 *     def Get_error_string(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error string
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Exception.Get_error_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Exception.pyx":87
 * 
 * 
 * def Get_error_class(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Convert an *error code* into an *error class*
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Get_error_class(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Get_error_class[] = "Get_error_class(int errorcode)\n\n    Convert an *error code* into an *error class*\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_5Get_error_class = {"Get_error_class", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Get_error_class, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Get_error_class};
static PyObject *__pyx_pw_6mpi4py_3MPI_5Get_error_class(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_error_class (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_error_class") < 0)) __PYX_ERR(19, 87, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(19, 87, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_error_class", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(19, 87, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Get_error_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Get_error_class(__pyx_self, __pyx_v_errorcode);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Get_error_class(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorcode) {
  int __pyx_v_errorclass;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_error_class", 0);

  /* "mpi4py/MPI/Exception.pyx":91
 *     Convert an *error code* into an *error class*
 *     """
 *     cdef int errorclass = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Error_class(errorcode, &errorclass) )
 *     return errorclass
 */
  __pyx_v_errorclass = MPI_SUCCESS;

  /* "mpi4py/MPI/Exception.pyx":92
 *     """
 *     cdef int errorclass = MPI_SUCCESS
 *     CHKERR( MPI_Error_class(errorcode, &errorclass) )             # <<<<<<<<<<<<<<
 *     return errorclass
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Error_class(__pyx_v_errorcode, (&__pyx_v_errorclass))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(19, 92, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":93
 *     cdef int errorclass = MPI_SUCCESS
 *     CHKERR( MPI_Error_class(errorcode, &errorclass) )
 *     return errorclass             # <<<<<<<<<<<<<<
 * 
 * def Get_error_string(int errorcode):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_errorclass); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Exception.pyx":87
 * 
 * 
 * def Get_error_class(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Convert an *error code* into an *error class*
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Get_error_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Exception.pyx":95
 *     return errorclass
 * 
 * def Get_error_string(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Return the *error string* for a given
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Get_error_string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Get_error_string[] = "Get_error_string(int errorcode)\n\n    Return the *error string* for a given\n    *error class* or *error code*\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_7Get_error_string = {"Get_error_string", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Get_error_string, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Get_error_string};
static PyObject *__pyx_pw_6mpi4py_3MPI_7Get_error_string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_error_string (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_error_string") < 0)) __PYX_ERR(19, 95, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(19, 95, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_error_string", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(19, 95, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Get_error_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Get_error_string(__pyx_self, __pyx_v_errorcode);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Get_error_string(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorcode) {
  char __pyx_v_string[(MPI_MAX_ERROR_STRING + 1)];
  int __pyx_v_resultlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_error_string", 0);

  /* "mpi4py/MPI/Exception.pyx":101
 *     """
 *     cdef char string[MPI_MAX_ERROR_STRING+1]
 *     cdef int resultlen = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Error_string(errorcode, string, &resultlen) )
 *     return tompistr(string, resultlen)
 */
  __pyx_v_resultlen = 0;

  /* "mpi4py/MPI/Exception.pyx":102
 *     cdef char string[MPI_MAX_ERROR_STRING+1]
 *     cdef int resultlen = 0
 *     CHKERR( MPI_Error_string(errorcode, string, &resultlen) )             # <<<<<<<<<<<<<<
 *     return tompistr(string, resultlen)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Error_string(__pyx_v_errorcode, __pyx_v_string, (&__pyx_v_resultlen))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(19, 102, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":103
 *     cdef int resultlen = 0
 *     CHKERR( MPI_Error_string(errorcode, string, &resultlen) )
 *     return tompistr(string, resultlen)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_string, __pyx_v_resultlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Exception.pyx":95
 *     return errorclass
 * 
 * def Get_error_string(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Return the *error string* for a given
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Get_error_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Exception.pyx":106
 * 
 * 
 * def Add_error_class():             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error class* to the known error classes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Add_error_class(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Add_error_class[] = "Add_error_class()\n\n    Add an *error class* to the known error classes\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_9Add_error_class = {"Add_error_class", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Add_error_class, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Add_error_class};
static PyObject *__pyx_pw_6mpi4py_3MPI_9Add_error_class(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Add_error_class (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Add_error_class", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Add_error_class", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Add_error_class(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Add_error_class(CYTHON_UNUSED PyObject *__pyx_self) {
  int __pyx_v_errorclass;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Add_error_class", 0);

  /* "mpi4py/MPI/Exception.pyx":110
 *     Add an *error class* to the known error classes
 *     """
 *     cdef int errorclass = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Add_error_class(&errorclass) )
 *     return errorclass
 */
  __pyx_v_errorclass = MPI_SUCCESS;

  /* "mpi4py/MPI/Exception.pyx":111
 *     """
 *     cdef int errorclass = MPI_SUCCESS
 *     CHKERR( MPI_Add_error_class(&errorclass) )             # <<<<<<<<<<<<<<
 *     return errorclass
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Add_error_class((&__pyx_v_errorclass))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(19, 111, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":112
 *     cdef int errorclass = MPI_SUCCESS
 *     CHKERR( MPI_Add_error_class(&errorclass) )
 *     return errorclass             # <<<<<<<<<<<<<<
 * 
 * def Add_error_code(int errorclass):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_errorclass); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Exception.pyx":106
 * 
 * 
 * def Add_error_class():             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error class* to the known error classes
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Add_error_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Exception.pyx":114
 *     return errorclass
 * 
 * def Add_error_code(int errorclass):             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error code* to an *error class*
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_11Add_error_code(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_10Add_error_code[] = "Add_error_code(int errorclass)\n\n    Add an *error code* to an *error class*\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_11Add_error_code = {"Add_error_code", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_11Add_error_code, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_10Add_error_code};
static PyObject *__pyx_pw_6mpi4py_3MPI_11Add_error_code(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorclass;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Add_error_code (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorclass,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorclass)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Add_error_code") < 0)) __PYX_ERR(19, 114, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errorclass = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorclass == (int)-1) && PyErr_Occurred())) __PYX_ERR(19, 114, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Add_error_code", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(19, 114, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Add_error_code", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Add_error_code(__pyx_self, __pyx_v_errorclass);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_10Add_error_code(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorclass) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Add_error_code", 0);

  /* "mpi4py/MPI/Exception.pyx":118
 *     Add an *error code* to an *error class*
 *     """
 *     cdef int errorcode = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Add_error_code(errorclass, &errorcode) )
 *     return errorcode
 */
  __pyx_v_errorcode = MPI_SUCCESS;

  /* "mpi4py/MPI/Exception.pyx":119
 *     """
 *     cdef int errorcode = MPI_SUCCESS
 *     CHKERR( MPI_Add_error_code(errorclass, &errorcode) )             # <<<<<<<<<<<<<<
 *     return errorcode
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Add_error_code(__pyx_v_errorclass, (&__pyx_v_errorcode))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(19, 119, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":120
 *     cdef int errorcode = MPI_SUCCESS
 *     CHKERR( MPI_Add_error_code(errorclass, &errorcode) )
 *     return errorcode             # <<<<<<<<<<<<<<
 * 
 * def Add_error_string(int errorcode, string):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_errorcode); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Exception.pyx":114
 *     return errorclass
 * 
 * def Add_error_code(int errorclass):             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error code* to an *error class*
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Add_error_code", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Exception.pyx":122
 *     return errorcode
 * 
 * def Add_error_string(int errorcode, string):             # <<<<<<<<<<<<<<
 *     """
 *     Associate an *error string* with an
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_13Add_error_string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_12Add_error_string[] = "Add_error_string(int errorcode, string)\n\n    Associate an *error string* with an\n    *error class* or *errorcode*\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_13Add_error_string = {"Add_error_string", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_13Add_error_string, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_12Add_error_string};
static PyObject *__pyx_pw_6mpi4py_3MPI_13Add_error_string(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_v_string = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Add_error_string (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,&__pyx_n_s_string,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_string)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Add_error_string", 1, 2, 2, 1); __PYX_ERR(19, 122, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Add_error_string") < 0)) __PYX_ERR(19, 122, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(19, 122, __pyx_L3_error)
    __pyx_v_string = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Add_error_string", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(19, 122, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Add_error_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_12Add_error_string(__pyx_self, __pyx_v_errorcode, __pyx_v_string);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_12Add_error_string(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_errorcode, PyObject *__pyx_v_string) {
  char *__pyx_v_cstring;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Add_error_string", 0);
  __Pyx_INCREF(__pyx_v_string);

  /* "mpi4py/MPI/Exception.pyx":127
 *     *error class* or *errorcode*
 *     """
 *     cdef char *cstring = NULL             # <<<<<<<<<<<<<<
 *     string = asmpistr(string, &cstring)
 *     CHKERR( MPI_Add_error_string(errorcode, cstring) )
 */
  __pyx_v_cstring = NULL;

  /* "mpi4py/MPI/Exception.pyx":128
 *     """
 *     cdef char *cstring = NULL
 *     string = asmpistr(string, &cstring)             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Add_error_string(errorcode, cstring) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_string, (&__pyx_v_cstring)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_string, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":129
 *     cdef char *cstring = NULL
 *     string = asmpistr(string, &cstring)
 *     CHKERR( MPI_Add_error_string(errorcode, cstring) )             # <<<<<<<<<<<<<<
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Add_error_string(__pyx_v_errorcode, __pyx_v_cstring)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(19, 129, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":122
 *     return errorcode
 * 
 * def Add_error_string(int errorcode, string):             # <<<<<<<<<<<<<<
 *     """
 *     Associate an *error string* with an
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Add_error_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_string);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Errhandler.pyx":7
 *     """
 * 
 *     def __cinit__(self, Errhandler errhandler=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_ERRHANDLER_NULL
 *         if errhandler is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_10Errhandler_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_10Errhandler_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errhandler,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIErrhandlerObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errhandler);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(20, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Errhandler.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_errhandler), __pyx_ptype_6mpi4py_3MPI_Errhandler, 1, "errhandler", 0))) __PYX_ERR(20, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Errhandler___cinit__(((struct PyMPIErrhandlerObject *)__pyx_v_self), __pyx_v_errhandler);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_10Errhandler___cinit__(struct PyMPIErrhandlerObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Errhandler __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Errhandler.pyx":8
 * 
 *     def __cinit__(self, Errhandler errhandler=None):
 *         self.ob_mpi = MPI_ERRHANDLER_NULL             # <<<<<<<<<<<<<<
 *         if errhandler is None: return
 *         self.ob_mpi = errhandler.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_ERRHANDLER_NULL;

  /* "mpi4py/MPI/Errhandler.pyx":9
 *     def __cinit__(self, Errhandler errhandler=None):
 *         self.ob_mpi = MPI_ERRHANDLER_NULL
 *         if errhandler is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = errhandler.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_errhandler) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Errhandler.pyx":10
 *         self.ob_mpi = MPI_ERRHANDLER_NULL
 *         if errhandler is None: return
 *         self.ob_mpi = errhandler.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_3 = __pyx_v_errhandler->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Errhandler.pyx":7
 *     """
 * 
 *     def __cinit__(self, Errhandler errhandler=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_ERRHANDLER_NULL
 *         if errhandler is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Errhandler.pyx":12
 *         self.ob_mpi = errhandler.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Errhandler(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_10Errhandler_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_10Errhandler_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_10Errhandler_2__dealloc__(((struct PyMPIErrhandlerObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_10Errhandler_2__dealloc__(struct PyMPIErrhandlerObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Errhandler.pyx":13
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Errhandler(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Errhandler.pyx":14
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Errhandler(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Errhandler((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(20, 14, __pyx_L1_error)

  /* "mpi4py/MPI/Errhandler.pyx":12
 *         self.ob_mpi = errhandler.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Errhandler(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Errhandler.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Errhandler.pyx":16
 *         CHKERR( del_Errhandler(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Errhandler): return NotImplemented
 *         cdef Errhandler s = <Errhandler>self, o = <Errhandler>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Errhandler_4__richcmp__(((struct PyMPIErrhandlerObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_4__richcmp__(struct PyMPIErrhandlerObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIErrhandlerObject *__pyx_v_s = 0;
  struct PyMPIErrhandlerObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Errhandler.pyx":17
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Errhandler): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Errhandler s = <Errhandler>self, o = <Errhandler>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Errhandler); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Errhandler.pyx":18
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Errhandler): return NotImplemented
 *         cdef Errhandler s = <Errhandler>self, o = <Errhandler>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIErrhandlerObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIErrhandlerObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":19
 *         if not isinstance(other, Errhandler): return NotImplemented
 *         cdef Errhandler s = <Errhandler>self, o = <Errhandler>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 19, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Errhandler.pyx":20
 *         cdef Errhandler s = <Errhandler>self, o = <Errhandler>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Errhandler.pyx":21
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":22
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":23
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(20, 23, __pyx_L1_error)

  /* "mpi4py/MPI/Errhandler.pyx":16
 *         CHKERR( del_Errhandler(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Errhandler): return NotImplemented
 *         cdef Errhandler s = <Errhandler>self, o = <Errhandler>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Errhandler.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Errhandler.pyx":25
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_ERRHANDLER_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_10Errhandler_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_10Errhandler_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Errhandler_6__bool__(((struct PyMPIErrhandlerObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_10Errhandler_6__bool__(struct PyMPIErrhandlerObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Errhandler.pyx":26
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_ERRHANDLER_NULL             # <<<<<<<<<<<<<<
 * 
 *     def Free(self):
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_ERRHANDLER_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Errhandler.pyx":25
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_ERRHANDLER_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Errhandler.pyx":28
 *         return self.ob_mpi != MPI_ERRHANDLER_NULL
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free an error handler
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_9Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_10Errhandler_8Free[] = "Errhandler.Free(self)\n\n        Free an error handler\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_9Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Errhandler_8Free(((struct PyMPIErrhandlerObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_8Free(struct PyMPIErrhandlerObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Errhandler.pyx":32
 *         Free an error handler
 *         """
 *         CHKERR( MPI_Errhandler_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         if self is __ERRORS_RETURN__:    self.ob_mpi = MPI_ERRORS_RETURN
 *         if self is __ERRORS_ARE_FATAL__: self.ob_mpi = MPI_ERRORS_ARE_FATAL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Errhandler_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(20, 32, __pyx_L1_error)

  /* "mpi4py/MPI/Errhandler.pyx":33
 *         """
 *         CHKERR( MPI_Errhandler_free(&self.ob_mpi) )
 *         if self is __ERRORS_RETURN__:    self.ob_mpi = MPI_ERRORS_RETURN             # <<<<<<<<<<<<<<
 *         if self is __ERRORS_ARE_FATAL__: self.ob_mpi = MPI_ERRORS_ARE_FATAL
 * 
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___ERRORS_RETURN__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_ERRORS_RETURN;
  }

  /* "mpi4py/MPI/Errhandler.pyx":34
 *         CHKERR( MPI_Errhandler_free(&self.ob_mpi) )
 *         if self is __ERRORS_RETURN__:    self.ob_mpi = MPI_ERRORS_RETURN
 *         if self is __ERRORS_ARE_FATAL__: self.ob_mpi = MPI_ERRORS_ARE_FATAL             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_ERRORS_ARE_FATAL;
  }

  /* "mpi4py/MPI/Errhandler.pyx":28
 *         return self.ob_mpi != MPI_ERRHANDLER_NULL
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free an error handler
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Errhandler.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Errhandler.pyx":39
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_11py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_10Errhandler_10py2f[] = "Errhandler.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_11py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Errhandler_10py2f(((struct PyMPIErrhandlerObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_10py2f(struct PyMPIErrhandlerObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Errhandler.pyx":42
 *         """
 *         """
 *         return MPI_Errhandler_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Errhandler_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Errhandler.pyx":39
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Errhandler.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Errhandler.pyx":45
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_13f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_10Errhandler_12f2py[] = "Errhandler.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_10Errhandler_13f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(20, 45, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 45, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Errhandler.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_10Errhandler_12f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_10Errhandler_12f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Errhandler.pyx":48
 *         """
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)             # <<<<<<<<<<<<<<
 *         errhandler.ob_mpi = MPI_Errhandler_f2c(arg)
 *         return errhandler
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Errhandler(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 48, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":49
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         errhandler.ob_mpi = MPI_Errhandler_f2c(arg)             # <<<<<<<<<<<<<<
 *         return errhandler
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(20, 49, __pyx_L1_error)
  __pyx_v_errhandler->ob_mpi = MPI_Errhandler_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Errhandler.pyx":50
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         errhandler.ob_mpi = MPI_Errhandler_f2c(arg)
 *         return errhandler             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_errhandler));
  __pyx_r = ((PyObject *)__pyx_v_errhandler);
  goto __pyx_L0;

  /* "mpi4py/MPI/Errhandler.pyx":45
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Errhandler.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_errhandler);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":49
 *     """
 * 
 *     def __cinit__(self, Datatype datatype=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_DATATYPE_NULL
 *         if datatype is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Datatype_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Datatype_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datatype,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIDatatypeObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatype);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(21, 49, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_datatype = ((struct PyMPIDatatypeObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 49, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_datatype), __pyx_ptype_6mpi4py_3MPI_Datatype, 1, "datatype", 0))) __PYX_ERR(21, 49, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype___cinit__(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_datatype);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Datatype___cinit__(struct PyMPIDatatypeObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Datatype __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Datatype.pyx":50
 * 
 *     def __cinit__(self, Datatype datatype=None):
 *         self.ob_mpi = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         if datatype is None: return
 *         self.ob_mpi = datatype.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/Datatype.pyx":51
 *     def __cinit__(self, Datatype datatype=None):
 *         self.ob_mpi = MPI_DATATYPE_NULL
 *         if datatype is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = datatype.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_datatype) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":52
 *         self.ob_mpi = MPI_DATATYPE_NULL
 *         if datatype is None: return
 *         self.ob_mpi = datatype.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_3 = __pyx_v_datatype->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Datatype.pyx":49
 *     """
 * 
 *     def __cinit__(self, Datatype datatype=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_DATATYPE_NULL
 *         if datatype is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":54
 *         self.ob_mpi = datatype.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Datatype(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_8Datatype_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_8Datatype_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_8Datatype_2__dealloc__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_8Datatype_2__dealloc__(struct PyMPIDatatypeObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Datatype.pyx":55
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Datatype(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":56
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Datatype(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Datatype((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 56, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":54
 *         self.ob_mpi = datatype.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Datatype(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Datatype.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Datatype.pyx":58
 *         CHKERR( del_Datatype(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Datatype): return NotImplemented
 *         cdef Datatype s = <Datatype>self, o = <Datatype>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_4__richcmp__(((struct PyMPIDatatypeObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_4__richcmp__(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIDatatypeObject *__pyx_v_s = 0;
  struct PyMPIDatatypeObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Datatype.pyx":59
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Datatype): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Datatype s = <Datatype>self, o = <Datatype>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Datatype); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":60
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Datatype): return NotImplemented
 *         cdef Datatype s = <Datatype>self, o = <Datatype>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIDatatypeObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIDatatypeObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":61
 *         if not isinstance(other, Datatype): return NotImplemented
 *         cdef Datatype s = <Datatype>self, o = <Datatype>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 61, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":62
 *         cdef Datatype s = <Datatype>self, o = <Datatype>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":63
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":64
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":65
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(21, 65, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":58
 *         CHKERR( del_Datatype(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Datatype): return NotImplemented
 *         cdef Datatype s = <Datatype>self, o = <Datatype>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":67
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_DATATYPE_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Datatype_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Datatype_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_6__bool__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Datatype_6__bool__(struct PyMPIDatatypeObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Datatype.pyx":68
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Datatype Accessors
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_DATATYPE_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":67
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_DATATYPE_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":73
 *     # ------------------
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of bytes occupied
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_9Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_8Get_size[] = "Datatype.Get_size(self)\n\n        Return the number of bytes occupied\n        by entries in the datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_9Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_size (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_size", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_size", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_8Get_size(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8Get_size(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_size", 0);

  /* "mpi4py/MPI/Datatype.pyx":78
 *         by entries in the datatype
 *         """
 *         cdef MPI_Count size = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )
 *         return size
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Datatype.pyx":79
 *         """
 *         cdef MPI_Count size = 0
 *         CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )             # <<<<<<<<<<<<<<
 *         return size
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_size_x(__pyx_v_self->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 79, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":80
 *         cdef MPI_Count size = 0
 *         CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     property size:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":73
 *     # ------------------
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of bytes occupied
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":84
 *     property size:
 *         """size (in bytes)"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count size = 0
 *             CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_4size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_4size___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_4size___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":85
 *         """size (in bytes)"""
 *         def __get__(self):
 *             cdef MPI_Count size = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )
 *             return size
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Datatype.pyx":86
 *         def __get__(self):
 *             cdef MPI_Count size = 0
 *             CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )             # <<<<<<<<<<<<<<
 *             return size
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_size_x(__pyx_v_self->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 86, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":87
 *             cdef MPI_Count size = 0
 *             CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )
 *             return size             # <<<<<<<<<<<<<<
 * 
 *     def Get_extent(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":84
 *     property size:
 *         """size (in bytes)"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count size = 0
 *             CHKERR( MPI_Type_size_x(self.ob_mpi, &size) )
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":89
 *             return size
 * 
 *     def Get_extent(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return lower bound and extent of datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_11Get_extent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_10Get_extent[] = "Datatype.Get_extent(self)\n\n        Return lower bound and extent of datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_11Get_extent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_extent (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_extent", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_extent", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_10Get_extent(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_10Get_extent(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Get_extent", 0);

  /* "mpi4py/MPI/Datatype.pyx":93
 *         Return lower bound and extent of datatype
 *         """
 *         cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *         return (lb, extent)
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":94
 *         """
 *         cdef MPI_Count lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *         return (lb, extent)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 94, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":95
 *         cdef MPI_Count lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *         return (lb, extent)             # <<<<<<<<<<<<<<
 * 
 *     property extent:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_lb); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Count(__pyx_v_extent); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":89
 *             return size
 * 
 *     def Get_extent(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return lower bound and extent of datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":99
 *     property extent:
 *         """extent"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_6extent_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_6extent_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_6extent___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_6extent___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":100
 *         """extent"""
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *             return extent
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":101
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *             return extent
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 101, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":102
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *             return extent             # <<<<<<<<<<<<<<
 * 
 *     property lb:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_extent); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":99
 *     property extent:
 *         """extent"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.extent.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":106
 *     property lb:
 *         """lower bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_2lb_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_2lb_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_2lb___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_2lb___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":107
 *         """lower bound"""
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *             return lb
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":108
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *             return lb
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 108, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":109
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *             return lb             # <<<<<<<<<<<<<<
 * 
 *     property ub:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_lb); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":106
 *     property lb:
 *         """lower bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.lb.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":113
 *     property ub:
 *         """upper bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_2ub_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_2ub_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_2ub___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_2ub___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":114
 *         """upper bound"""
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *             return lb + extent
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":115
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *             return lb + extent
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 115, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":116
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 *             return lb + extent             # <<<<<<<<<<<<<<
 * 
 *     # Datatype Constructors
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":113
 *     property ub:
 *         """upper bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_extent_x(self.ob_mpi, &lb, &extent) )
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.ub.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":121
 *     # ---------------------
 * 
 *     def Dup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate a datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_13Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_12Dup[] = "Datatype.Dup(self)\n\n        Duplicate a datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_13Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dup (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Dup", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Dup", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_12Dup(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_12Dup(struct PyMPIDatatypeObject *__pyx_v_self) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Dup", 0);

  /* "mpi4py/MPI/Datatype.pyx":125
 *         Duplicate a datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_dup(self.ob_mpi, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 125, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":126
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_dup(self.ob_mpi, &datatype.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return datatype
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_dup(__pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 126, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":127
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_dup(self.ob_mpi, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     Create_dup = Dup #: convenience alias
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":121
 *     # ---------------------
 * 
 *     def Dup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate a datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Dup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":131
 *     Create_dup = Dup #: convenience alias
 * 
 *     def Create_contiguous(self, int count):             # <<<<<<<<<<<<<<
 *         """
 *         Create a contiguous datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_15Create_contiguous(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_14Create_contiguous[] = "Datatype.Create_contiguous(self, int count)\n\n        Create a contiguous datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_15Create_contiguous(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_count;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_contiguous (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_count,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_contiguous") < 0)) __PYX_ERR(21, 131, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_count = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 131, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_contiguous", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 131, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_contiguous", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_14Create_contiguous(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_count);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_14Create_contiguous(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_contiguous", 0);

  /* "mpi4py/MPI/Datatype.pyx":135
 *         Create a contiguous datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_contiguous(count, self.ob_mpi,
 *                                     &datatype.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 135, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":136
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_contiguous(count, self.ob_mpi,             # <<<<<<<<<<<<<<
 *                                     &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_contiguous(__pyx_v_count, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 136, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":138
 *         CHKERR( MPI_Type_contiguous(count, self.ob_mpi,
 *                                     &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     def Create_vector(self, int count, int blocklength, int stride):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":131
 *     Create_dup = Dup #: convenience alias
 * 
 *     def Create_contiguous(self, int count):             # <<<<<<<<<<<<<<
 *         """
 *         Create a contiguous datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_contiguous", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":140
 *         return datatype
 * 
 *     def Create_vector(self, int count, int blocklength, int stride):             # <<<<<<<<<<<<<<
 *         """
 *         Create a vector (strided) datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_17Create_vector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_16Create_vector[] = "Datatype.Create_vector(self, int count, int blocklength, int stride)\n\n        Create a vector (strided) datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_17Create_vector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_count;
  int __pyx_v_blocklength;
  int __pyx_v_stride;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_vector (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_count,&__pyx_n_s_blocklength,&__pyx_n_s_stride,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklength)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_vector", 1, 3, 3, 1); __PYX_ERR(21, 140, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_vector", 1, 3, 3, 2); __PYX_ERR(21, 140, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_vector") < 0)) __PYX_ERR(21, 140, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_count = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 140, __pyx_L3_error)
    __pyx_v_blocklength = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_blocklength == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 140, __pyx_L3_error)
    __pyx_v_stride = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_stride == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 140, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_vector", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 140, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_vector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_16Create_vector(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_count, __pyx_v_blocklength, __pyx_v_stride);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_16Create_vector(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count, int __pyx_v_blocklength, int __pyx_v_stride) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_vector", 0);

  /* "mpi4py/MPI/Datatype.pyx":144
 *         Create a vector (strided) datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_vector(count, blocklength, stride,
 *                                 self.ob_mpi, &datatype.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 144, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":145
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_vector(count, blocklength, stride,             # <<<<<<<<<<<<<<
 *                                 self.ob_mpi, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_vector(__pyx_v_count, __pyx_v_blocklength, __pyx_v_stride, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 145, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":147
 *         CHKERR( MPI_Type_vector(count, blocklength, stride,
 *                                 self.ob_mpi, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     def Create_hvector(self, int count, int blocklength, Aint stride):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":140
 *         return datatype
 * 
 *     def Create_vector(self, int count, int blocklength, int stride):             # <<<<<<<<<<<<<<
 *         """
 *         Create a vector (strided) datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_vector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":149
 *         return datatype
 * 
 *     def Create_hvector(self, int count, int blocklength, Aint stride):             # <<<<<<<<<<<<<<
 *         """
 *         Create a vector (strided) datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_19Create_hvector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_18Create_hvector[] = "Datatype.Create_hvector(self, int count, int blocklength, Aint stride)\n\n        Create a vector (strided) datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_19Create_hvector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_count;
  int __pyx_v_blocklength;
  MPI_Aint __pyx_v_stride;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_hvector (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_count,&__pyx_n_s_blocklength,&__pyx_n_s_stride,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklength)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_hvector", 1, 3, 3, 1); __PYX_ERR(21, 149, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stride)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_hvector", 1, 3, 3, 2); __PYX_ERR(21, 149, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_hvector") < 0)) __PYX_ERR(21, 149, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_count = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 149, __pyx_L3_error)
    __pyx_v_blocklength = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_blocklength == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 149, __pyx_L3_error)
    __pyx_v_stride = __Pyx_PyInt_As_MPI_Aint(values[2]); if (unlikely((__pyx_v_stride == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 149, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_hvector", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 149, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_hvector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_18Create_hvector(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_count, __pyx_v_blocklength, __pyx_v_stride);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_18Create_hvector(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count, int __pyx_v_blocklength, MPI_Aint __pyx_v_stride) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_hvector", 0);

  /* "mpi4py/MPI/Datatype.pyx":153
 *         Create a vector (strided) datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_hvector(count, blocklength, stride,
 *                                         self.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 153, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":154
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_hvector(count, blocklength, stride,             # <<<<<<<<<<<<<<
 *                                         self.ob_mpi,
 *                                         &datatype.ob_mpi) )
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_hvector(__pyx_v_count, __pyx_v_blocklength, __pyx_v_stride, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 154, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":157
 *                                         self.ob_mpi,
 *                                         &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     def Create_indexed(self, blocklengths, displacements):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":149
 *         return datatype
 * 
 *     def Create_hvector(self, int count, int blocklength, Aint stride):             # <<<<<<<<<<<<<<
 *         """
 *         Create a vector (strided) datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_hvector", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":159
 *         return datatype
 * 
 *     def Create_indexed(self, blocklengths, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_21Create_indexed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_20Create_indexed[] = "Datatype.Create_indexed(self, blocklengths, displacements)\n\n        Create an indexed datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_21Create_indexed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_blocklengths = 0;
  PyObject *__pyx_v_displacements = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_indexed (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_blocklengths,&__pyx_n_s_displacements,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklengths)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_displacements)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_indexed", 1, 2, 2, 1); __PYX_ERR(21, 159, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_indexed") < 0)) __PYX_ERR(21, 159, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_blocklengths = values[0];
    __pyx_v_displacements = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_indexed", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 159, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_20Create_indexed(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_blocklengths, __pyx_v_displacements);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_20Create_indexed(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_blocklengths, PyObject *__pyx_v_displacements) {
  int __pyx_v_count;
  int *__pyx_v_iblen;
  int *__pyx_v_idisp;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_indexed", 0);
  __Pyx_INCREF(__pyx_v_blocklengths);
  __Pyx_INCREF(__pyx_v_displacements);

  /* "mpi4py/MPI/Datatype.pyx":163
 *         Create an indexed datatype
 *         """
 *         cdef int count = 0, *iblen = NULL, *idisp = NULL             # <<<<<<<<<<<<<<
 *         blocklengths  = getarray(blocklengths,  &count, &iblen)
 *         displacements = chkarray(displacements,  count, &idisp)
 */
  __pyx_v_count = 0;
  __pyx_v_iblen = NULL;
  __pyx_v_idisp = NULL;

  /* "mpi4py/MPI/Datatype.pyx":164
 *         """
 *         cdef int count = 0, *iblen = NULL, *idisp = NULL
 *         blocklengths  = getarray(blocklengths,  &count, &iblen)             # <<<<<<<<<<<<<<
 *         displacements = chkarray(displacements,  count, &idisp)
 *         #
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_blocklengths, (&__pyx_v_count), (&__pyx_v_iblen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_blocklengths, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":165
 *         cdef int count = 0, *iblen = NULL, *idisp = NULL
 *         blocklengths  = getarray(blocklengths,  &count, &iblen)
 *         displacements = chkarray(displacements,  count, &idisp)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_displacements, __pyx_v_count, (&__pyx_v_idisp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_displacements, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":167
 *         displacements = chkarray(displacements,  count, &idisp)
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_indexed(count, iblen, idisp,
 *                                  self.ob_mpi, &datatype.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 167, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":168
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_indexed(count, iblen, idisp,             # <<<<<<<<<<<<<<
 *                                  self.ob_mpi, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_indexed(__pyx_v_count, __pyx_v_iblen, __pyx_v_idisp, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 168, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":170
 *         CHKERR( MPI_Type_indexed(count, iblen, idisp,
 *                                  self.ob_mpi, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     def Create_hindexed(self, blocklengths, displacements):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":159
 *         return datatype
 * 
 *     def Create_indexed(self, blocklengths, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_blocklengths);
  __Pyx_XDECREF(__pyx_v_displacements);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":172
 *         return datatype
 * 
 *     def Create_hindexed(self, blocklengths, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_23Create_hindexed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_22Create_hindexed[] = "Datatype.Create_hindexed(self, blocklengths, displacements)\n\n        Create an indexed datatype\n        with displacements in bytes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_23Create_hindexed(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_blocklengths = 0;
  PyObject *__pyx_v_displacements = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_hindexed (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_blocklengths,&__pyx_n_s_displacements,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklengths)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_displacements)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_hindexed", 1, 2, 2, 1); __PYX_ERR(21, 172, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_hindexed") < 0)) __PYX_ERR(21, 172, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_blocklengths = values[0];
    __pyx_v_displacements = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_hindexed", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 172, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_hindexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_22Create_hindexed(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_blocklengths, __pyx_v_displacements);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_22Create_hindexed(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_blocklengths, PyObject *__pyx_v_displacements) {
  int __pyx_v_count;
  int *__pyx_v_iblen;
  MPI_Aint *__pyx_v_idisp;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_hindexed", 0);
  __Pyx_INCREF(__pyx_v_blocklengths);
  __Pyx_INCREF(__pyx_v_displacements);

  /* "mpi4py/MPI/Datatype.pyx":177
 *         with displacements in bytes
 *         """
 *         cdef int count = 0, *iblen = NULL             # <<<<<<<<<<<<<<
 *         blocklengths = getarray(blocklengths, &count, &iblen)
 *         cdef MPI_Aint *idisp = NULL
 */
  __pyx_v_count = 0;
  __pyx_v_iblen = NULL;

  /* "mpi4py/MPI/Datatype.pyx":178
 *         """
 *         cdef int count = 0, *iblen = NULL
 *         blocklengths = getarray(blocklengths, &count, &iblen)             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = chkarray(displacements, count, &idisp)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_blocklengths, (&__pyx_v_count), (&__pyx_v_iblen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_blocklengths, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":179
 *         cdef int count = 0, *iblen = NULL
 *         blocklengths = getarray(blocklengths, &count, &iblen)
 *         cdef MPI_Aint *idisp = NULL             # <<<<<<<<<<<<<<
 *         displacements = chkarray(displacements, count, &idisp)
 *         #
 */
  __pyx_v_idisp = NULL;

  /* "mpi4py/MPI/Datatype.pyx":180
 *         blocklengths = getarray(blocklengths, &count, &iblen)
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = chkarray(displacements, count, &idisp)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_displacements, __pyx_v_count, (&__pyx_v_idisp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_displacements, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":182
 *         displacements = chkarray(displacements, count, &idisp)
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_hindexed(count, iblen, idisp,
 *                                          self.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 182, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":183
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_hindexed(count, iblen, idisp,             # <<<<<<<<<<<<<<
 *                                          self.ob_mpi,
 *                                          &datatype.ob_mpi) )
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_hindexed(__pyx_v_count, __pyx_v_iblen, __pyx_v_idisp, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 183, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":186
 *                                          self.ob_mpi,
 *                                          &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     def Create_indexed_block(self, int blocklength, displacements):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":172
 *         return datatype
 * 
 *     def Create_hindexed(self, blocklengths, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_hindexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_blocklengths);
  __Pyx_XDECREF(__pyx_v_displacements);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":188
 *         return datatype
 * 
 *     def Create_indexed_block(self, int blocklength, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_25Create_indexed_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_24Create_indexed_block[] = "Datatype.Create_indexed_block(self, int blocklength, displacements)\n\n        Create an indexed datatype\n        with constant-sized blocks\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_25Create_indexed_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_blocklength;
  PyObject *__pyx_v_displacements = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_indexed_block (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_blocklength,&__pyx_n_s_displacements,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklength)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_displacements)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_indexed_block", 1, 2, 2, 1); __PYX_ERR(21, 188, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_indexed_block") < 0)) __PYX_ERR(21, 188, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_blocklength = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_blocklength == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 188, __pyx_L3_error)
    __pyx_v_displacements = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_indexed_block", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 188, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_indexed_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_24Create_indexed_block(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_blocklength, __pyx_v_displacements);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_24Create_indexed_block(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_blocklength, PyObject *__pyx_v_displacements) {
  int __pyx_v_count;
  int *__pyx_v_idisp;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_indexed_block", 0);
  __Pyx_INCREF(__pyx_v_displacements);

  /* "mpi4py/MPI/Datatype.pyx":193
 *         with constant-sized blocks
 *         """
 *         cdef int count = 0, *idisp = NULL             # <<<<<<<<<<<<<<
 *         displacements = getarray(displacements, &count, &idisp)
 *         #
 */
  __pyx_v_count = 0;
  __pyx_v_idisp = NULL;

  /* "mpi4py/MPI/Datatype.pyx":194
 *         """
 *         cdef int count = 0, *idisp = NULL
 *         displacements = getarray(displacements, &count, &idisp)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_displacements, (&__pyx_v_count), (&__pyx_v_idisp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_displacements, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":196
 *         displacements = getarray(displacements, &count, &idisp)
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_indexed_block(count, blocklength,
 *                                               idisp, self.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 196, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":197
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_indexed_block(count, blocklength,             # <<<<<<<<<<<<<<
 *                                               idisp, self.ob_mpi,
 *                                               &datatype.ob_mpi) )
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_indexed_block(__pyx_v_count, __pyx_v_blocklength, __pyx_v_idisp, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 197, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":200
 *                                               idisp, self.ob_mpi,
 *                                               &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     def Create_hindexed_block(self, int blocklength, displacements):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":188
 *         return datatype
 * 
 *     def Create_indexed_block(self, int blocklength, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_indexed_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_displacements);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":202
 *         return datatype
 * 
 *     def Create_hindexed_block(self, int blocklength, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_27Create_hindexed_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_26Create_hindexed_block[] = "Datatype.Create_hindexed_block(self, int blocklength, displacements)\n\n        Create an indexed datatype\n        with constant-sized blocks\n        and displacements in bytes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_27Create_hindexed_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_blocklength;
  PyObject *__pyx_v_displacements = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_hindexed_block (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_blocklength,&__pyx_n_s_displacements,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklength)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_displacements)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_hindexed_block", 1, 2, 2, 1); __PYX_ERR(21, 202, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_hindexed_block") < 0)) __PYX_ERR(21, 202, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_blocklength = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_blocklength == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 202, __pyx_L3_error)
    __pyx_v_displacements = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_hindexed_block", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 202, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_hindexed_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_26Create_hindexed_block(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_blocklength, __pyx_v_displacements);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_26Create_hindexed_block(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_blocklength, PyObject *__pyx_v_displacements) {
  int __pyx_v_count;
  MPI_Aint *__pyx_v_idisp;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_hindexed_block", 0);
  __Pyx_INCREF(__pyx_v_displacements);

  /* "mpi4py/MPI/Datatype.pyx":208
 *         and displacements in bytes
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = getarray(displacements, &count, &idisp)
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Datatype.pyx":209
 *         """
 *         cdef int count = 0
 *         cdef MPI_Aint *idisp = NULL             # <<<<<<<<<<<<<<
 *         displacements = getarray(displacements, &count, &idisp)
 *         #
 */
  __pyx_v_idisp = NULL;

  /* "mpi4py/MPI/Datatype.pyx":210
 *         cdef int count = 0
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = getarray(displacements, &count, &idisp)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_displacements, (&__pyx_v_count), (&__pyx_v_idisp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_displacements, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":212
 *         displacements = getarray(displacements, &count, &idisp)
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_hindexed_block(count, blocklength,
 *                                                idisp, self.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 212, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":213
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_hindexed_block(count, blocklength,             # <<<<<<<<<<<<<<
 *                                                idisp, self.ob_mpi,
 *                                                &datatype.ob_mpi) )
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_hindexed_block(__pyx_v_count, __pyx_v_blocklength, __pyx_v_idisp, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 213, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":216
 *                                                idisp, self.ob_mpi,
 *                                                &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":202
 *         return datatype
 * 
 *     def Create_hindexed_block(self, int blocklength, displacements):             # <<<<<<<<<<<<<<
 *         """
 *         Create an indexed datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_hindexed_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_displacements);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":219
 * 
 *     @classmethod
 *     def Create_struct(cls, blocklengths, displacements, datatypes):             # <<<<<<<<<<<<<<
 *         """
 *         Create an datatype from a general set of
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_29Create_struct(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_28Create_struct[] = "Datatype.Create_struct(type cls, blocklengths, displacements, datatypes)\n\n        Create an datatype from a general set of\n        block sizes, displacements and datatypes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_29Create_struct(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_blocklengths = 0;
  PyObject *__pyx_v_displacements = 0;
  PyObject *__pyx_v_datatypes = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_struct (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_blocklengths,&__pyx_n_s_displacements,&__pyx_n_s_datatypes,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocklengths)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_displacements)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_struct", 1, 3, 3, 1); __PYX_ERR(21, 219, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatypes)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_struct", 1, 3, 3, 2); __PYX_ERR(21, 219, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_struct") < 0)) __PYX_ERR(21, 219, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_blocklengths = values[0];
    __pyx_v_displacements = values[1];
    __pyx_v_datatypes = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_struct", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 219, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_struct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_28Create_struct(((PyTypeObject*)__pyx_v_cls), __pyx_v_blocklengths, __pyx_v_displacements, __pyx_v_datatypes);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_28Create_struct(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_blocklengths, PyObject *__pyx_v_displacements, PyObject *__pyx_v_datatypes) {
  int __pyx_v_count;
  int *__pyx_v_iblen;
  MPI_Aint *__pyx_v_idisp;
  MPI_Datatype *__pyx_v_ptype;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_struct", 0);
  __Pyx_INCREF(__pyx_v_blocklengths);
  __Pyx_INCREF(__pyx_v_displacements);
  __Pyx_INCREF(__pyx_v_datatypes);

  /* "mpi4py/MPI/Datatype.pyx":224
 *         block sizes, displacements and datatypes
 *         """
 *         cdef int count = 0, *iblen = NULL             # <<<<<<<<<<<<<<
 *         blocklengths = getarray(blocklengths, &count, &iblen)
 *         cdef MPI_Aint *idisp = NULL
 */
  __pyx_v_count = 0;
  __pyx_v_iblen = NULL;

  /* "mpi4py/MPI/Datatype.pyx":225
 *         """
 *         cdef int count = 0, *iblen = NULL
 *         blocklengths = getarray(blocklengths, &count, &iblen)             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = chkarray(displacements, count, &idisp)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_blocklengths, (&__pyx_v_count), (&__pyx_v_iblen)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_blocklengths, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":226
 *         cdef int count = 0, *iblen = NULL
 *         blocklengths = getarray(blocklengths, &count, &iblen)
 *         cdef MPI_Aint *idisp = NULL             # <<<<<<<<<<<<<<
 *         displacements = chkarray(displacements, count, &idisp)
 *         cdef MPI_Datatype *ptype = NULL
 */
  __pyx_v_idisp = NULL;

  /* "mpi4py/MPI/Datatype.pyx":227
 *         blocklengths = getarray(blocklengths, &count, &iblen)
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = chkarray(displacements, count, &idisp)             # <<<<<<<<<<<<<<
 *         cdef MPI_Datatype *ptype = NULL
 *         datatypes = asarray_Datatype(datatypes, count, &ptype)
 */
  __pyx_t_1 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_displacements, __pyx_v_count, (&__pyx_v_idisp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_displacements, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":228
 *         cdef MPI_Aint *idisp = NULL
 *         displacements = chkarray(displacements, count, &idisp)
 *         cdef MPI_Datatype *ptype = NULL             # <<<<<<<<<<<<<<
 *         datatypes = asarray_Datatype(datatypes, count, &ptype)
 *         #
 */
  __pyx_v_ptype = NULL;

  /* "mpi4py/MPI/Datatype.pyx":229
 *         displacements = chkarray(displacements, count, &idisp)
 *         cdef MPI_Datatype *ptype = NULL
 *         datatypes = asarray_Datatype(datatypes, count, &ptype)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asarray_Datatype(__pyx_v_datatypes, __pyx_v_count, (&__pyx_v_ptype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_datatypes, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":231
 *         datatypes = asarray_Datatype(datatypes, count, &ptype)
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_struct(count, iblen, idisp, ptype,
 *                                        &datatype.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 231, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":232
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_struct(count, iblen, idisp, ptype,             # <<<<<<<<<<<<<<
 *                                        &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_struct(__pyx_v_count, __pyx_v_iblen, __pyx_v_idisp, __pyx_v_ptype, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 232, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":234
 *         CHKERR( MPI_Type_create_struct(count, iblen, idisp, ptype,
 *                                        &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     # Subarray Datatype Constructor
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":219
 * 
 *     @classmethod
 *     def Create_struct(cls, blocklengths, displacements, datatypes):             # <<<<<<<<<<<<<<
 *         """
 *         Create an datatype from a general set of
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_struct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_blocklengths);
  __Pyx_XDECREF(__pyx_v_displacements);
  __Pyx_XDECREF(__pyx_v_datatypes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":239
 *     # -----------------------------
 * 
 *     def Create_subarray(self, sizes, subsizes, starts,             # <<<<<<<<<<<<<<
 *                         int order=ORDER_C):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_31Create_subarray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_30Create_subarray[] = "Datatype.Create_subarray(self, sizes, subsizes, starts, int order=ORDER_C)\n\n        Create a datatype for a subarray of\n        a regular, multidimensional array\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_31Create_subarray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sizes = 0;
  PyObject *__pyx_v_subsizes = 0;
  PyObject *__pyx_v_starts = 0;
  int __pyx_v_order;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_subarray (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sizes,&__pyx_n_s_subsizes,&__pyx_n_s_starts,&__pyx_n_s_order,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sizes)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_subsizes)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_subarray", 0, 3, 4, 1); __PYX_ERR(21, 239, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_starts)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_subarray", 0, 3, 4, 2); __PYX_ERR(21, 239, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_order);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_subarray") < 0)) __PYX_ERR(21, 239, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sizes = values[0];
    __pyx_v_subsizes = values[1];
    __pyx_v_starts = values[2];
    if (values[3]) {
      __pyx_v_order = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_order == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 240, __pyx_L3_error)
    } else {
      __pyx_v_order = __pyx_k__26;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_subarray", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 239, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_subarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_30Create_subarray(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_sizes, __pyx_v_subsizes, __pyx_v_starts, __pyx_v_order);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_30Create_subarray(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_sizes, PyObject *__pyx_v_subsizes, PyObject *__pyx_v_starts, int __pyx_v_order) {
  int __pyx_v_ndims;
  int *__pyx_v_isizes;
  int *__pyx_v_isubsizes;
  int *__pyx_v_istarts;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_subarray", 0);
  __Pyx_INCREF(__pyx_v_sizes);
  __Pyx_INCREF(__pyx_v_subsizes);
  __Pyx_INCREF(__pyx_v_starts);

  /* "mpi4py/MPI/Datatype.pyx":245
 *         a regular, multidimensional array
 *         """
 *         cdef int ndims = 0, *isizes = NULL             # <<<<<<<<<<<<<<
 *         cdef int *isubsizes = NULL, *istarts = NULL
 *         sizes    = getarray(sizes,   &ndims, &isizes   )
 */
  __pyx_v_ndims = 0;
  __pyx_v_isizes = NULL;

  /* "mpi4py/MPI/Datatype.pyx":246
 *         """
 *         cdef int ndims = 0, *isizes = NULL
 *         cdef int *isubsizes = NULL, *istarts = NULL             # <<<<<<<<<<<<<<
 *         sizes    = getarray(sizes,   &ndims, &isizes   )
 *         subsizes = chkarray(subsizes, ndims, &isubsizes)
 */
  __pyx_v_isubsizes = NULL;
  __pyx_v_istarts = NULL;

  /* "mpi4py/MPI/Datatype.pyx":247
 *         cdef int ndims = 0, *isizes = NULL
 *         cdef int *isubsizes = NULL, *istarts = NULL
 *         sizes    = getarray(sizes,   &ndims, &isizes   )             # <<<<<<<<<<<<<<
 *         subsizes = chkarray(subsizes, ndims, &isubsizes)
 *         starts   = chkarray(starts,   ndims, &istarts  )
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_sizes, (&__pyx_v_ndims), (&__pyx_v_isizes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_sizes, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":248
 *         cdef int *isubsizes = NULL, *istarts = NULL
 *         sizes    = getarray(sizes,   &ndims, &isizes   )
 *         subsizes = chkarray(subsizes, ndims, &isubsizes)             # <<<<<<<<<<<<<<
 *         starts   = chkarray(starts,   ndims, &istarts  )
 *         #
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_subsizes, __pyx_v_ndims, (&__pyx_v_isubsizes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_subsizes, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":249
 *         sizes    = getarray(sizes,   &ndims, &isizes   )
 *         subsizes = chkarray(subsizes, ndims, &isubsizes)
 *         starts   = chkarray(starts,   ndims, &istarts  )             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_starts, __pyx_v_ndims, (&__pyx_v_istarts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_starts, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":251
 *         starts   = chkarray(starts,   ndims, &istarts  )
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_subarray(ndims, isizes,
 *                                          isubsizes, istarts,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 251, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":252
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_subarray(ndims, isizes,             # <<<<<<<<<<<<<<
 *                                          isubsizes, istarts,
 *                                          order, self.ob_mpi,
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_subarray(__pyx_v_ndims, __pyx_v_isizes, __pyx_v_isubsizes, __pyx_v_istarts, __pyx_v_order, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 252, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":256
 *                                          order, self.ob_mpi,
 *                                          &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     # Distributed Array Datatype Constructor
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":239
 *     # -----------------------------
 * 
 *     def Create_subarray(self, sizes, subsizes, starts,             # <<<<<<<<<<<<<<
 *                         int order=ORDER_C):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_subarray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_sizes);
  __Pyx_XDECREF(__pyx_v_subsizes);
  __Pyx_XDECREF(__pyx_v_starts);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":261
 *     # --------------------------------------
 * 
 *     def Create_darray(self, int size, int rank,             # <<<<<<<<<<<<<<
 *                       gsizes, distribs, dargs, psizes,
 *                       int order=ORDER_C):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_33Create_darray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_32Create_darray[] = "Datatype.Create_darray(self, int size, int rank, gsizes, distribs, dargs, psizes, int order=ORDER_C)\n\n        Create a datatype representing an HPF-like\n        distributed array on Cartesian process grids\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_33Create_darray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_size;
  int __pyx_v_rank;
  PyObject *__pyx_v_gsizes = 0;
  PyObject *__pyx_v_distribs = 0;
  PyObject *__pyx_v_dargs = 0;
  PyObject *__pyx_v_psizes = 0;
  int __pyx_v_order;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_darray (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_rank,&__pyx_n_s_gsizes,&__pyx_n_s_distribs,&__pyx_n_s_dargs,&__pyx_n_s_psizes,&__pyx_n_s_order,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_darray", 0, 6, 7, 1); __PYX_ERR(21, 261, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_gsizes)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_darray", 0, 6, 7, 2); __PYX_ERR(21, 261, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_distribs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_darray", 0, 6, 7, 3); __PYX_ERR(21, 261, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dargs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_darray", 0, 6, 7, 4); __PYX_ERR(21, 261, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_psizes)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_darray", 0, 6, 7, 5); __PYX_ERR(21, 261, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_order);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_darray") < 0)) __PYX_ERR(21, 261, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 261, __pyx_L3_error)
    __pyx_v_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 261, __pyx_L3_error)
    __pyx_v_gsizes = values[2];
    __pyx_v_distribs = values[3];
    __pyx_v_dargs = values[4];
    __pyx_v_psizes = values[5];
    if (values[6]) {
      __pyx_v_order = __Pyx_PyInt_As_int(values[6]); if (unlikely((__pyx_v_order == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 263, __pyx_L3_error)
    } else {
      __pyx_v_order = __pyx_k__27;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_darray", 0, 6, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 261, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_darray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_32Create_darray(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_size, __pyx_v_rank, __pyx_v_gsizes, __pyx_v_distribs, __pyx_v_dargs, __pyx_v_psizes, __pyx_v_order);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_32Create_darray(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_size, int __pyx_v_rank, PyObject *__pyx_v_gsizes, PyObject *__pyx_v_distribs, PyObject *__pyx_v_dargs, PyObject *__pyx_v_psizes, int __pyx_v_order) {
  int __pyx_v_ndims;
  int *__pyx_v_igsizes;
  int *__pyx_v_idistribs;
  int *__pyx_v_idargs;
  int *__pyx_v_ipsizes;
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_darray", 0);
  __Pyx_INCREF(__pyx_v_gsizes);
  __Pyx_INCREF(__pyx_v_distribs);
  __Pyx_INCREF(__pyx_v_dargs);
  __Pyx_INCREF(__pyx_v_psizes);

  /* "mpi4py/MPI/Datatype.pyx":268
 *         distributed array on Cartesian process grids
 *         """
 *         cdef int ndims = 0, *igsizes = NULL             # <<<<<<<<<<<<<<
 *         cdef int *idistribs = NULL, *idargs = NULL, *ipsizes = NULL
 *         gsizes   = getarray(gsizes,  &ndims, &igsizes   )
 */
  __pyx_v_ndims = 0;
  __pyx_v_igsizes = NULL;

  /* "mpi4py/MPI/Datatype.pyx":269
 *         """
 *         cdef int ndims = 0, *igsizes = NULL
 *         cdef int *idistribs = NULL, *idargs = NULL, *ipsizes = NULL             # <<<<<<<<<<<<<<
 *         gsizes   = getarray(gsizes,  &ndims, &igsizes   )
 *         distribs = chkarray(distribs, ndims, &idistribs )
 */
  __pyx_v_idistribs = NULL;
  __pyx_v_idargs = NULL;
  __pyx_v_ipsizes = NULL;

  /* "mpi4py/MPI/Datatype.pyx":270
 *         cdef int ndims = 0, *igsizes = NULL
 *         cdef int *idistribs = NULL, *idargs = NULL, *ipsizes = NULL
 *         gsizes   = getarray(gsizes,  &ndims, &igsizes   )             # <<<<<<<<<<<<<<
 *         distribs = chkarray(distribs, ndims, &idistribs )
 *         dargs    = chkarray(dargs,    ndims, &idargs    )
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_gsizes, (&__pyx_v_ndims), (&__pyx_v_igsizes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_gsizes, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":271
 *         cdef int *idistribs = NULL, *idargs = NULL, *ipsizes = NULL
 *         gsizes   = getarray(gsizes,  &ndims, &igsizes   )
 *         distribs = chkarray(distribs, ndims, &idistribs )             # <<<<<<<<<<<<<<
 *         dargs    = chkarray(dargs,    ndims, &idargs    )
 *         psizes   = chkarray(psizes,   ndims, &ipsizes   )
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_distribs, __pyx_v_ndims, (&__pyx_v_idistribs)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_distribs, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":272
 *         gsizes   = getarray(gsizes,  &ndims, &igsizes   )
 *         distribs = chkarray(distribs, ndims, &idistribs )
 *         dargs    = chkarray(dargs,    ndims, &idargs    )             # <<<<<<<<<<<<<<
 *         psizes   = chkarray(psizes,   ndims, &ipsizes   )
 *         #
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_dargs, __pyx_v_ndims, (&__pyx_v_idargs)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_dargs, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":273
 *         distribs = chkarray(distribs, ndims, &idistribs )
 *         dargs    = chkarray(dargs,    ndims, &idargs    )
 *         psizes   = chkarray(psizes,   ndims, &ipsizes   )             # <<<<<<<<<<<<<<
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_psizes, __pyx_v_ndims, (&__pyx_v_ipsizes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_psizes, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":275
 *         psizes   = chkarray(psizes,   ndims, &ipsizes   )
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_darray(size, rank, ndims, igsizes,
 *                                        idistribs, idargs, ipsizes,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 275, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":276
 *         #
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_darray(size, rank, ndims, igsizes,             # <<<<<<<<<<<<<<
 *                                        idistribs, idargs, ipsizes,
 *                                        order, self.ob_mpi,
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_darray(__pyx_v_size, __pyx_v_rank, __pyx_v_ndims, __pyx_v_igsizes, __pyx_v_idistribs, __pyx_v_idargs, __pyx_v_ipsizes, __pyx_v_order, __pyx_v_self->ob_mpi, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 276, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":280
 *                                        order, self.ob_mpi,
 *                                        &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     # Parametrized and size-specific Fortran Datatypes
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":261
 *     # --------------------------------------
 * 
 *     def Create_darray(self, int size, int rank,             # <<<<<<<<<<<<<<
 *                       gsizes, distribs, dargs, psizes,
 *                       int order=ORDER_C):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_darray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XDECREF(__pyx_v_gsizes);
  __Pyx_XDECREF(__pyx_v_distribs);
  __Pyx_XDECREF(__pyx_v_dargs);
  __Pyx_XDECREF(__pyx_v_psizes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":286
 * 
 *     @classmethod
 *     def Create_f90_integer(cls, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded integer datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_35Create_f90_integer(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_34Create_f90_integer[] = "Datatype.Create_f90_integer(type cls, int r)\n\n        Return a bounded integer datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_35Create_f90_integer(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_r;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_f90_integer (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_r,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_f90_integer") < 0)) __PYX_ERR(21, 286, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_r = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_r == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 286, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_f90_integer", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 286, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_f90_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_34Create_f90_integer(((PyTypeObject*)__pyx_v_cls), __pyx_v_r);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_34Create_f90_integer(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_r) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_f90_integer", 0);

  /* "mpi4py/MPI/Datatype.pyx":290
 *         Return a bounded integer datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_f90_integer(r, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 290, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":291
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_f90_integer(r, &datatype.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return datatype
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_f90_integer(__pyx_v_r, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 291, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":292
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_f90_integer(r, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":286
 * 
 *     @classmethod
 *     def Create_f90_integer(cls, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded integer datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_f90_integer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":295
 * 
 *     @classmethod
 *     def Create_f90_real(cls, int p, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded real datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_37Create_f90_real(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_36Create_f90_real[] = "Datatype.Create_f90_real(type cls, int p, int r)\n\n        Return a bounded real datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_37Create_f90_real(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_p;
  int __pyx_v_r;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_f90_real (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_r,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_f90_real", 1, 2, 2, 1); __PYX_ERR(21, 295, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_f90_real") < 0)) __PYX_ERR(21, 295, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_p = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_p == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 295, __pyx_L3_error)
    __pyx_v_r = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_r == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 295, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_f90_real", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 295, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_f90_real", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_36Create_f90_real(((PyTypeObject*)__pyx_v_cls), __pyx_v_p, __pyx_v_r);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_36Create_f90_real(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_p, int __pyx_v_r) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_f90_real", 0);

  /* "mpi4py/MPI/Datatype.pyx":299
 *         Return a bounded real datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_f90_real(p, r, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 299, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":300
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_f90_real(p, r, &datatype.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return datatype
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_f90_real(__pyx_v_p, __pyx_v_r, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 300, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":301
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_f90_real(p, r, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":295
 * 
 *     @classmethod
 *     def Create_f90_real(cls, int p, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded real datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_f90_real", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":304
 * 
 *     @classmethod
 *     def Create_f90_complex(cls, int p, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded complex datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_39Create_f90_complex(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_38Create_f90_complex[] = "Datatype.Create_f90_complex(type cls, int p, int r)\n\n        Return a bounded complex datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_39Create_f90_complex(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_p;
  int __pyx_v_r;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_f90_complex (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_p,&__pyx_n_s_r,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_f90_complex", 1, 2, 2, 1); __PYX_ERR(21, 304, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_f90_complex") < 0)) __PYX_ERR(21, 304, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_p = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_p == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 304, __pyx_L3_error)
    __pyx_v_r = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_r == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 304, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_f90_complex", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 304, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_f90_complex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_38Create_f90_complex(((PyTypeObject*)__pyx_v_cls), __pyx_v_p, __pyx_v_r);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_38Create_f90_complex(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_p, int __pyx_v_r) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_f90_complex", 0);

  /* "mpi4py/MPI/Datatype.pyx":308
 *         Return a bounded complex datatype
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_f90_complex(p, r, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 308, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":309
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_f90_complex(p, r, &datatype.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return datatype
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_f90_complex(__pyx_v_p, __pyx_v_r, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 309, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":310
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_f90_complex(p, r, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":304
 * 
 *     @classmethod
 *     def Create_f90_complex(cls, int p, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded complex datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_f90_complex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":313
 * 
 *     @classmethod
 *     def Match_size(cls, int typeclass, int size):             # <<<<<<<<<<<<<<
 *         """
 *         Find a datatype matching a specified size in bytes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_41Match_size(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_40Match_size[] = "Datatype.Match_size(type cls, int typeclass, int size)\n\n        Find a datatype matching a specified size in bytes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_41Match_size(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_typeclass;
  int __pyx_v_size;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Match_size (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_typeclass,&__pyx_n_s_size,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_typeclass)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Match_size", 1, 2, 2, 1); __PYX_ERR(21, 313, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Match_size") < 0)) __PYX_ERR(21, 313, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_typeclass = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_typeclass == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 313, __pyx_L3_error)
    __pyx_v_size = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 313, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Match_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 313, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Match_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_40Match_size(((PyTypeObject*)__pyx_v_cls), __pyx_v_typeclass, __pyx_v_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_40Match_size(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_typeclass, int __pyx_v_size) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Match_size", 0);

  /* "mpi4py/MPI/Datatype.pyx":317
 *         Find a datatype matching a specified size in bytes
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_match_size(typeclass, size, &datatype.ob_mpi) )
 *         return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 317, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":318
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_match_size(typeclass, size, &datatype.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return datatype
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_match_size(__pyx_v_typeclass, __pyx_v_size, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 318, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":319
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_match_size(typeclass, size, &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     # Use of Derived Datatypes
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":313
 * 
 *     @classmethod
 *     def Match_size(cls, int typeclass, int size):             # <<<<<<<<<<<<<<
 *         """
 *         Find a datatype matching a specified size in bytes
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Match_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":324
 *     # ------------------------
 * 
 *     def Commit(self):             # <<<<<<<<<<<<<<
 *         """
 *         Commit the datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_43Commit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_42Commit[] = "Datatype.Commit(self)\n\n        Commit the datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_43Commit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Commit (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Commit", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Commit", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_42Commit(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_42Commit(struct PyMPIDatatypeObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Commit", 0);

  /* "mpi4py/MPI/Datatype.pyx":328
 *         Commit the datatype
 *         """
 *         CHKERR( MPI_Type_commit(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_commit((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 328, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":329
 *         """
 *         CHKERR( MPI_Type_commit(&self.ob_mpi) )
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def Free(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":324
 *     # ------------------------
 * 
 *     def Commit(self):             # <<<<<<<<<<<<<<
 *         """
 *         Commit the datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Commit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":331
 *         return self
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free the datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_45Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_44Free[] = "Datatype.Free(self)\n\n        Free the datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_45Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_44Free(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_44Free(struct PyMPIDatatypeObject *__pyx_v_self) {
  struct PyMPIDatatypeObject *__pyx_v_t = 0;
  MPI_Datatype __pyx_v_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Datatype.pyx":335
 *         Free the datatype
 *         """
 *         CHKERR( MPI_Type_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         cdef Datatype t = self
 *         cdef MPI_Datatype p = MPI_DATATYPE_NULL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 335, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":336
 *         """
 *         CHKERR( MPI_Type_free(&self.ob_mpi) )
 *         cdef Datatype t = self             # <<<<<<<<<<<<<<
 *         cdef MPI_Datatype p = MPI_DATATYPE_NULL
 *         if   t is __UB__                     : p = MPI_UB
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_v_t = __pyx_v_self;

  /* "mpi4py/MPI/Datatype.pyx":337
 *         CHKERR( MPI_Type_free(&self.ob_mpi) )
 *         cdef Datatype t = self
 *         cdef MPI_Datatype p = MPI_DATATYPE_NULL             # <<<<<<<<<<<<<<
 *         if   t is __UB__                     : p = MPI_UB
 *         elif t is __LB__                     : p = MPI_LB
 */
  __pyx_v_p = MPI_DATATYPE_NULL;

  /* "mpi4py/MPI/Datatype.pyx":338
 *         cdef Datatype t = self
 *         cdef MPI_Datatype p = MPI_DATATYPE_NULL
 *         if   t is __UB__                     : p = MPI_UB             # <<<<<<<<<<<<<<
 *         elif t is __LB__                     : p = MPI_LB
 *         elif t is __PACKED__                 : p = MPI_PACKED
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UB__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_UB;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":339
 *         cdef MPI_Datatype p = MPI_DATATYPE_NULL
 *         if   t is __UB__                     : p = MPI_UB
 *         elif t is __LB__                     : p = MPI_LB             # <<<<<<<<<<<<<<
 *         elif t is __PACKED__                 : p = MPI_PACKED
 *         elif t is __BYTE__                   : p = MPI_BYTE
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LB__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_LB;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":340
 *         if   t is __UB__                     : p = MPI_UB
 *         elif t is __LB__                     : p = MPI_LB
 *         elif t is __PACKED__                 : p = MPI_PACKED             # <<<<<<<<<<<<<<
 *         elif t is __BYTE__                   : p = MPI_BYTE
 *         elif t is __AINT__                   : p = MPI_AINT
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___PACKED__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_PACKED;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":341
 *         elif t is __LB__                     : p = MPI_LB
 *         elif t is __PACKED__                 : p = MPI_PACKED
 *         elif t is __BYTE__                   : p = MPI_BYTE             # <<<<<<<<<<<<<<
 *         elif t is __AINT__                   : p = MPI_AINT
 *         elif t is __OFFSET__                 : p = MPI_OFFSET
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___BYTE__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_BYTE;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":342
 *         elif t is __PACKED__                 : p = MPI_PACKED
 *         elif t is __BYTE__                   : p = MPI_BYTE
 *         elif t is __AINT__                   : p = MPI_AINT             # <<<<<<<<<<<<<<
 *         elif t is __OFFSET__                 : p = MPI_OFFSET
 *         elif t is __COUNT__                  : p = MPI_COUNT
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___AINT__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_AINT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":343
 *         elif t is __BYTE__                   : p = MPI_BYTE
 *         elif t is __AINT__                   : p = MPI_AINT
 *         elif t is __OFFSET__                 : p = MPI_OFFSET             # <<<<<<<<<<<<<<
 *         elif t is __COUNT__                  : p = MPI_COUNT
 *         elif t is __CHAR__                   : p = MPI_CHAR
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___OFFSET__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_OFFSET;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":344
 *         elif t is __AINT__                   : p = MPI_AINT
 *         elif t is __OFFSET__                 : p = MPI_OFFSET
 *         elif t is __COUNT__                  : p = MPI_COUNT             # <<<<<<<<<<<<<<
 *         elif t is __CHAR__                   : p = MPI_CHAR
 *         elif t is __WCHAR__                  : p = MPI_WCHAR
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___COUNT__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_COUNT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":345
 *         elif t is __OFFSET__                 : p = MPI_OFFSET
 *         elif t is __COUNT__                  : p = MPI_COUNT
 *         elif t is __CHAR__                   : p = MPI_CHAR             # <<<<<<<<<<<<<<
 *         elif t is __WCHAR__                  : p = MPI_WCHAR
 *         elif t is __SIGNED_CHAR__            : p = MPI_SIGNED_CHAR
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___CHAR__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_CHAR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":346
 *         elif t is __COUNT__                  : p = MPI_COUNT
 *         elif t is __CHAR__                   : p = MPI_CHAR
 *         elif t is __WCHAR__                  : p = MPI_WCHAR             # <<<<<<<<<<<<<<
 *         elif t is __SIGNED_CHAR__            : p = MPI_SIGNED_CHAR
 *         elif t is __SHORT__                  : p = MPI_SHORT
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___WCHAR__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_WCHAR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":347
 *         elif t is __CHAR__                   : p = MPI_CHAR
 *         elif t is __WCHAR__                  : p = MPI_WCHAR
 *         elif t is __SIGNED_CHAR__            : p = MPI_SIGNED_CHAR             # <<<<<<<<<<<<<<
 *         elif t is __SHORT__                  : p = MPI_SHORT
 *         elif t is __INT__                    : p = MPI_INT
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___SIGNED_CHAR__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_SIGNED_CHAR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":348
 *         elif t is __WCHAR__                  : p = MPI_WCHAR
 *         elif t is __SIGNED_CHAR__            : p = MPI_SIGNED_CHAR
 *         elif t is __SHORT__                  : p = MPI_SHORT             # <<<<<<<<<<<<<<
 *         elif t is __INT__                    : p = MPI_INT
 *         elif t is __LONG__                   : p = MPI_LONG
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___SHORT__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_SHORT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":349
 *         elif t is __SIGNED_CHAR__            : p = MPI_SIGNED_CHAR
 *         elif t is __SHORT__                  : p = MPI_SHORT
 *         elif t is __INT__                    : p = MPI_INT             # <<<<<<<<<<<<<<
 *         elif t is __LONG__                   : p = MPI_LONG
 *         elif t is __LONG_LONG__              : p = MPI_LONG_LONG
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INT__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":350
 *         elif t is __SHORT__                  : p = MPI_SHORT
 *         elif t is __INT__                    : p = MPI_INT
 *         elif t is __LONG__                   : p = MPI_LONG             # <<<<<<<<<<<<<<
 *         elif t is __LONG_LONG__              : p = MPI_LONG_LONG
 *         elif t is __UNSIGNED_CHAR__          : p = MPI_UNSIGNED_CHAR
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LONG__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_LONG;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":351
 *         elif t is __INT__                    : p = MPI_INT
 *         elif t is __LONG__                   : p = MPI_LONG
 *         elif t is __LONG_LONG__              : p = MPI_LONG_LONG             # <<<<<<<<<<<<<<
 *         elif t is __UNSIGNED_CHAR__          : p = MPI_UNSIGNED_CHAR
 *         elif t is __UNSIGNED_SHORT__         : p = MPI_UNSIGNED_SHORT
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LONG_LONG__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_LONG_LONG;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":352
 *         elif t is __LONG__                   : p = MPI_LONG
 *         elif t is __LONG_LONG__              : p = MPI_LONG_LONG
 *         elif t is __UNSIGNED_CHAR__          : p = MPI_UNSIGNED_CHAR             # <<<<<<<<<<<<<<
 *         elif t is __UNSIGNED_SHORT__         : p = MPI_UNSIGNED_SHORT
 *         elif t is __UNSIGNED__               : p = MPI_UNSIGNED
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_UNSIGNED_CHAR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":353
 *         elif t is __LONG_LONG__              : p = MPI_LONG_LONG
 *         elif t is __UNSIGNED_CHAR__          : p = MPI_UNSIGNED_CHAR
 *         elif t is __UNSIGNED_SHORT__         : p = MPI_UNSIGNED_SHORT             # <<<<<<<<<<<<<<
 *         elif t is __UNSIGNED__               : p = MPI_UNSIGNED
 *         elif t is __UNSIGNED_LONG__          : p = MPI_UNSIGNED_LONG
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_UNSIGNED_SHORT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":354
 *         elif t is __UNSIGNED_CHAR__          : p = MPI_UNSIGNED_CHAR
 *         elif t is __UNSIGNED_SHORT__         : p = MPI_UNSIGNED_SHORT
 *         elif t is __UNSIGNED__               : p = MPI_UNSIGNED             # <<<<<<<<<<<<<<
 *         elif t is __UNSIGNED_LONG__          : p = MPI_UNSIGNED_LONG
 *         elif t is __UNSIGNED_LONG_LONG__     : p = MPI_UNSIGNED_LONG_LONG
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UNSIGNED__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_UNSIGNED;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":355
 *         elif t is __UNSIGNED_SHORT__         : p = MPI_UNSIGNED_SHORT
 *         elif t is __UNSIGNED__               : p = MPI_UNSIGNED
 *         elif t is __UNSIGNED_LONG__          : p = MPI_UNSIGNED_LONG             # <<<<<<<<<<<<<<
 *         elif t is __UNSIGNED_LONG_LONG__     : p = MPI_UNSIGNED_LONG_LONG
 *         elif t is __FLOAT__                  : p = MPI_FLOAT
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_UNSIGNED_LONG;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":356
 *         elif t is __UNSIGNED__               : p = MPI_UNSIGNED
 *         elif t is __UNSIGNED_LONG__          : p = MPI_UNSIGNED_LONG
 *         elif t is __UNSIGNED_LONG_LONG__     : p = MPI_UNSIGNED_LONG_LONG             # <<<<<<<<<<<<<<
 *         elif t is __FLOAT__                  : p = MPI_FLOAT
 *         elif t is __DOUBLE__                 : p = MPI_DOUBLE
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_UNSIGNED_LONG_LONG;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":357
 *         elif t is __UNSIGNED_LONG__          : p = MPI_UNSIGNED_LONG
 *         elif t is __UNSIGNED_LONG_LONG__     : p = MPI_UNSIGNED_LONG_LONG
 *         elif t is __FLOAT__                  : p = MPI_FLOAT             # <<<<<<<<<<<<<<
 *         elif t is __DOUBLE__                 : p = MPI_DOUBLE
 *         elif t is __LONG_DOUBLE__            : p = MPI_LONG_DOUBLE
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___FLOAT__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_FLOAT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":358
 *         elif t is __UNSIGNED_LONG_LONG__     : p = MPI_UNSIGNED_LONG_LONG
 *         elif t is __FLOAT__                  : p = MPI_FLOAT
 *         elif t is __DOUBLE__                 : p = MPI_DOUBLE             # <<<<<<<<<<<<<<
 *         elif t is __LONG_DOUBLE__            : p = MPI_LONG_DOUBLE
 *         elif t is __C_BOOL__                 : p = MPI_C_BOOL
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___DOUBLE__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_DOUBLE;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":359
 *         elif t is __FLOAT__                  : p = MPI_FLOAT
 *         elif t is __DOUBLE__                 : p = MPI_DOUBLE
 *         elif t is __LONG_DOUBLE__            : p = MPI_LONG_DOUBLE             # <<<<<<<<<<<<<<
 *         elif t is __C_BOOL__                 : p = MPI_C_BOOL
 *         elif t is __INT8_T__                 : p = MPI_INT8_T
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LONG_DOUBLE__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_LONG_DOUBLE;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":360
 *         elif t is __DOUBLE__                 : p = MPI_DOUBLE
 *         elif t is __LONG_DOUBLE__            : p = MPI_LONG_DOUBLE
 *         elif t is __C_BOOL__                 : p = MPI_C_BOOL             # <<<<<<<<<<<<<<
 *         elif t is __INT8_T__                 : p = MPI_INT8_T
 *         elif t is __INT16_T__                : p = MPI_INT16_T
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___C_BOOL__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_C_BOOL;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":361
 *         elif t is __LONG_DOUBLE__            : p = MPI_LONG_DOUBLE
 *         elif t is __C_BOOL__                 : p = MPI_C_BOOL
 *         elif t is __INT8_T__                 : p = MPI_INT8_T             # <<<<<<<<<<<<<<
 *         elif t is __INT16_T__                : p = MPI_INT16_T
 *         elif t is __INT32_T__                : p = MPI_INT32_T
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INT8_T__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_INT8_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":362
 *         elif t is __C_BOOL__                 : p = MPI_C_BOOL
 *         elif t is __INT8_T__                 : p = MPI_INT8_T
 *         elif t is __INT16_T__                : p = MPI_INT16_T             # <<<<<<<<<<<<<<
 *         elif t is __INT32_T__                : p = MPI_INT32_T
 *         elif t is __INT64_T__                : p = MPI_INT64_T
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INT16_T__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_INT16_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":363
 *         elif t is __INT8_T__                 : p = MPI_INT8_T
 *         elif t is __INT16_T__                : p = MPI_INT16_T
 *         elif t is __INT32_T__                : p = MPI_INT32_T             # <<<<<<<<<<<<<<
 *         elif t is __INT64_T__                : p = MPI_INT64_T
 *         elif t is __UINT8_T__                : p = MPI_UINT8_T
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INT32_T__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_INT32_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":364
 *         elif t is __INT16_T__                : p = MPI_INT16_T
 *         elif t is __INT32_T__                : p = MPI_INT32_T
 *         elif t is __INT64_T__                : p = MPI_INT64_T             # <<<<<<<<<<<<<<
 *         elif t is __UINT8_T__                : p = MPI_UINT8_T
 *         elif t is __UINT16_T__               : p = MPI_UINT16_T
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INT64_T__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_INT64_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":365
 *         elif t is __INT32_T__                : p = MPI_INT32_T
 *         elif t is __INT64_T__                : p = MPI_INT64_T
 *         elif t is __UINT8_T__                : p = MPI_UINT8_T             # <<<<<<<<<<<<<<
 *         elif t is __UINT16_T__               : p = MPI_UINT16_T
 *         elif t is __UINT32_T__               : p = MPI_UINT32_T
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UINT8_T__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_UINT8_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":366
 *         elif t is __INT64_T__                : p = MPI_INT64_T
 *         elif t is __UINT8_T__                : p = MPI_UINT8_T
 *         elif t is __UINT16_T__               : p = MPI_UINT16_T             # <<<<<<<<<<<<<<
 *         elif t is __UINT32_T__               : p = MPI_UINT32_T
 *         elif t is __UINT64_T__               : p = MPI_UINT64_T
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UINT16_T__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_UINT16_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":367
 *         elif t is __UINT8_T__                : p = MPI_UINT8_T
 *         elif t is __UINT16_T__               : p = MPI_UINT16_T
 *         elif t is __UINT32_T__               : p = MPI_UINT32_T             # <<<<<<<<<<<<<<
 *         elif t is __UINT64_T__               : p = MPI_UINT64_T
 *         elif t is __C_COMPLEX__              : p = MPI_C_COMPLEX
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UINT32_T__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_UINT32_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":368
 *         elif t is __UINT16_T__               : p = MPI_UINT16_T
 *         elif t is __UINT32_T__               : p = MPI_UINT32_T
 *         elif t is __UINT64_T__               : p = MPI_UINT64_T             # <<<<<<<<<<<<<<
 *         elif t is __C_COMPLEX__              : p = MPI_C_COMPLEX
 *         elif t is __C_FLOAT_COMPLEX__        : p = MPI_C_FLOAT_COMPLEX
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___UINT64_T__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_UINT64_T;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":369
 *         elif t is __UINT32_T__               : p = MPI_UINT32_T
 *         elif t is __UINT64_T__               : p = MPI_UINT64_T
 *         elif t is __C_COMPLEX__              : p = MPI_C_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __C_FLOAT_COMPLEX__        : p = MPI_C_FLOAT_COMPLEX
 *         elif t is __C_DOUBLE_COMPLEX__       : p = MPI_C_DOUBLE_COMPLEX
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___C_COMPLEX__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_C_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":370
 *         elif t is __UINT64_T__               : p = MPI_UINT64_T
 *         elif t is __C_COMPLEX__              : p = MPI_C_COMPLEX
 *         elif t is __C_FLOAT_COMPLEX__        : p = MPI_C_FLOAT_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __C_DOUBLE_COMPLEX__       : p = MPI_C_DOUBLE_COMPLEX
 *         elif t is __C_LONG_DOUBLE_COMPLEX__  : p = MPI_C_LONG_DOUBLE_COMPLEX
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_C_FLOAT_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":371
 *         elif t is __C_COMPLEX__              : p = MPI_C_COMPLEX
 *         elif t is __C_FLOAT_COMPLEX__        : p = MPI_C_FLOAT_COMPLEX
 *         elif t is __C_DOUBLE_COMPLEX__       : p = MPI_C_DOUBLE_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __C_LONG_DOUBLE_COMPLEX__  : p = MPI_C_LONG_DOUBLE_COMPLEX
 *         elif t is __CXX_BOOL__               : p = MPI_CXX_BOOL
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_C_DOUBLE_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":372
 *         elif t is __C_FLOAT_COMPLEX__        : p = MPI_C_FLOAT_COMPLEX
 *         elif t is __C_DOUBLE_COMPLEX__       : p = MPI_C_DOUBLE_COMPLEX
 *         elif t is __C_LONG_DOUBLE_COMPLEX__  : p = MPI_C_LONG_DOUBLE_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __CXX_BOOL__               : p = MPI_CXX_BOOL
 *         elif t is __CXX_FLOAT_COMPLEX__      : p = MPI_CXX_FLOAT_COMPLEX
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_C_LONG_DOUBLE_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":373
 *         elif t is __C_DOUBLE_COMPLEX__       : p = MPI_C_DOUBLE_COMPLEX
 *         elif t is __C_LONG_DOUBLE_COMPLEX__  : p = MPI_C_LONG_DOUBLE_COMPLEX
 *         elif t is __CXX_BOOL__               : p = MPI_CXX_BOOL             # <<<<<<<<<<<<<<
 *         elif t is __CXX_FLOAT_COMPLEX__      : p = MPI_CXX_FLOAT_COMPLEX
 *         elif t is __CXX_DOUBLE_COMPLEX__     : p = MPI_CXX_DOUBLE_COMPLEX
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___CXX_BOOL__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_CXX_BOOL;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":374
 *         elif t is __C_LONG_DOUBLE_COMPLEX__  : p = MPI_C_LONG_DOUBLE_COMPLEX
 *         elif t is __CXX_BOOL__               : p = MPI_CXX_BOOL
 *         elif t is __CXX_FLOAT_COMPLEX__      : p = MPI_CXX_FLOAT_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __CXX_DOUBLE_COMPLEX__     : p = MPI_CXX_DOUBLE_COMPLEX
 *         elif t is __CXX_LONG_DOUBLE_COMPLEX__: p = MPI_CXX_LONG_DOUBLE_COMPLEX
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_CXX_FLOAT_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":375
 *         elif t is __CXX_BOOL__               : p = MPI_CXX_BOOL
 *         elif t is __CXX_FLOAT_COMPLEX__      : p = MPI_CXX_FLOAT_COMPLEX
 *         elif t is __CXX_DOUBLE_COMPLEX__     : p = MPI_CXX_DOUBLE_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __CXX_LONG_DOUBLE_COMPLEX__: p = MPI_CXX_LONG_DOUBLE_COMPLEX
 *         elif t is __SHORT_INT__              : p = MPI_SHORT_INT
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_CXX_DOUBLE_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":376
 *         elif t is __CXX_FLOAT_COMPLEX__      : p = MPI_CXX_FLOAT_COMPLEX
 *         elif t is __CXX_DOUBLE_COMPLEX__     : p = MPI_CXX_DOUBLE_COMPLEX
 *         elif t is __CXX_LONG_DOUBLE_COMPLEX__: p = MPI_CXX_LONG_DOUBLE_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __SHORT_INT__              : p = MPI_SHORT_INT
 *         elif t is __TWOINT__                 : p = MPI_2INT
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_CXX_LONG_DOUBLE_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":377
 *         elif t is __CXX_DOUBLE_COMPLEX__     : p = MPI_CXX_DOUBLE_COMPLEX
 *         elif t is __CXX_LONG_DOUBLE_COMPLEX__: p = MPI_CXX_LONG_DOUBLE_COMPLEX
 *         elif t is __SHORT_INT__              : p = MPI_SHORT_INT             # <<<<<<<<<<<<<<
 *         elif t is __TWOINT__                 : p = MPI_2INT
 *         elif t is __LONG_INT__               : p = MPI_LONG_INT
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___SHORT_INT__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_SHORT_INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":378
 *         elif t is __CXX_LONG_DOUBLE_COMPLEX__: p = MPI_CXX_LONG_DOUBLE_COMPLEX
 *         elif t is __SHORT_INT__              : p = MPI_SHORT_INT
 *         elif t is __TWOINT__                 : p = MPI_2INT             # <<<<<<<<<<<<<<
 *         elif t is __LONG_INT__               : p = MPI_LONG_INT
 *         elif t is __FLOAT_INT__              : p = MPI_FLOAT_INT
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___TWOINT__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_2INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":379
 *         elif t is __SHORT_INT__              : p = MPI_SHORT_INT
 *         elif t is __TWOINT__                 : p = MPI_2INT
 *         elif t is __LONG_INT__               : p = MPI_LONG_INT             # <<<<<<<<<<<<<<
 *         elif t is __FLOAT_INT__              : p = MPI_FLOAT_INT
 *         elif t is __DOUBLE_INT__             : p = MPI_DOUBLE_INT
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LONG_INT__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_LONG_INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":380
 *         elif t is __TWOINT__                 : p = MPI_2INT
 *         elif t is __LONG_INT__               : p = MPI_LONG_INT
 *         elif t is __FLOAT_INT__              : p = MPI_FLOAT_INT             # <<<<<<<<<<<<<<
 *         elif t is __DOUBLE_INT__             : p = MPI_DOUBLE_INT
 *         elif t is __LONG_DOUBLE_INT__        : p = MPI_LONG_DOUBLE_INT
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___FLOAT_INT__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_FLOAT_INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":381
 *         elif t is __LONG_INT__               : p = MPI_LONG_INT
 *         elif t is __FLOAT_INT__              : p = MPI_FLOAT_INT
 *         elif t is __DOUBLE_INT__             : p = MPI_DOUBLE_INT             # <<<<<<<<<<<<<<
 *         elif t is __LONG_DOUBLE_INT__        : p = MPI_LONG_DOUBLE_INT
 *         elif t is __CHARACTER__              : p = MPI_CHARACTER
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___DOUBLE_INT__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_DOUBLE_INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":382
 *         elif t is __FLOAT_INT__              : p = MPI_FLOAT_INT
 *         elif t is __DOUBLE_INT__             : p = MPI_DOUBLE_INT
 *         elif t is __LONG_DOUBLE_INT__        : p = MPI_LONG_DOUBLE_INT             # <<<<<<<<<<<<<<
 *         elif t is __CHARACTER__              : p = MPI_CHARACTER
 *         elif t is __LOGICAL__                : p = MPI_LOGICAL
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_LONG_DOUBLE_INT;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":383
 *         elif t is __DOUBLE_INT__             : p = MPI_DOUBLE_INT
 *         elif t is __LONG_DOUBLE_INT__        : p = MPI_LONG_DOUBLE_INT
 *         elif t is __CHARACTER__              : p = MPI_CHARACTER             # <<<<<<<<<<<<<<
 *         elif t is __LOGICAL__                : p = MPI_LOGICAL
 *         elif t is __INTEGER__                : p = MPI_INTEGER
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___CHARACTER__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_CHARACTER;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":384
 *         elif t is __LONG_DOUBLE_INT__        : p = MPI_LONG_DOUBLE_INT
 *         elif t is __CHARACTER__              : p = MPI_CHARACTER
 *         elif t is __LOGICAL__                : p = MPI_LOGICAL             # <<<<<<<<<<<<<<
 *         elif t is __INTEGER__                : p = MPI_INTEGER
 *         elif t is __REAL__                   : p = MPI_REAL
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LOGICAL__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_LOGICAL;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":385
 *         elif t is __CHARACTER__              : p = MPI_CHARACTER
 *         elif t is __LOGICAL__                : p = MPI_LOGICAL
 *         elif t is __INTEGER__                : p = MPI_INTEGER             # <<<<<<<<<<<<<<
 *         elif t is __REAL__                   : p = MPI_REAL
 *         elif t is __DOUBLE_PRECISION__       : p = MPI_DOUBLE_PRECISION
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INTEGER__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_INTEGER;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":386
 *         elif t is __LOGICAL__                : p = MPI_LOGICAL
 *         elif t is __INTEGER__                : p = MPI_INTEGER
 *         elif t is __REAL__                   : p = MPI_REAL             # <<<<<<<<<<<<<<
 *         elif t is __DOUBLE_PRECISION__       : p = MPI_DOUBLE_PRECISION
 *         elif t is __COMPLEX__                : p = MPI_COMPLEX
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___REAL__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_REAL;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":387
 *         elif t is __INTEGER__                : p = MPI_INTEGER
 *         elif t is __REAL__                   : p = MPI_REAL
 *         elif t is __DOUBLE_PRECISION__       : p = MPI_DOUBLE_PRECISION             # <<<<<<<<<<<<<<
 *         elif t is __COMPLEX__                : p = MPI_COMPLEX
 *         elif t is __DOUBLE_COMPLEX__         : p = MPI_DOUBLE_COMPLEX
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_DOUBLE_PRECISION;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":388
 *         elif t is __REAL__                   : p = MPI_REAL
 *         elif t is __DOUBLE_PRECISION__       : p = MPI_DOUBLE_PRECISION
 *         elif t is __COMPLEX__                : p = MPI_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __DOUBLE_COMPLEX__         : p = MPI_DOUBLE_COMPLEX
 *         elif t is __LOGICAL1__               : p = MPI_LOGICAL1
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___COMPLEX__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":389
 *         elif t is __DOUBLE_PRECISION__       : p = MPI_DOUBLE_PRECISION
 *         elif t is __COMPLEX__                : p = MPI_COMPLEX
 *         elif t is __DOUBLE_COMPLEX__         : p = MPI_DOUBLE_COMPLEX             # <<<<<<<<<<<<<<
 *         elif t is __LOGICAL1__               : p = MPI_LOGICAL1
 *         elif t is __LOGICAL2__               : p = MPI_LOGICAL2
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_DOUBLE_COMPLEX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":390
 *         elif t is __COMPLEX__                : p = MPI_COMPLEX
 *         elif t is __DOUBLE_COMPLEX__         : p = MPI_DOUBLE_COMPLEX
 *         elif t is __LOGICAL1__               : p = MPI_LOGICAL1             # <<<<<<<<<<<<<<
 *         elif t is __LOGICAL2__               : p = MPI_LOGICAL2
 *         elif t is __LOGICAL4__               : p = MPI_LOGICAL4
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LOGICAL1__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_LOGICAL1;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":391
 *         elif t is __DOUBLE_COMPLEX__         : p = MPI_DOUBLE_COMPLEX
 *         elif t is __LOGICAL1__               : p = MPI_LOGICAL1
 *         elif t is __LOGICAL2__               : p = MPI_LOGICAL2             # <<<<<<<<<<<<<<
 *         elif t is __LOGICAL4__               : p = MPI_LOGICAL4
 *         elif t is __LOGICAL8__               : p = MPI_LOGICAL8
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LOGICAL2__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_LOGICAL2;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":392
 *         elif t is __LOGICAL1__               : p = MPI_LOGICAL1
 *         elif t is __LOGICAL2__               : p = MPI_LOGICAL2
 *         elif t is __LOGICAL4__               : p = MPI_LOGICAL4             # <<<<<<<<<<<<<<
 *         elif t is __LOGICAL8__               : p = MPI_LOGICAL8
 *         elif t is __INTEGER1__               : p = MPI_INTEGER1
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LOGICAL4__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_LOGICAL4;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":393
 *         elif t is __LOGICAL2__               : p = MPI_LOGICAL2
 *         elif t is __LOGICAL4__               : p = MPI_LOGICAL4
 *         elif t is __LOGICAL8__               : p = MPI_LOGICAL8             # <<<<<<<<<<<<<<
 *         elif t is __INTEGER1__               : p = MPI_INTEGER1
 *         elif t is __INTEGER2__               : p = MPI_INTEGER2
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___LOGICAL8__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_LOGICAL8;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":394
 *         elif t is __LOGICAL4__               : p = MPI_LOGICAL4
 *         elif t is __LOGICAL8__               : p = MPI_LOGICAL8
 *         elif t is __INTEGER1__               : p = MPI_INTEGER1             # <<<<<<<<<<<<<<
 *         elif t is __INTEGER2__               : p = MPI_INTEGER2
 *         elif t is __INTEGER4__               : p = MPI_INTEGER4
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INTEGER1__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_INTEGER1;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":395
 *         elif t is __LOGICAL8__               : p = MPI_LOGICAL8
 *         elif t is __INTEGER1__               : p = MPI_INTEGER1
 *         elif t is __INTEGER2__               : p = MPI_INTEGER2             # <<<<<<<<<<<<<<
 *         elif t is __INTEGER4__               : p = MPI_INTEGER4
 *         elif t is __INTEGER8__               : p = MPI_INTEGER8
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INTEGER2__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_INTEGER2;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":396
 *         elif t is __INTEGER1__               : p = MPI_INTEGER1
 *         elif t is __INTEGER2__               : p = MPI_INTEGER2
 *         elif t is __INTEGER4__               : p = MPI_INTEGER4             # <<<<<<<<<<<<<<
 *         elif t is __INTEGER8__               : p = MPI_INTEGER8
 *         elif t is __INTEGER16__              : p = MPI_INTEGER16
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INTEGER4__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_INTEGER4;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":397
 *         elif t is __INTEGER2__               : p = MPI_INTEGER2
 *         elif t is __INTEGER4__               : p = MPI_INTEGER4
 *         elif t is __INTEGER8__               : p = MPI_INTEGER8             # <<<<<<<<<<<<<<
 *         elif t is __INTEGER16__              : p = MPI_INTEGER16
 *         elif t is __REAL2__                  : p = MPI_REAL2
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INTEGER8__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_INTEGER8;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":398
 *         elif t is __INTEGER4__               : p = MPI_INTEGER4
 *         elif t is __INTEGER8__               : p = MPI_INTEGER8
 *         elif t is __INTEGER16__              : p = MPI_INTEGER16             # <<<<<<<<<<<<<<
 *         elif t is __REAL2__                  : p = MPI_REAL2
 *         elif t is __REAL4__                  : p = MPI_REAL4
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___INTEGER16__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_INTEGER16;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":399
 *         elif t is __INTEGER8__               : p = MPI_INTEGER8
 *         elif t is __INTEGER16__              : p = MPI_INTEGER16
 *         elif t is __REAL2__                  : p = MPI_REAL2             # <<<<<<<<<<<<<<
 *         elif t is __REAL4__                  : p = MPI_REAL4
 *         elif t is __REAL8__                  : p = MPI_REAL8
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___REAL2__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_REAL2;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":400
 *         elif t is __INTEGER16__              : p = MPI_INTEGER16
 *         elif t is __REAL2__                  : p = MPI_REAL2
 *         elif t is __REAL4__                  : p = MPI_REAL4             # <<<<<<<<<<<<<<
 *         elif t is __REAL8__                  : p = MPI_REAL8
 *         elif t is __REAL16__                 : p = MPI_REAL16
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___REAL4__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_REAL4;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":401
 *         elif t is __REAL2__                  : p = MPI_REAL2
 *         elif t is __REAL4__                  : p = MPI_REAL4
 *         elif t is __REAL8__                  : p = MPI_REAL8             # <<<<<<<<<<<<<<
 *         elif t is __REAL16__                 : p = MPI_REAL16
 *         elif t is __COMPLEX4__               : p = MPI_COMPLEX4
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___REAL8__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_REAL8;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":402
 *         elif t is __REAL4__                  : p = MPI_REAL4
 *         elif t is __REAL8__                  : p = MPI_REAL8
 *         elif t is __REAL16__                 : p = MPI_REAL16             # <<<<<<<<<<<<<<
 *         elif t is __COMPLEX4__               : p = MPI_COMPLEX4
 *         elif t is __COMPLEX8__               : p = MPI_COMPLEX8
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___REAL16__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_REAL16;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":403
 *         elif t is __REAL8__                  : p = MPI_REAL8
 *         elif t is __REAL16__                 : p = MPI_REAL16
 *         elif t is __COMPLEX4__               : p = MPI_COMPLEX4             # <<<<<<<<<<<<<<
 *         elif t is __COMPLEX8__               : p = MPI_COMPLEX8
 *         elif t is __COMPLEX16__              : p = MPI_COMPLEX16
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___COMPLEX4__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_COMPLEX4;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":404
 *         elif t is __REAL16__                 : p = MPI_REAL16
 *         elif t is __COMPLEX4__               : p = MPI_COMPLEX4
 *         elif t is __COMPLEX8__               : p = MPI_COMPLEX8             # <<<<<<<<<<<<<<
 *         elif t is __COMPLEX16__              : p = MPI_COMPLEX16
 *         elif t is __COMPLEX32__              : p = MPI_COMPLEX32
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___COMPLEX8__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_COMPLEX8;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":405
 *         elif t is __COMPLEX4__               : p = MPI_COMPLEX4
 *         elif t is __COMPLEX8__               : p = MPI_COMPLEX8
 *         elif t is __COMPLEX16__              : p = MPI_COMPLEX16             # <<<<<<<<<<<<<<
 *         elif t is __COMPLEX32__              : p = MPI_COMPLEX32
 *         self.ob_mpi = p
 */
  __pyx_t_3 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___COMPLEX16__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_p = MPI_COMPLEX16;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Datatype.pyx":406
 *         elif t is __COMPLEX8__               : p = MPI_COMPLEX8
 *         elif t is __COMPLEX16__              : p = MPI_COMPLEX16
 *         elif t is __COMPLEX32__              : p = MPI_COMPLEX32             # <<<<<<<<<<<<<<
 *         self.ob_mpi = p
 * 
 */
  __pyx_t_2 = (__pyx_v_t == __pyx_v_6mpi4py_3MPI___COMPLEX32__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_p = MPI_COMPLEX32;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Datatype.pyx":407
 *         elif t is __COMPLEX16__              : p = MPI_COMPLEX16
 *         elif t is __COMPLEX32__              : p = MPI_COMPLEX32
 *         self.ob_mpi = p             # <<<<<<<<<<<<<<
 * 
 *     # Datatype Resizing
 */
  __pyx_v_self->ob_mpi = __pyx_v_p;

  /* "mpi4py/MPI/Datatype.pyx":331
 *         return self
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free the datatype
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_t);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":412
 *     # -----------------
 * 
 *     def Create_resized(self, Aint lb, Aint extent):             # <<<<<<<<<<<<<<
 *         """
 *         Create a datatype with a new lower bound and extent
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_47Create_resized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_46Create_resized[] = "Datatype.Create_resized(self, Aint lb, Aint extent)\n\n        Create a datatype with a new lower bound and extent\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_47Create_resized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_resized (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lb,&__pyx_n_s_extent,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lb)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_extent)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_resized", 1, 2, 2, 1); __PYX_ERR(21, 412, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_resized") < 0)) __PYX_ERR(21, 412, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_lb = __Pyx_PyInt_As_MPI_Aint(values[0]); if (unlikely((__pyx_v_lb == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 412, __pyx_L3_error)
    __pyx_v_extent = __Pyx_PyInt_As_MPI_Aint(values[1]); if (unlikely((__pyx_v_extent == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 412, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_resized", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 412, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_resized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_46Create_resized(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_lb, __pyx_v_extent);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_46Create_resized(struct PyMPIDatatypeObject *__pyx_v_self, MPI_Aint __pyx_v_lb, MPI_Aint __pyx_v_extent) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_resized", 0);

  /* "mpi4py/MPI/Datatype.pyx":416
 *         Create a datatype with a new lower bound and extent
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_resized(self.ob_mpi,
 *                                         lb, extent,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 416, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":417
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         CHKERR( MPI_Type_create_resized(self.ob_mpi,             # <<<<<<<<<<<<<<
 *                                         lb, extent,
 *                                         &datatype.ob_mpi) )
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_resized(__pyx_v_self->ob_mpi, __pyx_v_lb, __pyx_v_extent, (&__pyx_v_datatype->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 417, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":420
 *                                         lb, extent,
 *                                         &datatype.ob_mpi) )
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 *     Resized = Create_resized #: compatibility alias
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":412
 *     # -----------------
 * 
 *     def Create_resized(self, Aint lb, Aint extent):             # <<<<<<<<<<<<<<
 *         """
 *         Create a datatype with a new lower bound and extent
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_resized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":424
 *     Resized = Create_resized #: compatibility alias
 * 
 *     def Get_true_extent(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the true lower bound and extent of a datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_49Get_true_extent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_48Get_true_extent[] = "Datatype.Get_true_extent(self)\n\n        Return the true lower bound and extent of a datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_49Get_true_extent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_true_extent (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_true_extent", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_true_extent", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_48Get_true_extent(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_48Get_true_extent(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Get_true_extent", 0);

  /* "mpi4py/MPI/Datatype.pyx":428
 *         Return the true lower bound and extent of a datatype
 *         """
 *         cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                            &lb, &extent) )
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":429
 *         """
 *         cdef MPI_Count lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,             # <<<<<<<<<<<<<<
 *                                            &lb, &extent) )
 *         return (lb, extent)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_true_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 429, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":431
 *         CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                            &lb, &extent) )
 *         return (lb, extent)             # <<<<<<<<<<<<<<
 * 
 *     property true_extent:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_lb); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Count(__pyx_v_extent); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":424
 *     Resized = Create_resized #: compatibility alias
 * 
 *     def Get_true_extent(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the true lower bound and extent of a datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_true_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":435
 *     property true_extent:
 *         """true extent"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_11true_extent_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_11true_extent_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_11true_extent___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_11true_extent___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":436
 *         """true extent"""
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                                &lb, &extent) )
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":437
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,             # <<<<<<<<<<<<<<
 *                                                &lb, &extent) )
 *             return extent
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_true_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 437, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":439
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                                &lb, &extent) )
 *             return extent             # <<<<<<<<<<<<<<
 * 
 *     property true_lb:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_extent); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":435
 *     property true_extent:
 *         """true extent"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.true_extent.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":443
 *     property true_lb:
 *         """true lower bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_7true_lb_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_7true_lb_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_7true_lb___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_7true_lb___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":444
 *         """true lower bound"""
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                                &lb, &extent) )
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":445
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,             # <<<<<<<<<<<<<<
 *                                                &lb, &extent) )
 *             return lb
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_true_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 445, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":447
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                                &lb, &extent) )
 *             return lb             # <<<<<<<<<<<<<<
 * 
 *     property true_ub:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count(__pyx_v_lb); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":443
 *     property true_lb:
 *         """true lower bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.true_lb.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":451
 *     property true_ub:
 *         """true upper bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_7true_ub_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_7true_ub_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_7true_ub___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_7true_ub___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  MPI_Count __pyx_v_lb;
  MPI_Count __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":452
 *         """true upper bound"""
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                                &lb, &extent) )
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":453
 *         def __get__(self):
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,             # <<<<<<<<<<<<<<
 *                                                &lb, &extent) )
 *             return lb + extent
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_true_extent_x(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 453, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":455
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 *                                                &lb, &extent) )
 *             return lb + extent             # <<<<<<<<<<<<<<
 * 
 *     # Decoding a Datatype
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Count((__pyx_v_lb + __pyx_v_extent)); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":451
 *     property true_ub:
 *         """true upper bound"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Count lb = 0, extent = 0
 *             CHKERR( MPI_Type_get_true_extent_x(self.ob_mpi,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.true_ub.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":460
 *     # -------------------
 * 
 *     def Get_envelope(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return information on the number and type of input arguments
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_51Get_envelope(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_50Get_envelope[] = "Datatype.Get_envelope(self)\n\n        Return information on the number and type of input arguments\n        used in the call that created a datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_51Get_envelope(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_envelope (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_envelope", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_envelope", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_50Get_envelope(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_50Get_envelope(struct PyMPIDatatypeObject *__pyx_v_self) {
  int __pyx_v_ni;
  int __pyx_v_na;
  int __pyx_v_nd;
  int __pyx_v_combiner;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("Get_envelope", 0);

  /* "mpi4py/MPI/Datatype.pyx":465
 *         used in the call that created a datatype
 *         """
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         return (ni, na, nd, combiner)
 */
  __pyx_v_ni = 0;
  __pyx_v_na = 0;
  __pyx_v_nd = 0;
  __pyx_v_combiner = MPI_UNDEFINED;

  /* "mpi4py/MPI/Datatype.pyx":466
 *         """
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )             # <<<<<<<<<<<<<<
 *         return (ni, na, nd, combiner)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_envelope(__pyx_v_self->ob_mpi, (&__pyx_v_ni), (&__pyx_v_na), (&__pyx_v_nd), (&__pyx_v_combiner))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 466, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":467
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         return (ni, na, nd, combiner)             # <<<<<<<<<<<<<<
 * 
 *     property envelope:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ni); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_na); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nd); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_combiner); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_5);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":460
 *     # -------------------
 * 
 *     def Get_envelope(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return information on the number and type of input arguments
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_envelope", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":471
 *     property envelope:
 *         """datatype envelope"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_envelope()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8envelope_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8envelope_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_8envelope___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8envelope___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":472
 *         """datatype envelope"""
 *         def __get__(self):
 *             return self.Get_envelope()             # <<<<<<<<<<<<<<
 * 
 *     def Get_contents(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_envelope); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":471
 *     property envelope:
 *         """datatype envelope"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_envelope()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.envelope.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":474
 *             return self.Get_envelope()
 * 
 *     def Get_contents(self):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve the actual arguments used in the call that created a
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_53Get_contents(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_52Get_contents[] = "Datatype.Get_contents(self)\n\n        Retrieve the actual arguments used in the call that created a\n        datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_53Get_contents(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_contents (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_contents", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_contents", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_52Get_contents(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_52Get_contents(struct PyMPIDatatypeObject *__pyx_v_self) {
  int __pyx_v_ni;
  int __pyx_v_na;
  int __pyx_v_nd;
  int __pyx_v_combiner;
  int *__pyx_v_i;
  MPI_Aint *__pyx_v_a;
  MPI_Datatype *__pyx_v_d;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
  int __pyx_v_k;
  PyObject *__pyx_v_integers = 0;
  PyObject *__pyx_v_addresses = 0;
  PyObject *__pyx_v_datatypes = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_contents", 0);

  /* "mpi4py/MPI/Datatype.pyx":479
 *         datatype
 *         """
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         cdef int *i = NULL
 */
  __pyx_v_ni = 0;
  __pyx_v_na = 0;
  __pyx_v_nd = 0;
  __pyx_v_combiner = MPI_UNDEFINED;

  /* "mpi4py/MPI/Datatype.pyx":480
 *         """
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )             # <<<<<<<<<<<<<<
 *         cdef int *i = NULL
 *         cdef MPI_Aint *a = NULL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_envelope(__pyx_v_self->ob_mpi, (&__pyx_v_ni), (&__pyx_v_na), (&__pyx_v_nd), (&__pyx_v_combiner))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 480, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":481
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         cdef int *i = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint *a = NULL
 *         cdef MPI_Datatype *d = NULL
 */
  __pyx_v_i = NULL;

  /* "mpi4py/MPI/Datatype.pyx":482
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         cdef int *i = NULL
 *         cdef MPI_Aint *a = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Datatype *d = NULL
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 */
  __pyx_v_a = NULL;

  /* "mpi4py/MPI/Datatype.pyx":483
 *         cdef int *i = NULL
 *         cdef MPI_Aint *a = NULL
 *         cdef MPI_Datatype *d = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 */
  __pyx_v_d = NULL;

  /* "mpi4py/MPI/Datatype.pyx":484
 *         cdef MPI_Aint *a = NULL
 *         cdef MPI_Datatype *d = NULL
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_ni, (sizeof(int)), (&__pyx_v_i))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":485
 *         cdef MPI_Datatype *d = NULL
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)             # <<<<<<<<<<<<<<
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_na, (sizeof(MPI_Aint)), (&__pyx_v_a))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":486
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 *         cdef int k = 0
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_nd, (sizeof(MPI_Datatype)), (&__pyx_v_d))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp3 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":487
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )             # <<<<<<<<<<<<<<
 *         cdef int k = 0
 *         cdef object integers  = [i[k] for k from 0 <= k < ni]
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_contents(__pyx_v_self->ob_mpi, __pyx_v_ni, __pyx_v_na, __pyx_v_nd, __pyx_v_i, __pyx_v_a, __pyx_v_d)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 487, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":488
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 *         cdef int k = 0             # <<<<<<<<<<<<<<
 *         cdef object integers  = [i[k] for k from 0 <= k < ni]
 *         cdef object addresses = [a[k] for k from 0 <= k < na]
 */
  __pyx_v_k = 0;

  /* "mpi4py/MPI/Datatype.pyx":489
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 *         cdef int k = 0
 *         cdef object integers  = [i[k] for k from 0 <= k < ni]             # <<<<<<<<<<<<<<
 *         cdef object addresses = [a[k] for k from 0 <= k < na]
 *         cdef object datatypes = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_ni;
  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_1; __pyx_v_k++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(21, 489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_integers = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":490
 *         cdef int k = 0
 *         cdef object integers  = [i[k] for k from 0 <= k < ni]
 *         cdef object addresses = [a[k] for k from 0 <= k < na]             # <<<<<<<<<<<<<<
 *         cdef object datatypes = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         return (integers, addresses, datatypes)
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_na;
  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_1; __pyx_v_k++) {
    __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[__pyx_v_k])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 490, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(21, 490, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_addresses = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":491
 *         cdef object integers  = [i[k] for k from 0 <= k < ni]
 *         cdef object addresses = [a[k] for k from 0 <= k < na]
 *         cdef object datatypes = [ref_Datatype(d[k]) for k from 0 <= k < nd]             # <<<<<<<<<<<<<<
 *         return (integers, addresses, datatypes)
 * 
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_nd;
  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_1; __pyx_v_k++) {
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_ref_Datatype((__pyx_v_d[__pyx_v_k]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(21, 491, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_datatypes = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":492
 *         cdef object addresses = [a[k] for k from 0 <= k < na]
 *         cdef object datatypes = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         return (integers, addresses, datatypes)             # <<<<<<<<<<<<<<
 * 
 *     property contents:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_integers);
  __Pyx_GIVEREF(__pyx_v_integers);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_integers);
  __Pyx_INCREF(__pyx_v_addresses);
  __Pyx_GIVEREF(__pyx_v_addresses);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_addresses);
  __Pyx_INCREF(__pyx_v_datatypes);
  __Pyx_GIVEREF(__pyx_v_datatypes);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_datatypes);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":474
 *             return self.Get_envelope()
 * 
 *     def Get_contents(self):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve the actual arguments used in the call that created a
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_tmp3);
  __Pyx_XDECREF(__pyx_v_integers);
  __Pyx_XDECREF(__pyx_v_addresses);
  __Pyx_XDECREF(__pyx_v_datatypes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":496
 *     property contents:
 *         """datatype contents"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_contents()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8contents_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8contents_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_8contents___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8contents___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":497
 *         """datatype contents"""
 *         def __get__(self):
 *             return self.Get_contents()             # <<<<<<<<<<<<<<
 * 
 *     def decode(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_contents); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":496
 *     property contents:
 *         """datatype contents"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_contents()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.contents.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":499
 *             return self.Get_contents()
 * 
 *     def decode(self):             # <<<<<<<<<<<<<<
 *         """
 *         Convenience method for decoding a datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_55decode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_54decode[] = "Datatype.decode(self)\n\n        Convenience method for decoding a datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_55decode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("decode (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("decode", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "decode", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_54decode(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_54decode(struct PyMPIDatatypeObject *__pyx_v_self) {
  int __pyx_v_ni;
  int __pyx_v_na;
  int __pyx_v_nd;
  int __pyx_v_combiner;
  int *__pyx_v_i;
  MPI_Aint *__pyx_v_a;
  MPI_Datatype *__pyx_v_d;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
  int __pyx_v_k;
  int __pyx_v_s1;
  int __pyx_v_e1;
  int __pyx_v_s2;
  int __pyx_v_e2;
  int __pyx_v_s3;
  int __pyx_v_e3;
  int __pyx_v_s4;
  int __pyx_v_e4;
  PyObject *__pyx_v_oldtype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("decode", 0);

  /* "mpi4py/MPI/Datatype.pyx":504
 *         """
 *         # get the datatype envelope
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         # return self immediately for named datatypes
 */
  __pyx_v_ni = 0;
  __pyx_v_na = 0;
  __pyx_v_nd = 0;
  __pyx_v_combiner = MPI_UNDEFINED;

  /* "mpi4py/MPI/Datatype.pyx":505
 *         # get the datatype envelope
 *         cdef int ni = 0, na = 0, nd = 0, combiner = MPI_UNDEFINED
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )             # <<<<<<<<<<<<<<
 *         # return self immediately for named datatypes
 *         if combiner == MPI_COMBINER_NAMED: return self
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_envelope(__pyx_v_self->ob_mpi, (&__pyx_v_ni), (&__pyx_v_na), (&__pyx_v_nd), (&__pyx_v_combiner))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 505, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":507
 *         CHKERR( MPI_Type_get_envelope(self.ob_mpi, &ni, &na, &nd, &combiner) )
 *         # return self immediately for named datatypes
 *         if combiner == MPI_COMBINER_NAMED: return self             # <<<<<<<<<<<<<<
 *         # get the datatype contents
 *         cdef int *i = NULL
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_NAMED) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_self));
    __pyx_r = ((PyObject *)__pyx_v_self);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":509
 *         if combiner == MPI_COMBINER_NAMED: return self
 *         # get the datatype contents
 *         cdef int *i = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint *a = NULL
 *         cdef MPI_Datatype *d = NULL
 */
  __pyx_v_i = NULL;

  /* "mpi4py/MPI/Datatype.pyx":510
 *         # get the datatype contents
 *         cdef int *i = NULL
 *         cdef MPI_Aint *a = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Datatype *d = NULL
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 */
  __pyx_v_a = NULL;

  /* "mpi4py/MPI/Datatype.pyx":511
 *         cdef int *i = NULL
 *         cdef MPI_Aint *a = NULL
 *         cdef MPI_Datatype *d = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 */
  __pyx_v_d = NULL;

  /* "mpi4py/MPI/Datatype.pyx":512
 *         cdef MPI_Aint *a = NULL
 *         cdef MPI_Datatype *d = NULL
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_ni, (sizeof(int)), (&__pyx_v_i))); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tmp1 = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":513
 *         cdef MPI_Datatype *d = NULL
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)             # <<<<<<<<<<<<<<
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_na, (sizeof(MPI_Aint)), (&__pyx_v_a))); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tmp2 = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":514
 *         cdef tmp1 = allocate(ni, sizeof(int), &i)
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 *         # manage in advance the contained datatypes
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_nd, (sizeof(MPI_Datatype)), (&__pyx_v_d))); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_tmp3 = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":515
 *         cdef tmp2 = allocate(na, sizeof(MPI_Aint), &a)
 *         cdef tmp3 = allocate(nd, sizeof(MPI_Datatype), &d)
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )             # <<<<<<<<<<<<<<
 *         # manage in advance the contained datatypes
 *         cdef int k = 0, s1, e1, s2, e2, s3, e3, s4, e4
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_contents(__pyx_v_self->ob_mpi, __pyx_v_ni, __pyx_v_na, __pyx_v_nd, __pyx_v_i, __pyx_v_a, __pyx_v_d)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 515, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":517
 *         CHKERR( MPI_Type_get_contents(self.ob_mpi, ni, na, nd, i, a, d) )
 *         # manage in advance the contained datatypes
 *         cdef int k = 0, s1, e1, s2, e2, s3, e3, s4, e4             # <<<<<<<<<<<<<<
 *         cdef object oldtype = None
 *         if combiner == MPI_COMBINER_STRUCT:
 */
  __pyx_v_k = 0;

  /* "mpi4py/MPI/Datatype.pyx":518
 *         # manage in advance the contained datatypes
 *         cdef int k = 0, s1, e1, s2, e2, s3, e3, s4, e4
 *         cdef object oldtype = None             # <<<<<<<<<<<<<<
 *         if combiner == MPI_COMBINER_STRUCT:
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_oldtype = Py_None;

  /* "mpi4py/MPI/Datatype.pyx":519
 *         cdef int k = 0, s1, e1, s2, e2, s3, e3, s4, e4
 *         cdef object oldtype = None
 *         if combiner == MPI_COMBINER_STRUCT:             # <<<<<<<<<<<<<<
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_STRUCT) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":520
 *         cdef object oldtype = None
 *         if combiner == MPI_COMBINER_STRUCT:
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]             # <<<<<<<<<<<<<<
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and
 *               combiner != MPI_COMBINER_F90_REAL and
 */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 520, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_nd;
    for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_1; __pyx_v_k++) {
      __pyx_t_4 = ((PyObject *)__pyx_f_6mpi4py_3MPI_ref_Datatype((__pyx_v_d[__pyx_v_k]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 520, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_4))) __PYX_ERR(21, 520, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_oldtype, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":519
 *         cdef int k = 0, s1, e1, s2, e2, s3, e3, s4, e4
 *         cdef object oldtype = None
 *         if combiner == MPI_COMBINER_STRUCT:             # <<<<<<<<<<<<<<
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/Datatype.pyx":521
 *         if combiner == MPI_COMBINER_STRUCT:
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and             # <<<<<<<<<<<<<<
 *               combiner != MPI_COMBINER_F90_REAL and
 *               combiner != MPI_COMBINER_F90_COMPLEX):
 */
  __pyx_t_5 = ((__pyx_v_combiner != MPI_COMBINER_F90_INTEGER) != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L7_bool_binop_done;
  }

  /* "mpi4py/MPI/Datatype.pyx":522
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and
 *               combiner != MPI_COMBINER_F90_REAL and             # <<<<<<<<<<<<<<
 *               combiner != MPI_COMBINER_F90_COMPLEX):
 *             oldtype = ref_Datatype(d[0])
 */
  __pyx_t_5 = ((__pyx_v_combiner != MPI_COMBINER_F90_REAL) != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L7_bool_binop_done;
  }

  /* "mpi4py/MPI/Datatype.pyx":523
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and
 *               combiner != MPI_COMBINER_F90_REAL and
 *               combiner != MPI_COMBINER_F90_COMPLEX):             # <<<<<<<<<<<<<<
 *             oldtype = ref_Datatype(d[0])
 *         # dispatch depending on the combiner value
 */
  __pyx_t_5 = ((__pyx_v_combiner != MPI_COMBINER_F90_COMPLEX) != 0);
  __pyx_t_2 = __pyx_t_5;
  __pyx_L7_bool_binop_done:;

  /* "mpi4py/MPI/Datatype.pyx":521
 *         if combiner == MPI_COMBINER_STRUCT:
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and             # <<<<<<<<<<<<<<
 *               combiner != MPI_COMBINER_F90_REAL and
 *               combiner != MPI_COMBINER_F90_COMPLEX):
 */
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":524
 *               combiner != MPI_COMBINER_F90_REAL and
 *               combiner != MPI_COMBINER_F90_COMPLEX):
 *             oldtype = ref_Datatype(d[0])             # <<<<<<<<<<<<<<
 *         # dispatch depending on the combiner value
 *         if combiner == MPI_COMBINER_DUP:
 */
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_ref_Datatype((__pyx_v_d[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 524, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_oldtype, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":521
 *         if combiner == MPI_COMBINER_STRUCT:
 *             oldtype = [ref_Datatype(d[k]) for k from 0 <= k < nd]
 *         elif (combiner != MPI_COMBINER_F90_INTEGER and             # <<<<<<<<<<<<<<
 *               combiner != MPI_COMBINER_F90_REAL and
 *               combiner != MPI_COMBINER_F90_COMPLEX):
 */
  }
  __pyx_L4:;

  /* "mpi4py/MPI/Datatype.pyx":526
 *             oldtype = ref_Datatype(d[0])
 *         # dispatch depending on the combiner value
 *         if combiner == MPI_COMBINER_DUP:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('DUP'), {})
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_DUP) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":527
 *         # dispatch depending on the combiner value
 *         if combiner == MPI_COMBINER_DUP:
 *             return (oldtype, ('DUP'), {})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:
 *             return (oldtype, ('CONTIGUOUS'),
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 527, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 527, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_DUP);
    __Pyx_GIVEREF(__pyx_n_s_DUP);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_DUP);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":526
 *             oldtype = ref_Datatype(d[0])
 *         # dispatch depending on the combiner value
 *         if combiner == MPI_COMBINER_DUP:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('DUP'), {})
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":528
 *         if combiner == MPI_COMBINER_DUP:
 *             return (oldtype, ('DUP'), {})
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('CONTIGUOUS'),
 *                     {('count') : i[0]})
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_CONTIGUOUS) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":529
 *             return (oldtype, ('DUP'), {})
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:
 *             return (oldtype, ('CONTIGUOUS'),             # <<<<<<<<<<<<<<
 *                     {('count') : i[0]})
 *         elif combiner == MPI_COMBINER_VECTOR:
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":530
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:
 *             return (oldtype, ('CONTIGUOUS'),
 *                     {('count') : i[0]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_VECTOR:
 *             return (oldtype, ('VECTOR'),
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_count, __pyx_t_3) < 0) __PYX_ERR(21, 530, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":529
 *             return (oldtype, ('DUP'), {})
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:
 *             return (oldtype, ('CONTIGUOUS'),             # <<<<<<<<<<<<<<
 *                     {('count') : i[0]})
 *         elif combiner == MPI_COMBINER_VECTOR:
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_CONTIGUOUS);
    __Pyx_GIVEREF(__pyx_n_s_CONTIGUOUS);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_CONTIGUOUS);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":528
 *         if combiner == MPI_COMBINER_DUP:
 *             return (oldtype, ('DUP'), {})
 *         elif combiner == MPI_COMBINER_CONTIGUOUS:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('CONTIGUOUS'),
 *                     {('count') : i[0]})
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":531
 *             return (oldtype, ('CONTIGUOUS'),
 *                     {('count') : i[0]})
 *         elif combiner == MPI_COMBINER_VECTOR:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('VECTOR'),
 *                     {('count')       : i[0],
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_VECTOR) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":532
 *                     {('count') : i[0]})
 *         elif combiner == MPI_COMBINER_VECTOR:
 *             return (oldtype, ('VECTOR'),             # <<<<<<<<<<<<<<
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":533
 *         elif combiner == MPI_COMBINER_VECTOR:
 *             return (oldtype, ('VECTOR'),
 *                     {('count')       : i[0],             # <<<<<<<<<<<<<<
 *                      ('blocklength') : i[1],
 *                      ('stride')      : i[2]})
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 533, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 533, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_count, __pyx_t_4) < 0) __PYX_ERR(21, 533, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":534
 *             return (oldtype, ('VECTOR'),
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],             # <<<<<<<<<<<<<<
 *                      ('stride')      : i[2]})
 *         elif combiner == MPI_COMBINER_HVECTOR:
 */
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_blocklength, __pyx_t_4) < 0) __PYX_ERR(21, 533, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":535
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],
 *                      ('stride')      : i[2]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_HVECTOR:
 *             return (oldtype, ('HVECTOR'),
 */
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[2])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 535, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_stride, __pyx_t_4) < 0) __PYX_ERR(21, 533, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":532
 *                     {('count') : i[0]})
 *         elif combiner == MPI_COMBINER_VECTOR:
 *             return (oldtype, ('VECTOR'),             # <<<<<<<<<<<<<<
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 532, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_VECTOR);
    __Pyx_GIVEREF(__pyx_n_s_VECTOR);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_VECTOR);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":531
 *             return (oldtype, ('CONTIGUOUS'),
 *                     {('count') : i[0]})
 *         elif combiner == MPI_COMBINER_VECTOR:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('VECTOR'),
 *                     {('count')       : i[0],
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":536
 *                      ('blocklength') : i[1],
 *                      ('stride')      : i[2]})
 *         elif combiner == MPI_COMBINER_HVECTOR:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('HVECTOR'),
 *                     {('count')       : i[0],
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_HVECTOR) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":537
 *                      ('stride')      : i[2]})
 *         elif combiner == MPI_COMBINER_HVECTOR:
 *             return (oldtype, ('HVECTOR'),             # <<<<<<<<<<<<<<
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":538
 *         elif combiner == MPI_COMBINER_HVECTOR:
 *             return (oldtype, ('HVECTOR'),
 *                     {('count')       : i[0],             # <<<<<<<<<<<<<<
 *                      ('blocklength') : i[1],
 *                      ('stride')      : a[0]})
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_count, __pyx_t_3) < 0) __PYX_ERR(21, 538, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":539
 *             return (oldtype, ('HVECTOR'),
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],             # <<<<<<<<<<<<<<
 *                      ('stride')      : a[0]})
 *         elif combiner == MPI_COMBINER_INDEXED:
 */
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_blocklength, __pyx_t_3) < 0) __PYX_ERR(21, 538, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":540
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],
 *                      ('stride')      : a[0]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_INDEXED:
 *             s1 =      1; e1 =   i[0]
 */
    __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_stride, __pyx_t_3) < 0) __PYX_ERR(21, 538, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":537
 *                      ('stride')      : i[2]})
 *         elif combiner == MPI_COMBINER_HVECTOR:
 *             return (oldtype, ('HVECTOR'),             # <<<<<<<<<<<<<<
 *                     {('count')       : i[0],
 *                      ('blocklength') : i[1],
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_HVECTOR);
    __Pyx_GIVEREF(__pyx_n_s_HVECTOR);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_HVECTOR);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":536
 *                      ('blocklength') : i[1],
 *                      ('stride')      : i[2]})
 *         elif combiner == MPI_COMBINER_HVECTOR:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('HVECTOR'),
 *                     {('count')       : i[0],
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":541
 *                      ('blocklength') : i[1],
 *                      ('stride')      : a[0]})
 *         elif combiner == MPI_COMBINER_INDEXED:             # <<<<<<<<<<<<<<
 *             s1 =      1; e1 =   i[0]
 *             s2 = i[0]+1; e2 = 2*i[0]
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_INDEXED) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":542
 *                      ('stride')      : a[0]})
 *         elif combiner == MPI_COMBINER_INDEXED:
 *             s1 =      1; e1 =   i[0]             # <<<<<<<<<<<<<<
 *             s2 = i[0]+1; e2 = 2*i[0]
 *             return (oldtype, ('INDEXED'),
 */
    __pyx_v_s1 = 1;
    __pyx_v_e1 = (__pyx_v_i[0]);

    /* "mpi4py/MPI/Datatype.pyx":543
 *         elif combiner == MPI_COMBINER_INDEXED:
 *             s1 =      1; e1 =   i[0]
 *             s2 = i[0]+1; e2 = 2*i[0]             # <<<<<<<<<<<<<<
 *             return (oldtype, ('INDEXED'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 */
    __pyx_v_s2 = ((__pyx_v_i[0]) + 1);
    __pyx_v_e2 = (2 * (__pyx_v_i[0]));

    /* "mpi4py/MPI/Datatype.pyx":544
 *             s1 =      1; e1 =   i[0]
 *             s2 = i[0]+1; e2 = 2*i[0]
 *             return (oldtype, ('INDEXED'),             # <<<<<<<<<<<<<<
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":545
 *             s2 = i[0]+1; e2 = 2*i[0]
 *             return (oldtype, ('INDEXED'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],             # <<<<<<<<<<<<<<
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED:
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 545, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e1;
    for (__pyx_v_k = __pyx_v_s1; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 545, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_blocklengths, __pyx_t_4) < 0) __PYX_ERR(21, 545, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":546
 *             return (oldtype, ('INDEXED'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_HINDEXED:
 *             s1 = 1; e1 = i[0]
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 546, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 546, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_displacements, __pyx_t_4) < 0) __PYX_ERR(21, 545, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":544
 *             s1 =      1; e1 =   i[0]
 *             s2 = i[0]+1; e2 = 2*i[0]
 *             return (oldtype, ('INDEXED'),             # <<<<<<<<<<<<<<
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_INDEXED);
    __Pyx_GIVEREF(__pyx_n_s_INDEXED);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_INDEXED);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":541
 *                      ('blocklength') : i[1],
 *                      ('stride')      : a[0]})
 *         elif combiner == MPI_COMBINER_INDEXED:             # <<<<<<<<<<<<<<
 *             s1 =      1; e1 =   i[0]
 *             s2 = i[0]+1; e2 = 2*i[0]
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":547
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED:             # <<<<<<<<<<<<<<
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_HINDEXED) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":548
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED:
 *             s1 = 1; e1 = i[0]             # <<<<<<<<<<<<<<
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED'),
 */
    __pyx_v_s1 = 1;
    __pyx_v_e1 = (__pyx_v_i[0]);

    /* "mpi4py/MPI/Datatype.pyx":549
 *         elif combiner == MPI_COMBINER_HINDEXED:
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1             # <<<<<<<<<<<<<<
 *             return (oldtype, ('HINDEXED'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 */
    __pyx_v_s2 = 0;
    __pyx_v_e2 = ((__pyx_v_i[0]) - 1);

    /* "mpi4py/MPI/Datatype.pyx":550
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED'),             # <<<<<<<<<<<<<<
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":551
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],             # <<<<<<<<<<<<<<
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_e1;
    for (__pyx_v_k = __pyx_v_s1; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 551, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 551, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_blocklengths, __pyx_t_3) < 0) __PYX_ERR(21, 551, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":552
 *             return (oldtype, ('HINDEXED'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:
 *             s2 = 2; e2 = i[0]+1
 */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 552, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 552, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 552, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_displacements, __pyx_t_3) < 0) __PYX_ERR(21, 551, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":550
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED'),             # <<<<<<<<<<<<<<
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_HINDEXED);
    __Pyx_GIVEREF(__pyx_n_s_HINDEXED);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_HINDEXED);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":547
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED:             # <<<<<<<<<<<<<<
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":553
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:             # <<<<<<<<<<<<<<
 *             s2 = 2; e2 = i[0]+1
 *             return (oldtype, ('INDEXED_BLOCK'),
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_INDEXED_BLOCK) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":554
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:
 *             s2 = 2; e2 = i[0]+1             # <<<<<<<<<<<<<<
 *             return (oldtype, ('INDEXED_BLOCK'),
 *                     {('blocklength')   : i[1],
 */
    __pyx_v_s2 = 2;
    __pyx_v_e2 = ((__pyx_v_i[0]) + 1);

    /* "mpi4py/MPI/Datatype.pyx":555
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:
 *             s2 = 2; e2 = i[0]+1
 *             return (oldtype, ('INDEXED_BLOCK'),             # <<<<<<<<<<<<<<
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":556
 *             s2 = 2; e2 = i[0]+1
 *             return (oldtype, ('INDEXED_BLOCK'),
 *                     {('blocklength')   : i[1],             # <<<<<<<<<<<<<<
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_blocklength, __pyx_t_4) < 0) __PYX_ERR(21, 556, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":557
 *             return (oldtype, ('INDEXED_BLOCK'),
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:
 *             s2 = 0; e2 = i[0]-1
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 557, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 557, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_displacements, __pyx_t_4) < 0) __PYX_ERR(21, 556, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":555
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:
 *             s2 = 2; e2 = i[0]+1
 *             return (oldtype, ('INDEXED_BLOCK'),             # <<<<<<<<<<<<<<
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_INDEXED_BLOCK);
    __Pyx_GIVEREF(__pyx_n_s_INDEXED_BLOCK);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_INDEXED_BLOCK);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":553
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_INDEXED_BLOCK:             # <<<<<<<<<<<<<<
 *             s2 = 2; e2 = i[0]+1
 *             return (oldtype, ('INDEXED_BLOCK'),
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":558
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:             # <<<<<<<<<<<<<<
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED_BLOCK'),
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_HINDEXED_BLOCK) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":559
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:
 *             s2 = 0; e2 = i[0]-1             # <<<<<<<<<<<<<<
 *             return (oldtype, ('HINDEXED_BLOCK'),
 *                     {('blocklength')   : i[1],
 */
    __pyx_v_s2 = 0;
    __pyx_v_e2 = ((__pyx_v_i[0]) - 1);

    /* "mpi4py/MPI/Datatype.pyx":560
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED_BLOCK'),             # <<<<<<<<<<<<<<
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":561
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED_BLOCK'),
 *                     {('blocklength')   : i[1],             # <<<<<<<<<<<<<<
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_STRUCT:
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_blocklength, __pyx_t_3) < 0) __PYX_ERR(21, 561, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":562
 *             return (oldtype, ('HINDEXED_BLOCK'),
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_STRUCT:
 *             s1 = 1; e1 = i[0]
 */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 562, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 562, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_displacements, __pyx_t_3) < 0) __PYX_ERR(21, 561, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":560
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED_BLOCK'),             # <<<<<<<<<<<<<<
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 560, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_HINDEXED_BLOCK);
    __Pyx_GIVEREF(__pyx_n_s_HINDEXED_BLOCK);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_HINDEXED_BLOCK);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":558
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [i[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_HINDEXED_BLOCK:             # <<<<<<<<<<<<<<
 *             s2 = 0; e2 = i[0]-1
 *             return (oldtype, ('HINDEXED_BLOCK'),
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":563
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_STRUCT:             # <<<<<<<<<<<<<<
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_STRUCT) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":564
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_STRUCT:
 *             s1 = 1; e1 = i[0]             # <<<<<<<<<<<<<<
 *             s2 = 0; e2 = i[0]-1
 *             return (Datatype, ('STRUCT'),
 */
    __pyx_v_s1 = 1;
    __pyx_v_e1 = (__pyx_v_i[0]);

    /* "mpi4py/MPI/Datatype.pyx":565
 *         elif combiner == MPI_COMBINER_STRUCT:
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1             # <<<<<<<<<<<<<<
 *             return (Datatype, ('STRUCT'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 */
    __pyx_v_s2 = 0;
    __pyx_v_e2 = ((__pyx_v_i[0]) - 1);

    /* "mpi4py/MPI/Datatype.pyx":566
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 *             return (Datatype, ('STRUCT'),             # <<<<<<<<<<<<<<
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":567
 *             s2 = 0; e2 = i[0]-1
 *             return (Datatype, ('STRUCT'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],             # <<<<<<<<<<<<<<
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],
 *                      ('datatypes')     : oldtype})
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e1;
    for (__pyx_v_k = __pyx_v_s1; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 567, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 567, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_blocklengths, __pyx_t_4) < 0) __PYX_ERR(21, 567, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":568
 *             return (Datatype, ('STRUCT'),
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],             # <<<<<<<<<<<<<<
 *                      ('datatypes')     : oldtype})
 *         elif combiner == MPI_COMBINER_SUBARRAY:
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 568, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 568, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_displacements, __pyx_t_4) < 0) __PYX_ERR(21, 567, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":569
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],
 *                      ('datatypes')     : oldtype})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_SUBARRAY:
 *             s1 =        1; e1 =   i[0]
 */
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_datatypes, __pyx_v_oldtype) < 0) __PYX_ERR(21, 567, __pyx_L1_error)

    /* "mpi4py/MPI/Datatype.pyx":566
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 *             return (Datatype, ('STRUCT'),             # <<<<<<<<<<<<<<
 *                     {('blocklengths')  : [i[k] for k from s1 <= k <= e1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 566, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_INCREF(__pyx_n_s_STRUCT);
    __Pyx_GIVEREF(__pyx_n_s_STRUCT);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_STRUCT);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":563
 *                     {('blocklength')   : i[1],
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2]})
 *         elif combiner == MPI_COMBINER_STRUCT:             # <<<<<<<<<<<<<<
 *             s1 = 1; e1 = i[0]
 *             s2 = 0; e2 = i[0]-1
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":570
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],
 *                      ('datatypes')     : oldtype})
 *         elif combiner == MPI_COMBINER_SUBARRAY:             # <<<<<<<<<<<<<<
 *             s1 =        1; e1 =   i[0]
 *             s2 =   i[0]+1; e2 = 2*i[0]
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_SUBARRAY) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":571
 *                      ('datatypes')     : oldtype})
 *         elif combiner == MPI_COMBINER_SUBARRAY:
 *             s1 =        1; e1 =   i[0]             # <<<<<<<<<<<<<<
 *             s2 =   i[0]+1; e2 = 2*i[0]
 *             s3 = 2*i[0]+1; e3 = 3*i[0]
 */
    __pyx_v_s1 = 1;
    __pyx_v_e1 = (__pyx_v_i[0]);

    /* "mpi4py/MPI/Datatype.pyx":572
 *         elif combiner == MPI_COMBINER_SUBARRAY:
 *             s1 =        1; e1 =   i[0]
 *             s2 =   i[0]+1; e2 = 2*i[0]             # <<<<<<<<<<<<<<
 *             s3 = 2*i[0]+1; e3 = 3*i[0]
 *             return (oldtype, ('SUBARRAY'),
 */
    __pyx_v_s2 = ((__pyx_v_i[0]) + 1);
    __pyx_v_e2 = (2 * (__pyx_v_i[0]));

    /* "mpi4py/MPI/Datatype.pyx":573
 *             s1 =        1; e1 =   i[0]
 *             s2 =   i[0]+1; e2 = 2*i[0]
 *             s3 = 2*i[0]+1; e3 = 3*i[0]             # <<<<<<<<<<<<<<
 *             return (oldtype, ('SUBARRAY'),
 *                     {('sizes')    : [i[k] for k from s1 <= k <= e1],
 */
    __pyx_v_s3 = ((2 * (__pyx_v_i[0])) + 1);
    __pyx_v_e3 = (3 * (__pyx_v_i[0]));

    /* "mpi4py/MPI/Datatype.pyx":574
 *             s2 =   i[0]+1; e2 = 2*i[0]
 *             s3 = 2*i[0]+1; e3 = 3*i[0]
 *             return (oldtype, ('SUBARRAY'),             # <<<<<<<<<<<<<<
 *                     {('sizes')    : [i[k] for k from s1 <= k <= e1],
 *                      ('subsizes') : [i[k] for k from s2 <= k <= e2],
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":575
 *             s3 = 2*i[0]+1; e3 = 3*i[0]
 *             return (oldtype, ('SUBARRAY'),
 *                     {('sizes')    : [i[k] for k from s1 <= k <= e1],             # <<<<<<<<<<<<<<
 *                      ('subsizes') : [i[k] for k from s2 <= k <= e2],
 *                      ('starts')   : [i[k] for k from s3 <= k <= e3],
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 575, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_e1;
    for (__pyx_v_k = __pyx_v_s1; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 575, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 575, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_sizes, __pyx_t_3) < 0) __PYX_ERR(21, 575, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":576
 *             return (oldtype, ('SUBARRAY'),
 *                     {('sizes')    : [i[k] for k from s1 <= k <= e1],
 *                      ('subsizes') : [i[k] for k from s2 <= k <= e2],             # <<<<<<<<<<<<<<
 *                      ('starts')   : [i[k] for k from s3 <= k <= e3],
 *                      ('order')    : i[3*i[0]+1]})
 */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 576, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_subsizes, __pyx_t_3) < 0) __PYX_ERR(21, 575, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":577
 *                     {('sizes')    : [i[k] for k from s1 <= k <= e1],
 *                      ('subsizes') : [i[k] for k from s2 <= k <= e2],
 *                      ('starts')   : [i[k] for k from s3 <= k <= e3],             # <<<<<<<<<<<<<<
 *                      ('order')    : i[3*i[0]+1]})
 *         elif combiner == MPI_COMBINER_DARRAY:
 */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_v_e3;
    for (__pyx_v_k = __pyx_v_s3; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 577, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 577, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_starts, __pyx_t_3) < 0) __PYX_ERR(21, 575, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":578
 *                      ('subsizes') : [i[k] for k from s2 <= k <= e2],
 *                      ('starts')   : [i[k] for k from s3 <= k <= e3],
 *                      ('order')    : i[3*i[0]+1]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_DARRAY:
 *             s1 =        3; e1 =   i[2]+2
 */
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[((3 * (__pyx_v_i[0])) + 1)])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 578, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_order, __pyx_t_3) < 0) __PYX_ERR(21, 575, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":574
 *             s2 =   i[0]+1; e2 = 2*i[0]
 *             s3 = 2*i[0]+1; e3 = 3*i[0]
 *             return (oldtype, ('SUBARRAY'),             # <<<<<<<<<<<<<<
 *                     {('sizes')    : [i[k] for k from s1 <= k <= e1],
 *                      ('subsizes') : [i[k] for k from s2 <= k <= e2],
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_SUBARRAY);
    __Pyx_GIVEREF(__pyx_n_s_SUBARRAY);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_SUBARRAY);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":570
 *                      ('displacements') : [a[k] for k from s2 <= k <= e2],
 *                      ('datatypes')     : oldtype})
 *         elif combiner == MPI_COMBINER_SUBARRAY:             # <<<<<<<<<<<<<<
 *             s1 =        1; e1 =   i[0]
 *             s2 =   i[0]+1; e2 = 2*i[0]
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":579
 *                      ('starts')   : [i[k] for k from s3 <= k <= e3],
 *                      ('order')    : i[3*i[0]+1]})
 *         elif combiner == MPI_COMBINER_DARRAY:             # <<<<<<<<<<<<<<
 *             s1 =        3; e1 =   i[2]+2
 *             s2 =   i[2]+3; e2 = 2*i[2]+2
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_DARRAY) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":580
 *                      ('order')    : i[3*i[0]+1]})
 *         elif combiner == MPI_COMBINER_DARRAY:
 *             s1 =        3; e1 =   i[2]+2             # <<<<<<<<<<<<<<
 *             s2 =   i[2]+3; e2 = 2*i[2]+2
 *             s3 = 2*i[2]+3; e3 = 3*i[2]+2
 */
    __pyx_v_s1 = 3;
    __pyx_v_e1 = ((__pyx_v_i[2]) + 2);

    /* "mpi4py/MPI/Datatype.pyx":581
 *         elif combiner == MPI_COMBINER_DARRAY:
 *             s1 =        3; e1 =   i[2]+2
 *             s2 =   i[2]+3; e2 = 2*i[2]+2             # <<<<<<<<<<<<<<
 *             s3 = 2*i[2]+3; e3 = 3*i[2]+2
 *             s4 = 3*i[2]+3; e4 = 4*i[2]+2
 */
    __pyx_v_s2 = ((__pyx_v_i[2]) + 3);
    __pyx_v_e2 = ((2 * (__pyx_v_i[2])) + 2);

    /* "mpi4py/MPI/Datatype.pyx":582
 *             s1 =        3; e1 =   i[2]+2
 *             s2 =   i[2]+3; e2 = 2*i[2]+2
 *             s3 = 2*i[2]+3; e3 = 3*i[2]+2             # <<<<<<<<<<<<<<
 *             s4 = 3*i[2]+3; e4 = 4*i[2]+2
 *             return (oldtype, ('DARRAY'),
 */
    __pyx_v_s3 = ((2 * (__pyx_v_i[2])) + 3);
    __pyx_v_e3 = ((3 * (__pyx_v_i[2])) + 2);

    /* "mpi4py/MPI/Datatype.pyx":583
 *             s2 =   i[2]+3; e2 = 2*i[2]+2
 *             s3 = 2*i[2]+3; e3 = 3*i[2]+2
 *             s4 = 3*i[2]+3; e4 = 4*i[2]+2             # <<<<<<<<<<<<<<
 *             return (oldtype, ('DARRAY'),
 *                     {('size')     : i[0],
 */
    __pyx_v_s4 = ((3 * (__pyx_v_i[2])) + 3);
    __pyx_v_e4 = ((4 * (__pyx_v_i[2])) + 2);

    /* "mpi4py/MPI/Datatype.pyx":584
 *             s3 = 2*i[2]+3; e3 = 3*i[2]+2
 *             s4 = 3*i[2]+3; e4 = 4*i[2]+2
 *             return (oldtype, ('DARRAY'),             # <<<<<<<<<<<<<<
 *                     {('size')     : i[0],
 *                      ('rank')     : i[1],
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":585
 *             s4 = 3*i[2]+3; e4 = 4*i[2]+2
 *             return (oldtype, ('DARRAY'),
 *                     {('size')     : i[0],             # <<<<<<<<<<<<<<
 *                      ('rank')     : i[1],
 *                      ('gsizes')   : [i[k] for k from s1 <= k <= e1],
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_size, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":586
 *             return (oldtype, ('DARRAY'),
 *                     {('size')     : i[0],
 *                      ('rank')     : i[1],             # <<<<<<<<<<<<<<
 *                      ('gsizes')   : [i[k] for k from s1 <= k <= e1],
 *                      ('distribs') : [i[k] for k from s2 <= k <= e2],
 */
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_rank, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":587
 *                     {('size')     : i[0],
 *                      ('rank')     : i[1],
 *                      ('gsizes')   : [i[k] for k from s1 <= k <= e1],             # <<<<<<<<<<<<<<
 *                      ('distribs') : [i[k] for k from s2 <= k <= e2],
 *                      ('dargs')    : [i[k] for k from s3 <= k <= e3],
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 587, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e1;
    for (__pyx_v_k = __pyx_v_s1; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 587, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 587, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_gsizes, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":588
 *                      ('rank')     : i[1],
 *                      ('gsizes')   : [i[k] for k from s1 <= k <= e1],
 *                      ('distribs') : [i[k] for k from s2 <= k <= e2],             # <<<<<<<<<<<<<<
 *                      ('dargs')    : [i[k] for k from s3 <= k <= e3],
 *                      ('psizes')   : [i[k] for k from s4 <= k <= e4],
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e2;
    for (__pyx_v_k = __pyx_v_s2; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 588, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 588, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_distribs, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":589
 *                      ('gsizes')   : [i[k] for k from s1 <= k <= e1],
 *                      ('distribs') : [i[k] for k from s2 <= k <= e2],
 *                      ('dargs')    : [i[k] for k from s3 <= k <= e3],             # <<<<<<<<<<<<<<
 *                      ('psizes')   : [i[k] for k from s4 <= k <= e4],
 *                      ('order')    : i[4*i[2]+3]})
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e3;
    for (__pyx_v_k = __pyx_v_s3; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 589, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 589, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dargs, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":590
 *                      ('distribs') : [i[k] for k from s2 <= k <= e2],
 *                      ('dargs')    : [i[k] for k from s3 <= k <= e3],
 *                      ('psizes')   : [i[k] for k from s4 <= k <= e4],             # <<<<<<<<<<<<<<
 *                      ('order')    : i[4*i[2]+3]})
 *         elif combiner == MPI_COMBINER_RESIZED:
 */
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 590, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_v_e4;
    for (__pyx_v_k = __pyx_v_s4; __pyx_v_k <= __pyx_t_1; __pyx_v_k++) {
      __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_i[__pyx_v_k])); if (unlikely(!__pyx_t_6)) __PYX_ERR(21, 590, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_6))) __PYX_ERR(21, 590, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_psizes, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":591
 *                      ('dargs')    : [i[k] for k from s3 <= k <= e3],
 *                      ('psizes')   : [i[k] for k from s4 <= k <= e4],
 *                      ('order')    : i[4*i[2]+3]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_RESIZED:
 *             return (oldtype, ('RESIZED'),
 */
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[((4 * (__pyx_v_i[2])) + 3)])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 591, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_order, __pyx_t_4) < 0) __PYX_ERR(21, 585, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":584
 *             s3 = 2*i[2]+3; e3 = 3*i[2]+2
 *             s4 = 3*i[2]+3; e4 = 4*i[2]+2
 *             return (oldtype, ('DARRAY'),             # <<<<<<<<<<<<<<
 *                     {('size')     : i[0],
 *                      ('rank')     : i[1],
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 584, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_DARRAY);
    __Pyx_GIVEREF(__pyx_n_s_DARRAY);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_DARRAY);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":579
 *                      ('starts')   : [i[k] for k from s3 <= k <= e3],
 *                      ('order')    : i[3*i[0]+1]})
 *         elif combiner == MPI_COMBINER_DARRAY:             # <<<<<<<<<<<<<<
 *             s1 =        3; e1 =   i[2]+2
 *             s2 =   i[2]+3; e2 = 2*i[2]+2
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":592
 *                      ('psizes')   : [i[k] for k from s4 <= k <= e4],
 *                      ('order')    : i[4*i[2]+3]})
 *         elif combiner == MPI_COMBINER_RESIZED:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('RESIZED'),
 *                     {('lb')     : a[0],
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_RESIZED) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":593
 *                      ('order')    : i[4*i[2]+3]})
 *         elif combiner == MPI_COMBINER_RESIZED:
 *             return (oldtype, ('RESIZED'),             # <<<<<<<<<<<<<<
 *                     {('lb')     : a[0],
 *                      ('extent') : a[1]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":594
 *         elif combiner == MPI_COMBINER_RESIZED:
 *             return (oldtype, ('RESIZED'),
 *                     {('lb')     : a[0],             # <<<<<<<<<<<<<<
 *                      ('extent') : a[1]})
 *         elif combiner == MPI_COMBINER_F90_INTEGER:
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_lb, __pyx_t_3) < 0) __PYX_ERR(21, 594, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":595
 *             return (oldtype, ('RESIZED'),
 *                     {('lb')     : a[0],
 *                      ('extent') : a[1]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_F90_INTEGER:
 *             return (Datatype, ('F90_INTEGER'),
 */
    __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint((__pyx_v_a[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_extent, __pyx_t_3) < 0) __PYX_ERR(21, 594, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":593
 *                      ('order')    : i[4*i[2]+3]})
 *         elif combiner == MPI_COMBINER_RESIZED:
 *             return (oldtype, ('RESIZED'),             # <<<<<<<<<<<<<<
 *                     {('lb')     : a[0],
 *                      ('extent') : a[1]})
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_oldtype);
    __Pyx_GIVEREF(__pyx_v_oldtype);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_oldtype);
    __Pyx_INCREF(__pyx_n_s_RESIZED);
    __Pyx_GIVEREF(__pyx_n_s_RESIZED);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_RESIZED);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":592
 *                      ('psizes')   : [i[k] for k from s4 <= k <= e4],
 *                      ('order')    : i[4*i[2]+3]})
 *         elif combiner == MPI_COMBINER_RESIZED:             # <<<<<<<<<<<<<<
 *             return (oldtype, ('RESIZED'),
 *                     {('lb')     : a[0],
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":596
 *                     {('lb')     : a[0],
 *                      ('extent') : a[1]})
 *         elif combiner == MPI_COMBINER_F90_INTEGER:             # <<<<<<<<<<<<<<
 *             return (Datatype, ('F90_INTEGER'),
 *                     {('r') : i[0]})
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_F90_INTEGER) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":597
 *                      ('extent') : a[1]})
 *         elif combiner == MPI_COMBINER_F90_INTEGER:
 *             return (Datatype, ('F90_INTEGER'),             # <<<<<<<<<<<<<<
 *                     {('r') : i[0]})
 *         elif combiner == MPI_COMBINER_F90_REAL:
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":598
 *         elif combiner == MPI_COMBINER_F90_INTEGER:
 *             return (Datatype, ('F90_INTEGER'),
 *                     {('r') : i[0]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_F90_REAL:
 *             return (Datatype, ('F90_REAL'),
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 598, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 598, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_r, __pyx_t_4) < 0) __PYX_ERR(21, 598, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":597
 *                      ('extent') : a[1]})
 *         elif combiner == MPI_COMBINER_F90_INTEGER:
 *             return (Datatype, ('F90_INTEGER'),             # <<<<<<<<<<<<<<
 *                     {('r') : i[0]})
 *         elif combiner == MPI_COMBINER_F90_REAL:
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 597, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_INCREF(__pyx_n_s_F90_INTEGER);
    __Pyx_GIVEREF(__pyx_n_s_F90_INTEGER);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_F90_INTEGER);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":596
 *                     {('lb')     : a[0],
 *                      ('extent') : a[1]})
 *         elif combiner == MPI_COMBINER_F90_INTEGER:             # <<<<<<<<<<<<<<
 *             return (Datatype, ('F90_INTEGER'),
 *                     {('r') : i[0]})
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":599
 *             return (Datatype, ('F90_INTEGER'),
 *                     {('r') : i[0]})
 *         elif combiner == MPI_COMBINER_F90_REAL:             # <<<<<<<<<<<<<<
 *             return (Datatype, ('F90_REAL'),
 *                     {('p') : i[0],
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_F90_REAL) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":600
 *                     {('r') : i[0]})
 *         elif combiner == MPI_COMBINER_F90_REAL:
 *             return (Datatype, ('F90_REAL'),             # <<<<<<<<<<<<<<
 *                     {('p') : i[0],
 *                      ('r') : i[1]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":601
 *         elif combiner == MPI_COMBINER_F90_REAL:
 *             return (Datatype, ('F90_REAL'),
 *                     {('p') : i[0],             # <<<<<<<<<<<<<<
 *                      ('r') : i[1]})
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_p, __pyx_t_3) < 0) __PYX_ERR(21, 601, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":602
 *             return (Datatype, ('F90_REAL'),
 *                     {('p') : i[0],
 *                      ('r') : i[1]})             # <<<<<<<<<<<<<<
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:
 *             return (Datatype, ('F90_COMPLEX'),
 */
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 602, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_r, __pyx_t_3) < 0) __PYX_ERR(21, 601, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":600
 *                     {('r') : i[0]})
 *         elif combiner == MPI_COMBINER_F90_REAL:
 *             return (Datatype, ('F90_REAL'),             # <<<<<<<<<<<<<<
 *                     {('p') : i[0],
 *                      ('r') : i[1]})
 */
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 600, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_INCREF(__pyx_n_s_F90_REAL);
    __Pyx_GIVEREF(__pyx_n_s_F90_REAL);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_F90_REAL);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":599
 *             return (Datatype, ('F90_INTEGER'),
 *                     {('r') : i[0]})
 *         elif combiner == MPI_COMBINER_F90_REAL:             # <<<<<<<<<<<<<<
 *             return (Datatype, ('F90_REAL'),
 *                     {('p') : i[0],
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":603
 *                     {('p') : i[0],
 *                      ('r') : i[1]})
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:             # <<<<<<<<<<<<<<
 *             return (Datatype, ('F90_COMPLEX'),
 *                     {('p') : i[0],
 */
  __pyx_t_2 = ((__pyx_v_combiner == MPI_COMBINER_F90_COMPLEX) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":604
 *                      ('r') : i[1]})
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:
 *             return (Datatype, ('F90_COMPLEX'),             # <<<<<<<<<<<<<<
 *                     {('p') : i[0],
 *                      ('r') : i[1]})
 */
    __Pyx_XDECREF(__pyx_r);

    /* "mpi4py/MPI/Datatype.pyx":605
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:
 *             return (Datatype, ('F90_COMPLEX'),
 *                     {('p') : i[0],             # <<<<<<<<<<<<<<
 *                      ('r') : i[1]})
 *         else:
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_p, __pyx_t_4) < 0) __PYX_ERR(21, 605, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":606
 *             return (Datatype, ('F90_COMPLEX'),
 *                     {('p') : i[0],
 *                      ('r') : i[1]})             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_i[1])); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 606, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_r, __pyx_t_4) < 0) __PYX_ERR(21, 605, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Datatype.pyx":604
 *                      ('r') : i[1]})
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:
 *             return (Datatype, ('F90_COMPLEX'),             # <<<<<<<<<<<<<<
 *                     {('p') : i[0],
 *                      ('r') : i[1]})
 */
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 604, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_GIVEREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype));
    __Pyx_INCREF(__pyx_n_s_F90_COMPLEX);
    __Pyx_GIVEREF(__pyx_n_s_F90_COMPLEX);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_n_s_F90_COMPLEX);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Datatype.pyx":603
 *                     {('p') : i[0],
 *                      ('r') : i[1]})
 *         elif combiner == MPI_COMBINER_F90_COMPLEX:             # <<<<<<<<<<<<<<
 *             return (Datatype, ('F90_COMPLEX'),
 *                     {('p') : i[0],
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":608
 *                      ('r') : i[1]})
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     property combiner:
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":499
 *             return self.Get_contents()
 * 
 *     def decode(self):             # <<<<<<<<<<<<<<
 *         """
 *         Convenience method for decoding a datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.decode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_tmp3);
  __Pyx_XDECREF(__pyx_v_oldtype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":612
 *     property combiner:
 *         """datatype combiner"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_envelope()[3]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8combiner_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8combiner_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_8combiner___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8combiner___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":613
 *         """datatype combiner"""
 *         def __get__(self):
 *             return self.Get_envelope()[3]             # <<<<<<<<<<<<<<
 * 
 *     property is_named:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_envelope); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":612
 *     property combiner:
 *         """datatype combiner"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_envelope()[3]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.combiner.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":617
 *     property is_named:
 *         """is a named datatype"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int combiner = self.Get_envelope()[3]
 *             return combiner == MPI_COMBINER_NAMED
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8is_named_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_8is_named_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_8is_named___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_8is_named___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  int __pyx_v_combiner;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":618
 *         """is a named datatype"""
 *         def __get__(self):
 *             cdef int combiner = self.Get_envelope()[3]             # <<<<<<<<<<<<<<
 *             return combiner == MPI_COMBINER_NAMED
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_envelope); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 618, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 618, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_combiner = __pyx_t_4;

  /* "mpi4py/MPI/Datatype.pyx":619
 *         def __get__(self):
 *             cdef int combiner = self.Get_envelope()[3]
 *             return combiner == MPI_COMBINER_NAMED             # <<<<<<<<<<<<<<
 * 
 *     property is_predefined:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_combiner == MPI_COMBINER_NAMED)); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":617
 *     property is_named:
 *         """is a named datatype"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int combiner = self.Get_envelope()[3]
 *             return combiner == MPI_COMBINER_NAMED
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.is_named.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":623
 *     property is_predefined:
 *         """is a predefined datatype"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             if self.ob_mpi == MPI_DATATYPE_NULL: return True
 *             cdef int combiner = self.Get_envelope()[3]
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_13is_predefined_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_13is_predefined_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_13is_predefined___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_13is_predefined___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  int __pyx_v_combiner;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":624
 *         """is a predefined datatype"""
 *         def __get__(self):
 *             if self.ob_mpi == MPI_DATATYPE_NULL: return True             # <<<<<<<<<<<<<<
 *             cdef int combiner = self.Get_envelope()[3]
 *             return (combiner == MPI_COMBINER_NAMED or
 */
  __pyx_t_1 = ((__pyx_v_self->ob_mpi == MPI_DATATYPE_NULL) != 0);
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":625
 *         def __get__(self):
 *             if self.ob_mpi == MPI_DATATYPE_NULL: return True
 *             cdef int combiner = self.Get_envelope()[3]             # <<<<<<<<<<<<<<
 *             return (combiner == MPI_COMBINER_NAMED or
 *                     combiner == MPI_COMBINER_F90_INTEGER or
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_envelope); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 625, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_combiner = __pyx_t_5;

  /* "mpi4py/MPI/Datatype.pyx":626
 *             if self.ob_mpi == MPI_DATATYPE_NULL: return True
 *             cdef int combiner = self.Get_envelope()[3]
 *             return (combiner == MPI_COMBINER_NAMED or             # <<<<<<<<<<<<<<
 *                     combiner == MPI_COMBINER_F90_INTEGER or
 *                     combiner == MPI_COMBINER_F90_REAL or
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_NAMED);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/Datatype.pyx":627
 *             cdef int combiner = self.Get_envelope()[3]
 *             return (combiner == MPI_COMBINER_NAMED or
 *                     combiner == MPI_COMBINER_F90_INTEGER or             # <<<<<<<<<<<<<<
 *                     combiner == MPI_COMBINER_F90_REAL or
 *                     combiner == MPI_COMBINER_F90_COMPLEX)
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_F90_INTEGER);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 627, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/Datatype.pyx":628
 *             return (combiner == MPI_COMBINER_NAMED or
 *                     combiner == MPI_COMBINER_F90_INTEGER or
 *                     combiner == MPI_COMBINER_F90_REAL or             # <<<<<<<<<<<<<<
 *                     combiner == MPI_COMBINER_F90_COMPLEX)
 * 
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_F90_REAL);
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L4_bool_binop_done;
  }

  /* "mpi4py/MPI/Datatype.pyx":629
 *                     combiner == MPI_COMBINER_F90_INTEGER or
 *                     combiner == MPI_COMBINER_F90_REAL or
 *                     combiner == MPI_COMBINER_F90_COMPLEX)             # <<<<<<<<<<<<<<
 * 
 *     # Pack and Unpack
 */
  __pyx_t_1 = (__pyx_v_combiner == MPI_COMBINER_F90_COMPLEX);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_L4_bool_binop_done:;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":623
 *     property is_predefined:
 *         """is a predefined datatype"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             if self.ob_mpi == MPI_DATATYPE_NULL: return True
 *             cdef int combiner = self.Get_envelope()[3]
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.is_predefined.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":634
 *     # ---------------
 * 
 *     def Pack(self, inbuf, outbuf, int position, Comm comm):             # <<<<<<<<<<<<<<
 *         """
 *         Pack into contiguous memory according to datatype.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_57Pack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_56Pack[] = "Datatype.Pack(self, inbuf, outbuf, int position, Comm comm)\n\n        Pack into contiguous memory according to datatype.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_57Pack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_inbuf = 0;
  PyObject *__pyx_v_outbuf = 0;
  int __pyx_v_position;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Pack (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inbuf,&__pyx_n_s_outbuf,&__pyx_n_s_position,&__pyx_n_s_comm,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_outbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack", 1, 4, 4, 1); __PYX_ERR(21, 634, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_position)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack", 1, 4, 4, 2); __PYX_ERR(21, 634, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack", 1, 4, 4, 3); __PYX_ERR(21, 634, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Pack") < 0)) __PYX_ERR(21, 634, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_inbuf = values[0];
    __pyx_v_outbuf = values[1];
    __pyx_v_position = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_position == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 634, __pyx_L3_error)
    __pyx_v_comm = ((struct PyMPICommObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Pack", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 634, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(21, 634, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_56Pack(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_inbuf, __pyx_v_outbuf, __pyx_v_position, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_56Pack(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_inbuf, PyObject *__pyx_v_outbuf, int __pyx_v_position, struct PyMPICommObject *__pyx_v_comm) {
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  void *__pyx_v_ibptr;
  void *__pyx_v_obptr;
  MPI_Aint __pyx_v_iblen;
  MPI_Aint __pyx_v_oblen;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_icount;
  int __pyx_v_osize;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Pack", 0);

  /* "mpi4py/MPI/Datatype.pyx":638
 *         Pack into contiguous memory according to datatype.
 *         """
 *         cdef MPI_Aint lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":639
 *         """
 *         cdef MPI_Aint lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 639, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":641
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 */
  __pyx_v_ibptr = NULL;
  __pyx_v_obptr = NULL;

  /* "mpi4py/MPI/Datatype.pyx":642
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0             # <<<<<<<<<<<<<<
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 */
  __pyx_v_iblen = 0;
  __pyx_v_oblen = 0;

  /* "mpi4py/MPI/Datatype.pyx":643
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int icount = downcast(iblen//extent)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_inbuf, (&__pyx_v_ibptr), (&__pyx_v_iblen))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":644
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)             # <<<<<<<<<<<<<<
 *         cdef int icount = downcast(iblen//extent)
 *         cdef int osize  = clipcount(oblen)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_outbuf, (&__pyx_v_obptr), (&__pyx_v_oblen))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":645
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int icount = downcast(iblen//extent)             # <<<<<<<<<<<<<<
 *         cdef int osize  = clipcount(oblen)
 *         #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_downcast((__pyx_v_iblen / __pyx_v_extent)); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(21, 645, __pyx_L1_error)
  __pyx_v_icount = __pyx_t_1;

  /* "mpi4py/MPI/Datatype.pyx":646
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int icount = downcast(iblen//extent)
 *         cdef int osize  = clipcount(oblen)             # <<<<<<<<<<<<<<
 *         #
 *         CHKERR( MPI_Pack(ibptr, icount, self.ob_mpi, obptr, osize,
 */
  __pyx_v_osize = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_oblen);

  /* "mpi4py/MPI/Datatype.pyx":648
 *         cdef int osize  = clipcount(oblen)
 *         #
 *         CHKERR( MPI_Pack(ibptr, icount, self.ob_mpi, obptr, osize,             # <<<<<<<<<<<<<<
 *                          &position, comm.ob_mpi) )
 *         return position
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Pack(__pyx_v_ibptr, __pyx_v_icount, __pyx_v_self->ob_mpi, __pyx_v_obptr, __pyx_v_osize, (&__pyx_v_position), __pyx_v_comm->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 648, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":650
 *         CHKERR( MPI_Pack(ibptr, icount, self.ob_mpi, obptr, osize,
 *                          &position, comm.ob_mpi) )
 *         return position             # <<<<<<<<<<<<<<
 * 
 *     def Unpack(self, inbuf, int position, outbuf, Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_position); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":634
 *     # ---------------
 * 
 *     def Pack(self, inbuf, outbuf, int position, Comm comm):             # <<<<<<<<<<<<<<
 *         """
 *         Pack into contiguous memory according to datatype.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":652
 *         return position
 * 
 *     def Unpack(self, inbuf, int position, outbuf, Comm comm):             # <<<<<<<<<<<<<<
 *         """
 *         Unpack from contiguous memory according to datatype.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_59Unpack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_58Unpack[] = "Datatype.Unpack(self, inbuf, int position, outbuf, Comm comm)\n\n        Unpack from contiguous memory according to datatype.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_59Unpack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_inbuf = 0;
  int __pyx_v_position;
  PyObject *__pyx_v_outbuf = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Unpack (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inbuf,&__pyx_n_s_position,&__pyx_n_s_outbuf,&__pyx_n_s_comm,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_position)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpack", 1, 4, 4, 1); __PYX_ERR(21, 652, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_outbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpack", 1, 4, 4, 2); __PYX_ERR(21, 652, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpack", 1, 4, 4, 3); __PYX_ERR(21, 652, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Unpack") < 0)) __PYX_ERR(21, 652, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_inbuf = values[0];
    __pyx_v_position = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_position == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 652, __pyx_L3_error)
    __pyx_v_outbuf = values[2];
    __pyx_v_comm = ((struct PyMPICommObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Unpack", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 652, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Unpack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(21, 652, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_58Unpack(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_inbuf, __pyx_v_position, __pyx_v_outbuf, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_58Unpack(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_inbuf, int __pyx_v_position, PyObject *__pyx_v_outbuf, struct PyMPICommObject *__pyx_v_comm) {
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  void *__pyx_v_ibptr;
  void *__pyx_v_obptr;
  MPI_Aint __pyx_v_iblen;
  MPI_Aint __pyx_v_oblen;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_isize;
  int __pyx_v_ocount;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Unpack", 0);

  /* "mpi4py/MPI/Datatype.pyx":656
 *         Unpack from contiguous memory according to datatype.
 *         """
 *         cdef MPI_Aint lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":657
 *         """
 *         cdef MPI_Aint lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 657, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":659
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 */
  __pyx_v_ibptr = NULL;
  __pyx_v_obptr = NULL;

  /* "mpi4py/MPI/Datatype.pyx":660
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0             # <<<<<<<<<<<<<<
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 */
  __pyx_v_iblen = 0;
  __pyx_v_oblen = 0;

  /* "mpi4py/MPI/Datatype.pyx":661
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int isize  = clipcount(iblen)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_inbuf, (&__pyx_v_ibptr), (&__pyx_v_iblen))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":662
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)             # <<<<<<<<<<<<<<
 *         cdef int isize  = clipcount(iblen)
 *         cdef int ocount = downcast(oblen//extent)
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_outbuf, (&__pyx_v_obptr), (&__pyx_v_oblen))); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":663
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int isize  = clipcount(iblen)             # <<<<<<<<<<<<<<
 *         cdef int ocount = downcast(oblen//extent)
 *         #
 */
  __pyx_v_isize = __pyx_f_6mpi4py_3MPI_clipcount(__pyx_v_iblen);

  /* "mpi4py/MPI/Datatype.pyx":664
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int isize  = clipcount(iblen)
 *         cdef int ocount = downcast(oblen//extent)             # <<<<<<<<<<<<<<
 *         #
 *         CHKERR( MPI_Unpack(ibptr, isize, &position, obptr, ocount,
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_downcast((__pyx_v_oblen / __pyx_v_extent)); if (unlikely(__pyx_t_1 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(21, 664, __pyx_L1_error)
  __pyx_v_ocount = __pyx_t_1;

  /* "mpi4py/MPI/Datatype.pyx":666
 *         cdef int ocount = downcast(oblen//extent)
 *         #
 *         CHKERR( MPI_Unpack(ibptr, isize, &position, obptr, ocount,             # <<<<<<<<<<<<<<
 *                            self.ob_mpi, comm.ob_mpi) )
 *         return position
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Unpack(__pyx_v_ibptr, __pyx_v_isize, (&__pyx_v_position), __pyx_v_obptr, __pyx_v_ocount, __pyx_v_self->ob_mpi, __pyx_v_comm->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 666, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":668
 *         CHKERR( MPI_Unpack(ibptr, isize, &position, obptr, ocount,
 *                            self.ob_mpi, comm.ob_mpi) )
 *         return position             # <<<<<<<<<<<<<<
 * 
 *     def Pack_size(self, int count, Comm comm):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_position); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 668, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":652
 *         return position
 * 
 *     def Unpack(self, inbuf, int position, outbuf, Comm comm):             # <<<<<<<<<<<<<<
 *         """
 *         Unpack from contiguous memory according to datatype.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Unpack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":670
 *         return position
 * 
 *     def Pack_size(self, int count, Comm comm):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the upper bound on the amount of space (in bytes)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_61Pack_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_60Pack_size[] = "Datatype.Pack_size(self, int count, Comm comm)\n\n        Returns the upper bound on the amount of space (in bytes)\n        needed to pack a message according to datatype.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_61Pack_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_count;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Pack_size (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_count,&__pyx_n_s_comm,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack_size", 1, 2, 2, 1); __PYX_ERR(21, 670, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Pack_size") < 0)) __PYX_ERR(21, 670, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_count = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 670, __pyx_L3_error)
    __pyx_v_comm = ((struct PyMPICommObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Pack_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 670, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(21, 670, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_60Pack_size(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_count, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_60Pack_size(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_count, struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Pack_size", 0);

  /* "mpi4py/MPI/Datatype.pyx":675
 *         needed to pack a message according to datatype.
 *         """
 *         cdef int size = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Pack_size(count, self.ob_mpi,
 *                               comm.ob_mpi, &size) )
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Datatype.pyx":676
 *         """
 *         cdef int size = 0
 *         CHKERR( MPI_Pack_size(count, self.ob_mpi,             # <<<<<<<<<<<<<<
 *                               comm.ob_mpi, &size) )
 *         return size
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Pack_size(__pyx_v_count, __pyx_v_self->ob_mpi, __pyx_v_comm->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 676, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":678
 *         CHKERR( MPI_Pack_size(count, self.ob_mpi,
 *                               comm.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     # Canonical Pack and Unpack
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 678, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":670
 *         return position
 * 
 *     def Pack_size(self, int count, Comm comm):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the upper bound on the amount of space (in bytes)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":683
 *     # -------------------------
 * 
 *     def Pack_external(self, datarep, inbuf, outbuf, Aint position):             # <<<<<<<<<<<<<<
 *         """
 *         Pack into contiguous memory according to datatype,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_63Pack_external(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_62Pack_external[] = "Datatype.Pack_external(self, datarep, inbuf, outbuf, Aint position)\n\n        Pack into contiguous memory according to datatype,\n        using a portable data representation (**external32**).\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_63Pack_external(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_datarep = 0;
  PyObject *__pyx_v_inbuf = 0;
  PyObject *__pyx_v_outbuf = 0;
  MPI_Aint __pyx_v_position;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Pack_external (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datarep,&__pyx_n_s_inbuf,&__pyx_n_s_outbuf,&__pyx_n_s_position,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datarep)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack_external", 1, 4, 4, 1); __PYX_ERR(21, 683, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_outbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack_external", 1, 4, 4, 2); __PYX_ERR(21, 683, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_position)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack_external", 1, 4, 4, 3); __PYX_ERR(21, 683, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Pack_external") < 0)) __PYX_ERR(21, 683, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_datarep = values[0];
    __pyx_v_inbuf = values[1];
    __pyx_v_outbuf = values[2];
    __pyx_v_position = __Pyx_PyInt_As_MPI_Aint(values[3]); if (unlikely((__pyx_v_position == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 683, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Pack_external", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 683, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack_external", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_62Pack_external(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_datarep, __pyx_v_inbuf, __pyx_v_outbuf, __pyx_v_position);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_62Pack_external(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_datarep, PyObject *__pyx_v_inbuf, PyObject *__pyx_v_outbuf, MPI_Aint __pyx_v_position) {
  char *__pyx_v_cdatarep;
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  void *__pyx_v_ibptr;
  void *__pyx_v_obptr;
  MPI_Aint __pyx_v_iblen;
  MPI_Aint __pyx_v_oblen;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_icount;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Pack_external", 0);
  __Pyx_INCREF(__pyx_v_datarep);

  /* "mpi4py/MPI/Datatype.pyx":688
 *         using a portable data representation (**external32**).
 *         """
 *         cdef char *cdatarep = NULL             # <<<<<<<<<<<<<<
 *         datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Aint lb = 0, extent = 0
 */
  __pyx_v_cdatarep = NULL;

  /* "mpi4py/MPI/Datatype.pyx":689
 *         """
 *         cdef char *cdatarep = NULL
 *         datarep = asmpistr(datarep, &cdatarep)             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_datarep, (&__pyx_v_cdatarep)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_datarep, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":690
 *         cdef char *cdatarep = NULL
 *         datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Aint lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":691
 *         datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Aint lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 691, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":693
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 */
  __pyx_v_ibptr = NULL;
  __pyx_v_obptr = NULL;

  /* "mpi4py/MPI/Datatype.pyx":694
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0             # <<<<<<<<<<<<<<
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 */
  __pyx_v_iblen = 0;
  __pyx_v_oblen = 0;

  /* "mpi4py/MPI/Datatype.pyx":695
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int icount = downcast(iblen//extent)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_inbuf, (&__pyx_v_ibptr), (&__pyx_v_iblen))); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp1 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":696
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)             # <<<<<<<<<<<<<<
 *         cdef int icount = downcast(iblen//extent)
 *         #
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_outbuf, (&__pyx_v_obptr), (&__pyx_v_oblen))); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp2 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":697
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int icount = downcast(iblen//extent)             # <<<<<<<<<<<<<<
 *         #
 *         CHKERR( MPI_Pack_external(cdatarep, ibptr, icount,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_downcast((__pyx_v_iblen / __pyx_v_extent)); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(21, 697, __pyx_L1_error)
  __pyx_v_icount = __pyx_t_2;

  /* "mpi4py/MPI/Datatype.pyx":699
 *         cdef int icount = downcast(iblen//extent)
 *         #
 *         CHKERR( MPI_Pack_external(cdatarep, ibptr, icount,             # <<<<<<<<<<<<<<
 *                                   self.ob_mpi,
 *                                   obptr, oblen, &position) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Pack_external(__pyx_v_cdatarep, __pyx_v_ibptr, __pyx_v_icount, __pyx_v_self->ob_mpi, __pyx_v_obptr, __pyx_v_oblen, (&__pyx_v_position))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 699, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":702
 *                                   self.ob_mpi,
 *                                   obptr, oblen, &position) )
 *         return position             # <<<<<<<<<<<<<<
 * 
 *     def Unpack_external(self, datarep, inbuf, Aint position, outbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":683
 *     # -------------------------
 * 
 *     def Pack_external(self, datarep, inbuf, outbuf, Aint position):             # <<<<<<<<<<<<<<
 *         """
 *         Pack into contiguous memory according to datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack_external", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_datarep);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":704
 *         return position
 * 
 *     def Unpack_external(self, datarep, inbuf, Aint position, outbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Unpack from contiguous memory according to datatype,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_65Unpack_external(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_64Unpack_external[] = "Datatype.Unpack_external(self, datarep, inbuf, Aint position, outbuf)\n\n        Unpack from contiguous memory according to datatype,\n        using a portable data representation (**external32**).\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_65Unpack_external(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_datarep = 0;
  PyObject *__pyx_v_inbuf = 0;
  MPI_Aint __pyx_v_position;
  PyObject *__pyx_v_outbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Unpack_external (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datarep,&__pyx_n_s_inbuf,&__pyx_n_s_position,&__pyx_n_s_outbuf,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datarep)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpack_external", 1, 4, 4, 1); __PYX_ERR(21, 704, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_position)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpack_external", 1, 4, 4, 2); __PYX_ERR(21, 704, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_outbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpack_external", 1, 4, 4, 3); __PYX_ERR(21, 704, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Unpack_external") < 0)) __PYX_ERR(21, 704, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_datarep = values[0];
    __pyx_v_inbuf = values[1];
    __pyx_v_position = __Pyx_PyInt_As_MPI_Aint(values[2]); if (unlikely((__pyx_v_position == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 704, __pyx_L3_error)
    __pyx_v_outbuf = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Unpack_external", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 704, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Unpack_external", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_64Unpack_external(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_datarep, __pyx_v_inbuf, __pyx_v_position, __pyx_v_outbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_64Unpack_external(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_datarep, PyObject *__pyx_v_inbuf, MPI_Aint __pyx_v_position, PyObject *__pyx_v_outbuf) {
  char *__pyx_v_cdatarep;
  MPI_Aint __pyx_v_lb;
  MPI_Aint __pyx_v_extent;
  void *__pyx_v_ibptr;
  void *__pyx_v_obptr;
  MPI_Aint __pyx_v_iblen;
  MPI_Aint __pyx_v_oblen;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_ocount;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Unpack_external", 0);
  __Pyx_INCREF(__pyx_v_datarep);

  /* "mpi4py/MPI/Datatype.pyx":709
 *         using a portable data representation (**external32**).
 *         """
 *         cdef char *cdatarep = NULL             # <<<<<<<<<<<<<<
 *         datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Aint lb = 0, extent = 0
 */
  __pyx_v_cdatarep = NULL;

  /* "mpi4py/MPI/Datatype.pyx":710
 *         """
 *         cdef char *cdatarep = NULL
 *         datarep = asmpistr(datarep, &cdatarep)             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_datarep, (&__pyx_v_cdatarep)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_datarep, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":711
 *         cdef char *cdatarep = NULL
 *         datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Aint lb = 0, extent = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 */
  __pyx_v_lb = 0;
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/Datatype.pyx":712
 *         datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Aint lb = 0, extent = 0
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_extent(__pyx_v_self->ob_mpi, (&__pyx_v_lb), (&__pyx_v_extent))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 712, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":714
 *         CHKERR( MPI_Type_get_extent(self.ob_mpi, &lb, &extent) )
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 */
  __pyx_v_ibptr = NULL;
  __pyx_v_obptr = NULL;

  /* "mpi4py/MPI/Datatype.pyx":715
 *         #
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0             # <<<<<<<<<<<<<<
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 */
  __pyx_v_iblen = 0;
  __pyx_v_oblen = 0;

  /* "mpi4py/MPI/Datatype.pyx":716
 *         cdef void *ibptr = NULL, *obptr = NULL
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int ocount = downcast(oblen//extent)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_inbuf, (&__pyx_v_ibptr), (&__pyx_v_iblen))); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp1 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":717
 *         cdef MPI_Aint iblen = 0, oblen = 0
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)             # <<<<<<<<<<<<<<
 *         cdef int ocount = downcast(oblen//extent)
 *         #
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_outbuf, (&__pyx_v_obptr), (&__pyx_v_oblen))); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp2 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":718
 *         cdef tmp1 = getbuffer_r(inbuf,  &ibptr, &iblen)
 *         cdef tmp2 = getbuffer_w(outbuf, &obptr, &oblen)
 *         cdef int ocount = downcast(oblen//extent)             # <<<<<<<<<<<<<<
 *         #
 *         CHKERR( MPI_Unpack_external(cdatarep, ibptr, iblen, &position,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_downcast((__pyx_v_oblen / __pyx_v_extent)); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(21, 718, __pyx_L1_error)
  __pyx_v_ocount = __pyx_t_2;

  /* "mpi4py/MPI/Datatype.pyx":720
 *         cdef int ocount = downcast(oblen//extent)
 *         #
 *         CHKERR( MPI_Unpack_external(cdatarep, ibptr, iblen, &position,             # <<<<<<<<<<<<<<
 *                                     obptr, ocount, self.ob_mpi) )
 *         return position
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Unpack_external(__pyx_v_cdatarep, __pyx_v_ibptr, __pyx_v_iblen, (&__pyx_v_position), __pyx_v_obptr, __pyx_v_ocount, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 720, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":722
 *         CHKERR( MPI_Unpack_external(cdatarep, ibptr, iblen, &position,
 *                                     obptr, ocount, self.ob_mpi) )
 *         return position             # <<<<<<<<<<<<<<
 * 
 *     def Pack_external_size(self, datarep, int count):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":704
 *         return position
 * 
 *     def Unpack_external(self, datarep, inbuf, Aint position, outbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Unpack from contiguous memory according to datatype,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Unpack_external", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_datarep);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":724
 *         return position
 * 
 *     def Pack_external_size(self, datarep, int count):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the upper bound on the amount of space (in bytes)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_67Pack_external_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_66Pack_external_size[] = "Datatype.Pack_external_size(self, datarep, int count)\n\n        Returns the upper bound on the amount of space (in bytes)\n        needed to pack a message according to datatype,\n        using a portable data representation (**external32**).\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_67Pack_external_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_datarep = 0;
  int __pyx_v_count;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Pack_external_size (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datarep,&__pyx_n_s_count,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datarep)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Pack_external_size", 1, 2, 2, 1); __PYX_ERR(21, 724, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Pack_external_size") < 0)) __PYX_ERR(21, 724, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_datarep = values[0];
    __pyx_v_count = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 724, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Pack_external_size", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 724, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack_external_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_66Pack_external_size(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_datarep, __pyx_v_count);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_66Pack_external_size(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_datarep, int __pyx_v_count) {
  char *__pyx_v_cdatarep;
  MPI_Aint __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Pack_external_size", 0);
  __Pyx_INCREF(__pyx_v_datarep);

  /* "mpi4py/MPI/Datatype.pyx":730
 *         using a portable data representation (**external32**).
 *         """
 *         cdef char *cdatarep = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         datarep = asmpistr(datarep, &cdatarep)
 */
  __pyx_v_cdatarep = NULL;

  /* "mpi4py/MPI/Datatype.pyx":731
 *         """
 *         cdef char *cdatarep = NULL
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         datarep = asmpistr(datarep, &cdatarep)
 *         CHKERR( MPI_Pack_external_size(cdatarep, count,
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Datatype.pyx":732
 *         cdef char *cdatarep = NULL
 *         cdef MPI_Aint size = 0
 *         datarep = asmpistr(datarep, &cdatarep)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Pack_external_size(cdatarep, count,
 *                                        self.ob_mpi, &size) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_datarep, (&__pyx_v_cdatarep)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_datarep, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":733
 *         cdef MPI_Aint size = 0
 *         datarep = asmpistr(datarep, &cdatarep)
 *         CHKERR( MPI_Pack_external_size(cdatarep, count,             # <<<<<<<<<<<<<<
 *                                        self.ob_mpi, &size) )
 *         return size
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Pack_external_size(__pyx_v_cdatarep, __pyx_v_count, __pyx_v_self->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 733, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":735
 *         CHKERR( MPI_Pack_external_size(cdatarep, count,
 *                                        self.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     # Attributes
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":724
 *         return position
 * 
 *     def Pack_external_size(self, datarep, int count):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the upper bound on the amount of space (in bytes)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Pack_external_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_datarep);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":740
 *     # ----------
 * 
 *     def Get_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve attribute value by key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_69Get_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_68Get_attr[] = "Datatype.Get_attr(self, int keyval)\n\n        Retrieve attribute value by key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_69Get_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_attr") < 0)) __PYX_ERR(21, 740, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 740, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_attr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 740, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_68Get_attr(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_68Get_attr(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_keyval) {
  void *__pyx_v_attrval;
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_attr", 0);

  /* "mpi4py/MPI/Datatype.pyx":744
 *         Retrieve attribute value by key
 *         """
 *         cdef void *attrval = NULL             # <<<<<<<<<<<<<<
 *         cdef int flag = 0
 *         CHKERR( MPI_Type_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 */
  __pyx_v_attrval = NULL;

  /* "mpi4py/MPI/Datatype.pyx":745
 *         """
 *         cdef void *attrval = NULL
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if not flag: return None
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Datatype.pyx":746
 *         cdef void *attrval = NULL
 *         cdef int flag = 0
 *         CHKERR( MPI_Type_get_attr(self.ob_mpi, keyval, &attrval, &flag) )             # <<<<<<<<<<<<<<
 *         if not flag: return None
 *         if attrval == NULL: return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval, (&__pyx_v_attrval), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 746, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":747
 *         cdef int flag = 0
 *         CHKERR( MPI_Type_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if not flag: return None             # <<<<<<<<<<<<<<
 *         if attrval == NULL: return 0
 *         # user-defined attribute keyval
 */
  __pyx_t_2 = ((!(__pyx_v_flag != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":748
 *         CHKERR( MPI_Type_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if not flag: return None
 *         if attrval == NULL: return 0             # <<<<<<<<<<<<<<
 *         # user-defined attribute keyval
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 */
  __pyx_t_2 = ((__pyx_v_attrval == NULL) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_0);
    __pyx_r = __pyx_int_0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Datatype.pyx":750
 *         if attrval == NULL: return 0
 *         # user-defined attribute keyval
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)             # <<<<<<<<<<<<<<
 * 
 *     def Set_attr(self, int keyval, object attrval):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(__pyx_v_self->ob_mpi, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 750, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":740
 *     # ----------
 * 
 *     def Get_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve attribute value by key
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":752
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 * 
 *     def Set_attr(self, int keyval, object attrval):             # <<<<<<<<<<<<<<
 *         """
 *         Store attribute value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_71Set_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_70Set_attr[] = "Datatype.Set_attr(self, int keyval, attrval)\n\n        Store attribute value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_71Set_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_v_attrval = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,&__pyx_n_s_attrval,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_attrval)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Set_attr", 1, 2, 2, 1); __PYX_ERR(21, 752, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_attr") < 0)) __PYX_ERR(21, 752, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 752, __pyx_L3_error)
    __pyx_v_attrval = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_attr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 752, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Set_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_70Set_attr(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_keyval, __pyx_v_attrval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_70Set_attr(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_attr", 0);

  /* "mpi4py/MPI/Datatype.pyx":756
 *         Store attribute value associated with a key
 *         """
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)             # <<<<<<<<<<<<<<
 * 
 *     def Delete_attr(self, int keyval):
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(__pyx_v_self->ob_mpi, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 756, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":752
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 * 
 *     def Set_attr(self, int keyval, object attrval):             # <<<<<<<<<<<<<<
 *         """
 *         Store attribute value associated with a key
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Set_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":758
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)
 * 
 *     def Delete_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Delete attribute value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_73Delete_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_72Delete_attr[] = "Datatype.Delete_attr(self, int keyval)\n\n        Delete attribute value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_73Delete_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Delete_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Delete_attr") < 0)) __PYX_ERR(21, 758, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 758, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Delete_attr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 758, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Delete_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_72Delete_attr(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_72Delete_attr(struct PyMPIDatatypeObject *__pyx_v_self, int __pyx_v_keyval) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Delete_attr", 0);

  /* "mpi4py/MPI/Datatype.pyx":762
 *         Delete attribute value associated with a key
 *         """
 *         CHKERR( MPI_Type_delete_attr(self.ob_mpi, keyval) )             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_delete_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 762, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":758
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)
 * 
 *     def Delete_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Delete attribute value associated with a key
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Delete_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":765
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for datatypes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_75Create_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_74Create_keyval[] = "Datatype.Create_keyval(type cls, copy_fn=None, delete_fn=None, nopython=False)\n\n        Create a new attribute key for datatypes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_75Create_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_copy_fn = 0;
  PyObject *__pyx_v_delete_fn = 0;
  PyObject *__pyx_v_nopython = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_keyval (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_copy_fn,&__pyx_n_s_delete_fn,&__pyx_n_s_nopython,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy_fn);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delete_fn);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nopython);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_keyval") < 0)) __PYX_ERR(21, 765, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_copy_fn = values[0];
    __pyx_v_delete_fn = values[1];
    __pyx_v_nopython = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_keyval", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 765, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_74Create_keyval(((PyTypeObject*)__pyx_v_cls), __pyx_v_copy_fn, __pyx_v_delete_fn, __pyx_v_nopython);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_74Create_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython) {
  PyObject *__pyx_v_state = 0;
  int __pyx_v_keyval;
  MPI_Type_copy_attr_function *__pyx_v__copy;
  MPI_Type_delete_attr_function *__pyx_v__del;
  void *__pyx_v_extra_state;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_keyval", 0);

  /* "mpi4py/MPI/Datatype.pyx":769
 *         Create a new attribute key for datatypes
 *         """
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)             # <<<<<<<<<<<<<<
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Type_copy_attr_function *_copy = PyMPI_attr_copy_fn
 */
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_copy_fn);
  __Pyx_GIVEREF(__pyx_v_copy_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_copy_fn);
  __Pyx_INCREF(__pyx_v_delete_fn);
  __Pyx_GIVEREF(__pyx_v_delete_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_delete_fn);
  __Pyx_INCREF(__pyx_v_nopython);
  __Pyx_GIVEREF(__pyx_v_nopython);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_nopython);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6mpi4py_3MPI__p_keyval), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 769, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_state = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":770
 *         """
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)
 *         cdef int keyval = MPI_KEYVAL_INVALID             # <<<<<<<<<<<<<<
 *         cdef MPI_Type_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Type_delete_attr_function *_del = PyMPI_attr_delete_fn
 */
  __pyx_v_keyval = MPI_KEYVAL_INVALID;

  /* "mpi4py/MPI/Datatype.pyx":771
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Type_copy_attr_function *_copy = PyMPI_attr_copy_fn             # <<<<<<<<<<<<<<
 *         cdef MPI_Type_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state
 */
  __pyx_v__copy = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn;

  /* "mpi4py/MPI/Datatype.pyx":772
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Type_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Type_delete_attr_function *_del = PyMPI_attr_delete_fn             # <<<<<<<<<<<<<<
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Type_create_keyval(_copy, _del, &keyval, extra_state) )
 */
  __pyx_v__del = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn;

  /* "mpi4py/MPI/Datatype.pyx":773
 *         cdef MPI_Type_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Type_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_create_keyval(_copy, _del, &keyval, extra_state) )
 *         type_keyval[keyval] = state
 */
  __pyx_v_extra_state = ((void *)__pyx_v_state);

  /* "mpi4py/MPI/Datatype.pyx":774
 *         cdef MPI_Type_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Type_create_keyval(_copy, _del, &keyval, extra_state) )             # <<<<<<<<<<<<<<
 *         type_keyval[keyval] = state
 *         return keyval
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_create_keyval(__pyx_v__copy, __pyx_v__del, (&__pyx_v_keyval), __pyx_v_extra_state)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 774, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":775
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Type_create_keyval(_copy, _del, &keyval, extra_state) )
 *         type_keyval[keyval] = state             # <<<<<<<<<<<<<<
 *         return keyval
 * 
 */
  if (unlikely(__pyx_v_6mpi4py_3MPI_type_keyval == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(21, 775, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(PyDict_SetItem(__pyx_v_6mpi4py_3MPI_type_keyval, __pyx_t_2, __pyx_v_state) < 0)) __PYX_ERR(21, 775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":776
 *         CHKERR( MPI_Type_create_keyval(_copy, _del, &keyval, extra_state) )
 *         type_keyval[keyval] = state
 *         return keyval             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":765
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for datatypes
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Create_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":779
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for datatypes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_77Free_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_76Free_keyval[] = "Datatype.Free_keyval(type cls, int keyval)\n\n        Free and attribute key for datatypes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_77Free_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free_keyval (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Free_keyval") < 0)) __PYX_ERR(21, 779, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 779, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Free_keyval", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 779, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Free_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_76Free_keyval(((PyTypeObject*)__pyx_v_cls), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_76Free_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_keyval) {
  int __pyx_v_keyval_save;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Free_keyval", 0);

  /* "mpi4py/MPI/Datatype.pyx":783
 *         Free and attribute key for datatypes
 *         """
 *         cdef int keyval_save = keyval             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_free_keyval(&keyval) )
 *         try: del type_keyval[keyval_save]
 */
  __pyx_v_keyval_save = __pyx_v_keyval;

  /* "mpi4py/MPI/Datatype.pyx":784
 *         """
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Type_free_keyval(&keyval) )             # <<<<<<<<<<<<<<
 *         try: del type_keyval[keyval_save]
 *         except KeyError: pass
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_free_keyval((&__pyx_v_keyval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 784, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":785
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Type_free_keyval(&keyval) )
 *         try: del type_keyval[keyval_save]             # <<<<<<<<<<<<<<
 *         except KeyError: pass
 *         return keyval
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {
      if (unlikely(__pyx_v_6mpi4py_3MPI_type_keyval == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(21, 785, __pyx_L3_error)
      }
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_keyval_save); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 785, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(PyDict_DelItem(__pyx_v_6mpi4py_3MPI_type_keyval, __pyx_t_5) < 0)) __PYX_ERR(21, 785, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/Datatype.pyx":786
 *         CHKERR( MPI_Type_free_keyval(&keyval) )
 *         try: del type_keyval[keyval_save]
 *         except KeyError: pass             # <<<<<<<<<<<<<<
 *         return keyval
 * 
 */
    __pyx_t_1 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_1) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/Datatype.pyx":785
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Type_free_keyval(&keyval) )
 *         try: del type_keyval[keyval_save]             # <<<<<<<<<<<<<<
 *         except KeyError: pass
 *         return keyval
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/Datatype.pyx":787
 *         try: del type_keyval[keyval_save]
 *         except KeyError: pass
 *         return keyval             # <<<<<<<<<<<<<<
 * 
 *     # Naming Objects
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":779
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for datatypes
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Free_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":792
 *     # --------------
 * 
 *     def Get_name(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the print name for this datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_79Get_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_78Get_name[] = "Datatype.Get_name(self)\n\n        Get the print name for this datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_79Get_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_name (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_name", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_name", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_78Get_name(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_78Get_name(struct PyMPIDatatypeObject *__pyx_v_self) {
  char __pyx_v_name[(MPI_MAX_OBJECT_NAME + 1)];
  int __pyx_v_nlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_name", 0);

  /* "mpi4py/MPI/Datatype.pyx":797
 *         """
 *         cdef char name[MPI_MAX_OBJECT_NAME+1]
 *         cdef int nlen = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_get_name(self.ob_mpi, name, &nlen) )
 *         return tompistr(name, nlen)
 */
  __pyx_v_nlen = 0;

  /* "mpi4py/MPI/Datatype.pyx":798
 *         cdef char name[MPI_MAX_OBJECT_NAME+1]
 *         cdef int nlen = 0
 *         CHKERR( MPI_Type_get_name(self.ob_mpi, name, &nlen) )             # <<<<<<<<<<<<<<
 *         return tompistr(name, nlen)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_get_name(__pyx_v_self->ob_mpi, __pyx_v_name, (&__pyx_v_nlen))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(21, 798, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":799
 *         cdef int nlen = 0
 *         CHKERR( MPI_Type_get_name(self.ob_mpi, name, &nlen) )
 *         return tompistr(name, nlen)             # <<<<<<<<<<<<<<
 * 
 *     def Set_name(self, name):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_name, __pyx_v_nlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":792
 *     # --------------
 * 
 *     def Get_name(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the print name for this datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Get_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":801
 *         return tompistr(name, nlen)
 * 
 *     def Set_name(self, name):             # <<<<<<<<<<<<<<
 *         """
 *         Set the print name for this datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_81Set_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_80Set_name[] = "Datatype.Set_name(self, name)\n\n        Set the print name for this datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_81Set_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_name (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name_2,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name_2)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_name") < 0)) __PYX_ERR(21, 801, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_name", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 801, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Set_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_80Set_name(((struct PyMPIDatatypeObject *)__pyx_v_self), __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_80Set_name(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_name) {
  char *__pyx_v_cname;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Set_name", 0);
  __Pyx_INCREF(__pyx_v_name);

  /* "mpi4py/MPI/Datatype.pyx":805
 *         Set the print name for this datatype
 *         """
 *         cdef char *cname = NULL             # <<<<<<<<<<<<<<
 *         name = asmpistr(name, &cname)
 *         CHKERR( MPI_Type_set_name(self.ob_mpi, cname) )
 */
  __pyx_v_cname = NULL;

  /* "mpi4py/MPI/Datatype.pyx":806
 *         """
 *         cdef char *cname = NULL
 *         name = asmpistr(name, &cname)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Type_set_name(self.ob_mpi, cname) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":807
 *         cdef char *cname = NULL
 *         name = asmpistr(name, &cname)
 *         CHKERR( MPI_Type_set_name(self.ob_mpi, cname) )             # <<<<<<<<<<<<<<
 * 
 *     property name:
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Type_set_name(__pyx_v_self->ob_mpi, __pyx_v_cname)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 807, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":801
 *         return tompistr(name, nlen)
 * 
 *     def Set_name(self, name):             # <<<<<<<<<<<<<<
 *         """
 *         Set the print name for this datatype
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.Set_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":811
 *     property name:
 *         """datatype name"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_name()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_4name___get__(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_4name___get__(struct PyMPIDatatypeObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Datatype.pyx":812
 *         """datatype name"""
 *         def __get__(self):
 *             return self.Get_name()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_name(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":811
 *     property name:
 *         """datatype name"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_name()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":813
 *         def __get__(self):
 *             return self.Get_name()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_name(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Datatype_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Datatype_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_4name_2__set__(((struct PyMPIDatatypeObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Datatype_4name_2__set__(struct PyMPIDatatypeObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Datatype.pyx":814
 *             return self.Get_name()
 *         def __set__(self, value):
 *             self.Set_name(value)             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 814, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Datatype.pyx":813
 *         def __get__(self):
 *             return self.Get_name()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_name(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":819
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_83py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_82py2f[] = "Datatype.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_83py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_82py2f(((struct PyMPIDatatypeObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_82py2f(struct PyMPIDatatypeObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Datatype.pyx":822
 *         """
 *         """
 *         return MPI_Type_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Type_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":819
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":825
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_85f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Datatype_84f2py[] = "Datatype.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Datatype_85f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(21, 825, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 825, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Datatype_84f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Datatype_84f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Datatype.pyx":828
 *         """
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         datatype.ob_mpi = MPI_Type_f2c(arg)
 *         return datatype
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 828, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_datatype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Datatype.pyx":829
 *         """
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = MPI_Type_f2c(arg)             # <<<<<<<<<<<<<<
 *         return datatype
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 829, __pyx_L1_error)
  __pyx_v_datatype->ob_mpi = MPI_Type_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Datatype.pyx":830
 *         cdef Datatype datatype = <Datatype>Datatype.__new__(Datatype)
 *         datatype.ob_mpi = MPI_Type_f2c(arg)
 *         return datatype             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_datatype));
  __pyx_r = ((PyObject *)__pyx_v_datatype);
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":825
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Datatype.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_datatype);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":836
 * # -----------------
 * 
 * def Get_address(location):             # <<<<<<<<<<<<<<
 *     """
 *     Get the address of a location in memory
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_15Get_address(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_14Get_address[] = "Get_address(location)\n\n    Get the address of a location in memory\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_15Get_address = {"Get_address", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_15Get_address, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_14Get_address};
static PyObject *__pyx_pw_6mpi4py_3MPI_15Get_address(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_location = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_address (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_location,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_location)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_address") < 0)) __PYX_ERR(21, 836, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_location = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_address", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 836, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Get_address", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_14Get_address(__pyx_self, __pyx_v_location);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_14Get_address(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_location) {
  void *__pyx_v_baseptr;
  MPI_Aint __pyx_v_address;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("Get_address", 0);

  /* "mpi4py/MPI/Datatype.pyx":840
 *     Get the address of a location in memory
 *     """
 *     cdef void *baseptr = MPI_BOTTOM             # <<<<<<<<<<<<<<
 *     if location is not __BOTTOM__:
 *         getbuffer_r(location, &baseptr, NULL)
 */
  __pyx_v_baseptr = MPI_BOTTOM;

  /* "mpi4py/MPI/Datatype.pyx":841
 *     """
 *     cdef void *baseptr = MPI_BOTTOM
 *     if location is not __BOTTOM__:             # <<<<<<<<<<<<<<
 *         getbuffer_r(location, &baseptr, NULL)
 *     cdef MPI_Aint address = 0
 */
  __pyx_t_1 = (__pyx_v_location != __pyx_v_6mpi4py_3MPI___BOTTOM__);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Datatype.pyx":842
 *     cdef void *baseptr = MPI_BOTTOM
 *     if location is not __BOTTOM__:
 *         getbuffer_r(location, &baseptr, NULL)             # <<<<<<<<<<<<<<
 *     cdef MPI_Aint address = 0
 *     CHKERR( MPI_Get_address(baseptr, &address) )
 */
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_r(__pyx_v_location, (&__pyx_v_baseptr), NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 842, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Datatype.pyx":841
 *     """
 *     cdef void *baseptr = MPI_BOTTOM
 *     if location is not __BOTTOM__:             # <<<<<<<<<<<<<<
 *         getbuffer_r(location, &baseptr, NULL)
 *     cdef MPI_Aint address = 0
 */
  }

  /* "mpi4py/MPI/Datatype.pyx":843
 *     if location is not __BOTTOM__:
 *         getbuffer_r(location, &baseptr, NULL)
 *     cdef MPI_Aint address = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_address(baseptr, &address) )
 *     return address
 */
  __pyx_v_address = 0;

  /* "mpi4py/MPI/Datatype.pyx":844
 *         getbuffer_r(location, &baseptr, NULL)
 *     cdef MPI_Aint address = 0
 *     CHKERR( MPI_Get_address(baseptr, &address) )             # <<<<<<<<<<<<<<
 *     return address
 * 
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_address(__pyx_v_baseptr, (&__pyx_v_address))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(21, 844, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":845
 *     cdef MPI_Aint address = 0
 *     CHKERR( MPI_Get_address(baseptr, &address) )
 *     return address             # <<<<<<<<<<<<<<
 * 
 * def Aint_add(Aint base, Aint disp):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_address); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 845, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":836
 * # -----------------
 * 
 * def Get_address(location):             # <<<<<<<<<<<<<<
 *     """
 *     Get the address of a location in memory
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Get_address", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":847
 *     return address
 * 
 * def Aint_add(Aint base, Aint disp):             # <<<<<<<<<<<<<<
 *     """
 *     Return the sum of base address and displacement
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_17Aint_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_16Aint_add[] = "Aint_add(Aint base, Aint disp)\n\n    Return the sum of base address and displacement\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_17Aint_add = {"Aint_add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_17Aint_add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_16Aint_add};
static PyObject *__pyx_pw_6mpi4py_3MPI_17Aint_add(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Aint __pyx_v_base;
  MPI_Aint __pyx_v_disp;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Aint_add (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_base,&__pyx_n_s_disp,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_base)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_disp)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Aint_add", 1, 2, 2, 1); __PYX_ERR(21, 847, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Aint_add") < 0)) __PYX_ERR(21, 847, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_base = __Pyx_PyInt_As_MPI_Aint(values[0]); if (unlikely((__pyx_v_base == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 847, __pyx_L3_error)
    __pyx_v_disp = __Pyx_PyInt_As_MPI_Aint(values[1]); if (unlikely((__pyx_v_disp == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 847, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Aint_add", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 847, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Aint_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_16Aint_add(__pyx_self, __pyx_v_base, __pyx_v_disp);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_16Aint_add(CYTHON_UNUSED PyObject *__pyx_self, MPI_Aint __pyx_v_base, MPI_Aint __pyx_v_disp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Aint_add", 0);

  /* "mpi4py/MPI/Datatype.pyx":851
 *     Return the sum of base address and displacement
 *     """
 *     return MPI_Aint_add(base, disp)             # <<<<<<<<<<<<<<
 * 
 * def Aint_diff(Aint addr1, Aint addr2):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(MPI_Aint_add(__pyx_v_base, __pyx_v_disp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":847
 *     return address
 * 
 * def Aint_add(Aint base, Aint disp):             # <<<<<<<<<<<<<<
 *     """
 *     Return the sum of base address and displacement
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Aint_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Datatype.pyx":853
 *     return MPI_Aint_add(base, disp)
 * 
 * def Aint_diff(Aint addr1, Aint addr2):             # <<<<<<<<<<<<<<
 *     """
 *     Return the difference between absolute addresses
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_19Aint_diff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_18Aint_diff[] = "Aint_diff(Aint addr1, Aint addr2)\n\n    Return the difference between absolute addresses\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_19Aint_diff = {"Aint_diff", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_19Aint_diff, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_18Aint_diff};
static PyObject *__pyx_pw_6mpi4py_3MPI_19Aint_diff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Aint __pyx_v_addr1;
  MPI_Aint __pyx_v_addr2;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Aint_diff (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_addr1,&__pyx_n_s_addr2,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addr1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_addr2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Aint_diff", 1, 2, 2, 1); __PYX_ERR(21, 853, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Aint_diff") < 0)) __PYX_ERR(21, 853, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_addr1 = __Pyx_PyInt_As_MPI_Aint(values[0]); if (unlikely((__pyx_v_addr1 == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 853, __pyx_L3_error)
    __pyx_v_addr2 = __Pyx_PyInt_As_MPI_Aint(values[1]); if (unlikely((__pyx_v_addr2 == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(21, 853, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Aint_diff", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 853, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Aint_diff", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_18Aint_diff(__pyx_self, __pyx_v_addr1, __pyx_v_addr2);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_18Aint_diff(CYTHON_UNUSED PyObject *__pyx_self, MPI_Aint __pyx_v_addr1, MPI_Aint __pyx_v_addr2) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Aint_diff", 0);

  /* "mpi4py/MPI/Datatype.pyx":857
 *     Return the difference between absolute addresses
 *     """
 *     return MPI_Aint_diff(addr1, addr2)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(MPI_Aint_diff(__pyx_v_addr1, __pyx_v_addr2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 857, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Datatype.pyx":853
 *     return MPI_Aint_add(base, disp)
 * 
 * def Aint_diff(Aint addr1, Aint addr2):             # <<<<<<<<<<<<<<
 *     """
 *     Return the difference between absolute addresses
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Aint_diff", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/typemap.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int AddTypeMap(dict TD, const char tc[], Datatype dt) except -1:             # <<<<<<<<<<<<<<
 *     if dt.ob_mpi != MPI_DATATYPE_NULL:
 *         TD[pystr(tc)] = dt
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI_AddTypeMap(PyObject *__pyx_v_TD, char const *__pyx_v_tc, struct PyMPIDatatypeObject *__pyx_v_dt) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("AddTypeMap", 0);

  /* "mpi4py/MPI/typemap.pxi":4
 * 
 * cdef inline int AddTypeMap(dict TD, const char tc[], Datatype dt) except -1:
 *     if dt.ob_mpi != MPI_DATATYPE_NULL:             # <<<<<<<<<<<<<<
 *         TD[pystr(tc)] = dt
 *         return 1
 */
  __pyx_t_1 = ((__pyx_v_dt->ob_mpi != MPI_DATATYPE_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/typemap.pxi":5
 * cdef inline int AddTypeMap(dict TD, const char tc[], Datatype dt) except -1:
 *     if dt.ob_mpi != MPI_DATATYPE_NULL:
 *         TD[pystr(tc)] = dt             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
 */
    if (unlikely(__pyx_v_TD == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(22, 5, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_pystr(__pyx_v_tc); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (unlikely(PyDict_SetItem(__pyx_v_TD, __pyx_t_2, ((PyObject *)__pyx_v_dt)) < 0)) __PYX_ERR(22, 5, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "mpi4py/MPI/typemap.pxi":6
 *     if dt.ob_mpi != MPI_DATATYPE_NULL:
 *         TD[pystr(tc)] = dt
 *         return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    __pyx_r = 1;
    goto __pyx_L0;

    /* "mpi4py/MPI/typemap.pxi":4
 * 
 * cdef inline int AddTypeMap(dict TD, const char tc[], Datatype dt) except -1:
 *     if dt.ob_mpi != MPI_DATATYPE_NULL:             # <<<<<<<<<<<<<<
 *         TD[pystr(tc)] = dt
 *         return 1
 */
  }

  /* "mpi4py/MPI/typemap.pxi":7
 *         TD[pystr(tc)] = dt
 *         return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/typemap.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline int AddTypeMap(dict TD, const char tc[], Datatype dt) except -1:             # <<<<<<<<<<<<<<
 *     if dt.ob_mpi != MPI_DATATYPE_NULL:
 *         TD[pystr(tc)] = dt
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.AddTypeMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/typestr.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * def _typecode(Datatype datatype):             # <<<<<<<<<<<<<<
 *     """
 *     Map MPI datatype to typecode string
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_21_typecode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_20_typecode[] = "_typecode(Datatype datatype)\n\n    Map MPI datatype to typecode string\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_21_typecode = {"_typecode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_21_typecode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_20_typecode};
static PyObject *__pyx_pw_6mpi4py_3MPI_21_typecode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_typecode (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datatype,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatype)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_typecode") < 0)) __PYX_ERR(23, 3, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_datatype = ((struct PyMPIDatatypeObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_typecode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(23, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._typecode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_datatype), __pyx_ptype_6mpi4py_3MPI_Datatype, 0, "datatype", 0))) __PYX_ERR(23, 3, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_20_typecode(__pyx_self, __pyx_v_datatype);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_20_typecode(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPIDatatypeObject *__pyx_v_datatype) {
  char const *__pyx_v_tc;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("_typecode", 0);

  /* "mpi4py/MPI/typestr.pxi":7
 *     Map MPI datatype to typecode string
 *     """
 *     cdef const char *tc = Datatype2String(datatype.ob_mpi)             # <<<<<<<<<<<<<<
 *     return pystr(tc) if tc != NULL else None
 * 
 */
  __pyx_v_tc = __pyx_f_6mpi4py_3MPI_Datatype2String(__pyx_v_datatype->ob_mpi);

  /* "mpi4py/MPI/typestr.pxi":8
 *     """
 *     cdef const char *tc = Datatype2String(datatype.ob_mpi)
 *     return pystr(tc) if tc != NULL else None             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_tc != NULL) != 0)) {
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_pystr(__pyx_v_tc); if (unlikely(!__pyx_t_2)) __PYX_ERR(23, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/typestr.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * def _typecode(Datatype datatype):             # <<<<<<<<<<<<<<
 *     """
 *     Map MPI datatype to typecode string
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI._typecode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/typestr.pxi":12
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline const char* Datatype2String(MPI_Datatype datatype) nogil:             # <<<<<<<<<<<<<<
 *     if datatype == MPI_DATATYPE_NULL: return NULL
 *     # MPI
 */

static CYTHON_INLINE char const *__pyx_f_6mpi4py_3MPI_Datatype2String(MPI_Datatype __pyx_v_datatype) {
  char const *__pyx_r;
  int __pyx_t_1;

  /* "mpi4py/MPI/typestr.pxi":13
 * 
 * cdef inline const char* Datatype2String(MPI_Datatype datatype) nogil:
 *     if datatype == MPI_DATATYPE_NULL: return NULL             # <<<<<<<<<<<<<<
 *     # MPI
 *     elif datatype == MPI_LB     : return NULL
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_DATATYPE_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":15
 *     if datatype == MPI_DATATYPE_NULL: return NULL
 *     # MPI
 *     elif datatype == MPI_LB     : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UB     : return NULL
 *     elif datatype == MPI_PACKED : return "B"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LB) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":16
 *     # MPI
 *     elif datatype == MPI_LB     : return NULL
 *     elif datatype == MPI_UB     : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_PACKED : return "B"
 *     elif datatype == MPI_BYTE   : return "B"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UB) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":17
 *     elif datatype == MPI_LB     : return NULL
 *     elif datatype == MPI_UB     : return NULL
 *     elif datatype == MPI_PACKED : return "B"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_BYTE   : return "B"
 *     elif datatype == MPI_AINT   : return "p"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_PACKED) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"B");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":18
 *     elif datatype == MPI_UB     : return NULL
 *     elif datatype == MPI_PACKED : return "B"
 *     elif datatype == MPI_BYTE   : return "B"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_AINT   : return "p"
 *     elif datatype == MPI_OFFSET :
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_BYTE) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"B");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":19
 *     elif datatype == MPI_PACKED : return "B"
 *     elif datatype == MPI_BYTE   : return "B"
 *     elif datatype == MPI_AINT   : return "p"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_OFFSET :
 *         if   sizeof(MPI_Offset) == sizeof(MPI_Aint)  : return "p"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_AINT) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"p");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":20
 *     elif datatype == MPI_BYTE   : return "B"
 *     elif datatype == MPI_AINT   : return "p"
 *     elif datatype == MPI_OFFSET :             # <<<<<<<<<<<<<<
 *         if   sizeof(MPI_Offset) == sizeof(MPI_Aint)  : return "p"
 *         elif sizeof(MPI_Offset) == sizeof(long long) : return "q"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_OFFSET) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/typestr.pxi":21
 *     elif datatype == MPI_AINT   : return "p"
 *     elif datatype == MPI_OFFSET :
 *         if   sizeof(MPI_Offset) == sizeof(MPI_Aint)  : return "p"             # <<<<<<<<<<<<<<
 *         elif sizeof(MPI_Offset) == sizeof(long long) : return "q"
 *         elif sizeof(MPI_Offset) == sizeof(long)      : return "l"
 */
    __pyx_t_1 = (((sizeof(MPI_Offset)) == (sizeof(MPI_Aint))) != 0);
    if (__pyx_t_1) {
      __pyx_r = ((char const *)"p");
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/typestr.pxi":22
 *     elif datatype == MPI_OFFSET :
 *         if   sizeof(MPI_Offset) == sizeof(MPI_Aint)  : return "p"
 *         elif sizeof(MPI_Offset) == sizeof(long long) : return "q"             # <<<<<<<<<<<<<<
 *         elif sizeof(MPI_Offset) == sizeof(long)      : return "l"
 *         elif sizeof(MPI_Offset) == sizeof(int)       : return "i"
 */
    __pyx_t_1 = (((sizeof(MPI_Offset)) == (sizeof(PY_LONG_LONG))) != 0);
    if (__pyx_t_1) {
      __pyx_r = ((char const *)"q");
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/typestr.pxi":23
 *         if   sizeof(MPI_Offset) == sizeof(MPI_Aint)  : return "p"
 *         elif sizeof(MPI_Offset) == sizeof(long long) : return "q"
 *         elif sizeof(MPI_Offset) == sizeof(long)      : return "l"             # <<<<<<<<<<<<<<
 *         elif sizeof(MPI_Offset) == sizeof(int)       : return "i"
 *         else                                         : return NULL
 */
    __pyx_t_1 = (((sizeof(MPI_Offset)) == (sizeof(long))) != 0);
    if (__pyx_t_1) {
      __pyx_r = ((char const *)"l");
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/typestr.pxi":24
 *         elif sizeof(MPI_Offset) == sizeof(long long) : return "q"
 *         elif sizeof(MPI_Offset) == sizeof(long)      : return "l"
 *         elif sizeof(MPI_Offset) == sizeof(int)       : return "i"             # <<<<<<<<<<<<<<
 *         else                                         : return NULL
 *     # C - character
 */
    __pyx_t_1 = (((sizeof(MPI_Offset)) == (sizeof(int))) != 0);
    if (__pyx_t_1) {
      __pyx_r = ((char const *)"i");
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/typestr.pxi":25
 *         elif sizeof(MPI_Offset) == sizeof(long)      : return "l"
 *         elif sizeof(MPI_Offset) == sizeof(int)       : return "i"
 *         else                                         : return NULL             # <<<<<<<<<<<<<<
 *     # C - character
 *     elif datatype == MPI_CHAR  : return "c"
 */
    /*else*/ {
      __pyx_r = NULL;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/typestr.pxi":20
 *     elif datatype == MPI_BYTE   : return "B"
 *     elif datatype == MPI_AINT   : return "p"
 *     elif datatype == MPI_OFFSET :             # <<<<<<<<<<<<<<
 *         if   sizeof(MPI_Offset) == sizeof(MPI_Aint)  : return "p"
 *         elif sizeof(MPI_Offset) == sizeof(long long) : return "q"
 */
  }

  /* "mpi4py/MPI/typestr.pxi":27
 *         else                                         : return NULL
 *     # C - character
 *     elif datatype == MPI_CHAR  : return "c"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_WCHAR : return NULL
 *     # C - (signed) integral
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_CHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"c");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":28
 *     # C - character
 *     elif datatype == MPI_CHAR  : return "c"
 *     elif datatype == MPI_WCHAR : return NULL             # <<<<<<<<<<<<<<
 *     # C - (signed) integral
 *     elif datatype == MPI_SIGNED_CHAR : return "b"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_WCHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":30
 *     elif datatype == MPI_WCHAR : return NULL
 *     # C - (signed) integral
 *     elif datatype == MPI_SIGNED_CHAR : return "b"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_SHORT       : return "h"
 *     elif datatype == MPI_INT         : return "i"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_SIGNED_CHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"b");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":31
 *     # C - (signed) integral
 *     elif datatype == MPI_SIGNED_CHAR : return "b"
 *     elif datatype == MPI_SHORT       : return "h"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INT         : return "i"
 *     elif datatype == MPI_LONG        : return "l"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_SHORT) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"h");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":32
 *     elif datatype == MPI_SIGNED_CHAR : return "b"
 *     elif datatype == MPI_SHORT       : return "h"
 *     elif datatype == MPI_INT         : return "i"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LONG        : return "l"
 *     elif datatype == MPI_LONG_LONG   : return "q"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INT) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":33
 *     elif datatype == MPI_SHORT       : return "h"
 *     elif datatype == MPI_INT         : return "i"
 *     elif datatype == MPI_LONG        : return "l"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LONG_LONG   : return "q"
 *     # C - unsigned integral
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"l");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":34
 *     elif datatype == MPI_INT         : return "i"
 *     elif datatype == MPI_LONG        : return "l"
 *     elif datatype == MPI_LONG_LONG   : return "q"             # <<<<<<<<<<<<<<
 *     # C - unsigned integral
 *     elif datatype == MPI_UNSIGNED_CHAR      : return "B"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LONG_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"q");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":36
 *     elif datatype == MPI_LONG_LONG   : return "q"
 *     # C - unsigned integral
 *     elif datatype == MPI_UNSIGNED_CHAR      : return "B"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UNSIGNED_SHORT     : return "H"
 *     elif datatype == MPI_UNSIGNED           : return "I"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UNSIGNED_CHAR) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"B");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":37
 *     # C - unsigned integral
 *     elif datatype == MPI_UNSIGNED_CHAR      : return "B"
 *     elif datatype == MPI_UNSIGNED_SHORT     : return "H"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UNSIGNED           : return "I"
 *     elif datatype == MPI_UNSIGNED_LONG      : return "L"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UNSIGNED_SHORT) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"H");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":38
 *     elif datatype == MPI_UNSIGNED_CHAR      : return "B"
 *     elif datatype == MPI_UNSIGNED_SHORT     : return "H"
 *     elif datatype == MPI_UNSIGNED           : return "I"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UNSIGNED_LONG      : return "L"
 *     elif datatype == MPI_UNSIGNED_LONG_LONG : return "Q"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UNSIGNED) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"I");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":39
 *     elif datatype == MPI_UNSIGNED_SHORT     : return "H"
 *     elif datatype == MPI_UNSIGNED           : return "I"
 *     elif datatype == MPI_UNSIGNED_LONG      : return "L"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UNSIGNED_LONG_LONG : return "Q"
 *     # C - (real) floating
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UNSIGNED_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"L");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":40
 *     elif datatype == MPI_UNSIGNED           : return "I"
 *     elif datatype == MPI_UNSIGNED_LONG      : return "L"
 *     elif datatype == MPI_UNSIGNED_LONG_LONG : return "Q"             # <<<<<<<<<<<<<<
 *     # C - (real) floating
 *     elif datatype == MPI_FLOAT       : return "f"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UNSIGNED_LONG_LONG) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"Q");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":42
 *     elif datatype == MPI_UNSIGNED_LONG_LONG : return "Q"
 *     # C - (real) floating
 *     elif datatype == MPI_FLOAT       : return "f"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_DOUBLE      : return "d"
 *     elif datatype == MPI_LONG_DOUBLE : return "g"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_FLOAT) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"f");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":43
 *     # C - (real) floating
 *     elif datatype == MPI_FLOAT       : return "f"
 *     elif datatype == MPI_DOUBLE      : return "d"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LONG_DOUBLE : return "g"
 *     # C99 - boolean
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_DOUBLE) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"d");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":44
 *     elif datatype == MPI_FLOAT       : return "f"
 *     elif datatype == MPI_DOUBLE      : return "d"
 *     elif datatype == MPI_LONG_DOUBLE : return "g"             # <<<<<<<<<<<<<<
 *     # C99 - boolean
 *     elif datatype == MPI_C_BOOL : return "?"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LONG_DOUBLE) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"g");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":46
 *     elif datatype == MPI_LONG_DOUBLE : return "g"
 *     # C99 - boolean
 *     elif datatype == MPI_C_BOOL : return "?"             # <<<<<<<<<<<<<<
 *     # C99 - integral
 *     elif datatype == MPI_INT8_T   : return "i1"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_C_BOOL) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"?");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":48
 *     elif datatype == MPI_C_BOOL : return "?"
 *     # C99 - integral
 *     elif datatype == MPI_INT8_T   : return "i1"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INT16_T  : return "i2"
 *     elif datatype == MPI_INT32_T  : return "i4"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INT8_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i1");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":49
 *     # C99 - integral
 *     elif datatype == MPI_INT8_T   : return "i1"
 *     elif datatype == MPI_INT16_T  : return "i2"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INT32_T  : return "i4"
 *     elif datatype == MPI_INT64_T  : return "i8"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INT16_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i2");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":50
 *     elif datatype == MPI_INT8_T   : return "i1"
 *     elif datatype == MPI_INT16_T  : return "i2"
 *     elif datatype == MPI_INT32_T  : return "i4"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INT64_T  : return "i8"
 *     elif datatype == MPI_UINT8_T  : return "u1"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INT32_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i4");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":51
 *     elif datatype == MPI_INT16_T  : return "i2"
 *     elif datatype == MPI_INT32_T  : return "i4"
 *     elif datatype == MPI_INT64_T  : return "i8"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UINT8_T  : return "u1"
 *     elif datatype == MPI_UINT16_T : return "u2"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INT64_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i8");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":52
 *     elif datatype == MPI_INT32_T  : return "i4"
 *     elif datatype == MPI_INT64_T  : return "i8"
 *     elif datatype == MPI_UINT8_T  : return "u1"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UINT16_T : return "u2"
 *     elif datatype == MPI_UINT32_T : return "u4"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UINT8_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"u1");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":53
 *     elif datatype == MPI_INT64_T  : return "i8"
 *     elif datatype == MPI_UINT8_T  : return "u1"
 *     elif datatype == MPI_UINT16_T : return "u2"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UINT32_T : return "u4"
 *     elif datatype == MPI_UINT64_T : return "u8"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UINT16_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"u2");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":54
 *     elif datatype == MPI_UINT8_T  : return "u1"
 *     elif datatype == MPI_UINT16_T : return "u2"
 *     elif datatype == MPI_UINT32_T : return "u4"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_UINT64_T : return "u8"
 *     # C99 - complex floating
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UINT32_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"u4");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":55
 *     elif datatype == MPI_UINT16_T : return "u2"
 *     elif datatype == MPI_UINT32_T : return "u4"
 *     elif datatype == MPI_UINT64_T : return "u8"             # <<<<<<<<<<<<<<
 *     # C99 - complex floating
 *     elif datatype == MPI_C_COMPLEX             : return "F"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_UINT64_T) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"u8");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":57
 *     elif datatype == MPI_UINT64_T : return "u8"
 *     # C99 - complex floating
 *     elif datatype == MPI_C_COMPLEX             : return "F"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_C_FLOAT_COMPLEX       : return "F"
 *     elif datatype == MPI_C_DOUBLE_COMPLEX      : return "D"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_C_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"F");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":58
 *     # C99 - complex floating
 *     elif datatype == MPI_C_COMPLEX             : return "F"
 *     elif datatype == MPI_C_FLOAT_COMPLEX       : return "F"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_C_DOUBLE_COMPLEX      : return "D"
 *     elif datatype == MPI_C_LONG_DOUBLE_COMPLEX : return "G"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_C_FLOAT_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"F");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":59
 *     elif datatype == MPI_C_COMPLEX             : return "F"
 *     elif datatype == MPI_C_FLOAT_COMPLEX       : return "F"
 *     elif datatype == MPI_C_DOUBLE_COMPLEX      : return "D"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_C_LONG_DOUBLE_COMPLEX : return "G"
 *     # C++ - boolean
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_C_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"D");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":60
 *     elif datatype == MPI_C_FLOAT_COMPLEX       : return "F"
 *     elif datatype == MPI_C_DOUBLE_COMPLEX      : return "D"
 *     elif datatype == MPI_C_LONG_DOUBLE_COMPLEX : return "G"             # <<<<<<<<<<<<<<
 *     # C++ - boolean
 *     elif datatype == MPI_CXX_BOOL : return "?"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_C_LONG_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"G");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":62
 *     elif datatype == MPI_C_LONG_DOUBLE_COMPLEX : return "G"
 *     # C++ - boolean
 *     elif datatype == MPI_CXX_BOOL : return "?"             # <<<<<<<<<<<<<<
 *     # C++ - complex floating
 *     elif datatype == MPI_CXX_FLOAT_COMPLEX       : return "F"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_CXX_BOOL) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"?");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":64
 *     elif datatype == MPI_CXX_BOOL : return "?"
 *     # C++ - complex floating
 *     elif datatype == MPI_CXX_FLOAT_COMPLEX       : return "F"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_CXX_DOUBLE_COMPLEX      : return "D"
 *     elif datatype == MPI_CXX_LONG_DOUBLE_COMPLEX : return "G"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_CXX_FLOAT_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"F");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":65
 *     # C++ - complex floating
 *     elif datatype == MPI_CXX_FLOAT_COMPLEX       : return "F"
 *     elif datatype == MPI_CXX_DOUBLE_COMPLEX      : return "D"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_CXX_LONG_DOUBLE_COMPLEX : return "G"
 *     # Fortran
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_CXX_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"D");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":66
 *     elif datatype == MPI_CXX_FLOAT_COMPLEX       : return "F"
 *     elif datatype == MPI_CXX_DOUBLE_COMPLEX      : return "D"
 *     elif datatype == MPI_CXX_LONG_DOUBLE_COMPLEX : return "G"             # <<<<<<<<<<<<<<
 *     # Fortran
 *     elif datatype == MPI_CHARACTER        : return "c"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_CXX_LONG_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"G");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":68
 *     elif datatype == MPI_CXX_LONG_DOUBLE_COMPLEX : return "G"
 *     # Fortran
 *     elif datatype == MPI_CHARACTER        : return "c"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LOGICAL          : return NULL
 *     elif datatype == MPI_INTEGER          : return "i"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_CHARACTER) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"c");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":69
 *     # Fortran
 *     elif datatype == MPI_CHARACTER        : return "c"
 *     elif datatype == MPI_LOGICAL          : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INTEGER          : return "i"
 *     elif datatype == MPI_REAL             : return "f"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LOGICAL) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":70
 *     elif datatype == MPI_CHARACTER        : return "c"
 *     elif datatype == MPI_LOGICAL          : return NULL
 *     elif datatype == MPI_INTEGER          : return "i"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_REAL             : return "f"
 *     elif datatype == MPI_DOUBLE_PRECISION : return "d"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INTEGER) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":71
 *     elif datatype == MPI_LOGICAL          : return NULL
 *     elif datatype == MPI_INTEGER          : return "i"
 *     elif datatype == MPI_REAL             : return "f"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_DOUBLE_PRECISION : return "d"
 *     elif datatype == MPI_COMPLEX          : return "F"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_REAL) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"f");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":72
 *     elif datatype == MPI_INTEGER          : return "i"
 *     elif datatype == MPI_REAL             : return "f"
 *     elif datatype == MPI_DOUBLE_PRECISION : return "d"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_COMPLEX          : return "F"
 *     elif datatype == MPI_DOUBLE_COMPLEX   : return "D"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_DOUBLE_PRECISION) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"d");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":73
 *     elif datatype == MPI_REAL             : return "f"
 *     elif datatype == MPI_DOUBLE_PRECISION : return "d"
 *     elif datatype == MPI_COMPLEX          : return "F"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_DOUBLE_COMPLEX   : return "D"
 *     # Fortran 90
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"F");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":74
 *     elif datatype == MPI_DOUBLE_PRECISION : return "d"
 *     elif datatype == MPI_COMPLEX          : return "F"
 *     elif datatype == MPI_DOUBLE_COMPLEX   : return "D"             # <<<<<<<<<<<<<<
 *     # Fortran 90
 *     elif datatype == MPI_LOGICAL1  : return NULL
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_DOUBLE_COMPLEX) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"D");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":76
 *     elif datatype == MPI_DOUBLE_COMPLEX   : return "D"
 *     # Fortran 90
 *     elif datatype == MPI_LOGICAL1  : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LOGICAL2  : return NULL
 *     elif datatype == MPI_LOGICAL4  : return NULL
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LOGICAL1) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":77
 *     # Fortran 90
 *     elif datatype == MPI_LOGICAL1  : return NULL
 *     elif datatype == MPI_LOGICAL2  : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LOGICAL4  : return NULL
 *     elif datatype == MPI_LOGICAL8  : return NULL
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LOGICAL2) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":78
 *     elif datatype == MPI_LOGICAL1  : return NULL
 *     elif datatype == MPI_LOGICAL2  : return NULL
 *     elif datatype == MPI_LOGICAL4  : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_LOGICAL8  : return NULL
 *     elif datatype == MPI_INTEGER1  : return "i1"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LOGICAL4) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":79
 *     elif datatype == MPI_LOGICAL2  : return NULL
 *     elif datatype == MPI_LOGICAL4  : return NULL
 *     elif datatype == MPI_LOGICAL8  : return NULL             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INTEGER1  : return "i1"
 *     elif datatype == MPI_INTEGER2  : return "i2"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_LOGICAL8) != 0);
  if (__pyx_t_1) {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":80
 *     elif datatype == MPI_LOGICAL4  : return NULL
 *     elif datatype == MPI_LOGICAL8  : return NULL
 *     elif datatype == MPI_INTEGER1  : return "i1"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INTEGER2  : return "i2"
 *     elif datatype == MPI_INTEGER4  : return "i4"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INTEGER1) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i1");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":81
 *     elif datatype == MPI_LOGICAL8  : return NULL
 *     elif datatype == MPI_INTEGER1  : return "i1"
 *     elif datatype == MPI_INTEGER2  : return "i2"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INTEGER4  : return "i4"
 *     elif datatype == MPI_INTEGER8  : return "i8"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INTEGER2) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i2");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":82
 *     elif datatype == MPI_INTEGER1  : return "i1"
 *     elif datatype == MPI_INTEGER2  : return "i2"
 *     elif datatype == MPI_INTEGER4  : return "i4"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INTEGER8  : return "i8"
 *     elif datatype == MPI_INTEGER16 : return "i16"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INTEGER4) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i4");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":83
 *     elif datatype == MPI_INTEGER2  : return "i2"
 *     elif datatype == MPI_INTEGER4  : return "i4"
 *     elif datatype == MPI_INTEGER8  : return "i8"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_INTEGER16 : return "i16"
 *     elif datatype == MPI_REAL2     : return "f2"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INTEGER8) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i8");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":84
 *     elif datatype == MPI_INTEGER4  : return "i4"
 *     elif datatype == MPI_INTEGER8  : return "i8"
 *     elif datatype == MPI_INTEGER16 : return "i16"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_REAL2     : return "f2"
 *     elif datatype == MPI_REAL4     : return "f4"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_INTEGER16) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"i16");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":85
 *     elif datatype == MPI_INTEGER8  : return "i8"
 *     elif datatype == MPI_INTEGER16 : return "i16"
 *     elif datatype == MPI_REAL2     : return "f2"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_REAL4     : return "f4"
 *     elif datatype == MPI_REAL8     : return "f8"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_REAL2) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"f2");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":86
 *     elif datatype == MPI_INTEGER16 : return "i16"
 *     elif datatype == MPI_REAL2     : return "f2"
 *     elif datatype == MPI_REAL4     : return "f4"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_REAL8     : return "f8"
 *     elif datatype == MPI_REAL16    : return "f16"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_REAL4) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"f4");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":87
 *     elif datatype == MPI_REAL2     : return "f2"
 *     elif datatype == MPI_REAL4     : return "f4"
 *     elif datatype == MPI_REAL8     : return "f8"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_REAL16    : return "f16"
 *     elif datatype == MPI_COMPLEX4  : return "c4"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_REAL8) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"f8");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":88
 *     elif datatype == MPI_REAL4     : return "f4"
 *     elif datatype == MPI_REAL8     : return "f8"
 *     elif datatype == MPI_REAL16    : return "f16"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_COMPLEX4  : return "c4"
 *     elif datatype == MPI_COMPLEX8  : return "c8"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_REAL16) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"f16");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":89
 *     elif datatype == MPI_REAL8     : return "f8"
 *     elif datatype == MPI_REAL16    : return "f16"
 *     elif datatype == MPI_COMPLEX4  : return "c4"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_COMPLEX8  : return "c8"
 *     elif datatype == MPI_COMPLEX16 : return "c16"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_COMPLEX4) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"c4");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":90
 *     elif datatype == MPI_REAL16    : return "f16"
 *     elif datatype == MPI_COMPLEX4  : return "c4"
 *     elif datatype == MPI_COMPLEX8  : return "c8"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_COMPLEX16 : return "c16"
 *     elif datatype == MPI_COMPLEX32 : return "c32"
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_COMPLEX8) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"c8");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":91
 *     elif datatype == MPI_COMPLEX4  : return "c4"
 *     elif datatype == MPI_COMPLEX8  : return "c8"
 *     elif datatype == MPI_COMPLEX16 : return "c16"             # <<<<<<<<<<<<<<
 *     elif datatype == MPI_COMPLEX32 : return "c32"
 * 
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_COMPLEX16) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"c16");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":92
 *     elif datatype == MPI_COMPLEX8  : return "c8"
 *     elif datatype == MPI_COMPLEX16 : return "c16"
 *     elif datatype == MPI_COMPLEX32 : return "c32"             # <<<<<<<<<<<<<<
 * 
 *     else : return NULL
 */
  __pyx_t_1 = ((__pyx_v_datatype == MPI_COMPLEX32) != 0);
  if (__pyx_t_1) {
    __pyx_r = ((char const *)"c32");
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":94
 *     elif datatype == MPI_COMPLEX32 : return "c32"
 * 
 *     else : return NULL             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  /*else*/ {
    __pyx_r = NULL;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/typestr.pxi":12
 * # -----------------------------------------------------------------------------
 * 
 * cdef inline const char* Datatype2String(MPI_Datatype datatype) nogil:             # <<<<<<<<<<<<<<
 *     if datatype == MPI_DATATYPE_NULL: return NULL
 *     # MPI
 */

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":7
 *     """
 * 
 *     def __cinit__(self, Status status=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi.MPI_SOURCE = MPI_ANY_SOURCE
 *         self.ob_mpi.MPI_TAG    = MPI_ANY_TAG
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Status_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Status_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(24, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(24, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status___cinit__(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Status___cinit__(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Status __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Status.pyx":8
 * 
 *     def __cinit__(self, Status status=None):
 *         self.ob_mpi.MPI_SOURCE = MPI_ANY_SOURCE             # <<<<<<<<<<<<<<
 *         self.ob_mpi.MPI_TAG    = MPI_ANY_TAG
 *         self.ob_mpi.MPI_ERROR  = MPI_SUCCESS
 */
  __pyx_v_self->ob_mpi.MPI_SOURCE = MPI_ANY_SOURCE;

  /* "mpi4py/MPI/Status.pyx":9
 *     def __cinit__(self, Status status=None):
 *         self.ob_mpi.MPI_SOURCE = MPI_ANY_SOURCE
 *         self.ob_mpi.MPI_TAG    = MPI_ANY_TAG             # <<<<<<<<<<<<<<
 *         self.ob_mpi.MPI_ERROR  = MPI_SUCCESS
 *         if status is None: return
 */
  __pyx_v_self->ob_mpi.MPI_TAG = MPI_ANY_TAG;

  /* "mpi4py/MPI/Status.pyx":10
 *         self.ob_mpi.MPI_SOURCE = MPI_ANY_SOURCE
 *         self.ob_mpi.MPI_TAG    = MPI_ANY_TAG
 *         self.ob_mpi.MPI_ERROR  = MPI_SUCCESS             # <<<<<<<<<<<<<<
 *         if status is None: return
 *         self.ob_mpi = status.ob_mpi
 */
  __pyx_v_self->ob_mpi.MPI_ERROR = MPI_SUCCESS;

  /* "mpi4py/MPI/Status.pyx":11
 *         self.ob_mpi.MPI_TAG    = MPI_ANY_TAG
 *         self.ob_mpi.MPI_ERROR  = MPI_SUCCESS
 *         if status is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = status.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_status) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Status.pyx":12
 *         self.ob_mpi.MPI_ERROR  = MPI_SUCCESS
 *         if status is None: return
 *         self.ob_mpi = status.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_3 = __pyx_v_status->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Status.pyx":7
 *     """
 * 
 *     def __cinit__(self, Status status=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi.MPI_SOURCE = MPI_ANY_SOURCE
 *         self.ob_mpi.MPI_TAG    = MPI_ANY_TAG
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":14
 *         self.ob_mpi = status.ob_mpi
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Status): return NotImplemented
 *         cdef Status s = <Status>self, o = <Status>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_3__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_3__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_2__richcmp__(((struct PyMPIStatusObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_2__richcmp__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIStatusObject *__pyx_v_s = 0;
  struct PyMPIStatusObject *__pyx_v_o = 0;
  int __pyx_v_ne;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Status.pyx":15
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Status): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Status s = <Status>self, o = <Status>other
 *         cdef int ne = memcmp(&s.ob_mpi, &o.ob_mpi, sizeof(MPI_Status))
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Status); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Status.pyx":16
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Status): return NotImplemented
 *         cdef Status s = <Status>self, o = <Status>other             # <<<<<<<<<<<<<<
 *         cdef int ne = memcmp(&s.ob_mpi, &o.ob_mpi, sizeof(MPI_Status))
 *         if   op == Py_EQ: return (ne == 0)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIStatusObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIStatusObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Status.pyx":17
 *         if not isinstance(other, Status): return NotImplemented
 *         cdef Status s = <Status>self, o = <Status>other
 *         cdef int ne = memcmp(&s.ob_mpi, &o.ob_mpi, sizeof(MPI_Status))             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (ne == 0)
 *         elif op == Py_NE: return (ne != 0)
 */
  __pyx_v_ne = memcmp((&__pyx_v_s->ob_mpi), (&__pyx_v_o->ob_mpi), (sizeof(MPI_Status)));

  /* "mpi4py/MPI/Status.pyx":18
 *         cdef Status s = <Status>self, o = <Status>other
 *         cdef int ne = memcmp(&s.ob_mpi, &o.ob_mpi, sizeof(MPI_Status))
 *         if   op == Py_EQ: return (ne == 0)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (ne != 0)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_ne == 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 18, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Status.pyx":19
 *         cdef int ne = memcmp(&s.ob_mpi, &o.ob_mpi, sizeof(MPI_Status))
 *         if   op == Py_EQ: return (ne == 0)
 *         elif op == Py_NE: return (ne != 0)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_ne != 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 19, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Status.pyx":20
 *         if   op == Py_EQ: return (ne == 0)
 *         elif op == Py_NE: return (ne != 0)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Status.pyx":21
 *         elif op == Py_NE: return (ne != 0)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Status.pyx":22
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def Get_source(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(24, 22, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":14
 *         self.ob_mpi = status.ob_mpi
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Status): return NotImplemented
 *         cdef Status s = <Status>self, o = <Status>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Status.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":24
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def Get_source(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get message source
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_5Get_source(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_4Get_source[] = "Status.Get_source(self)\n\n        Get message source\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_5Get_source(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_source (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_source", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_source", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_4Get_source(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_4Get_source(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Get_source", 0);

  /* "mpi4py/MPI/Status.pyx":28
 *         Get message source
 *         """
 *         return self.ob_mpi.MPI_SOURCE             # <<<<<<<<<<<<<<
 * 
 *     def Set_source(self, int source):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ob_mpi.MPI_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":24
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def Get_source(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get message source
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_source", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":30
 *         return self.ob_mpi.MPI_SOURCE
 * 
 *     def Set_source(self, int source):             # <<<<<<<<<<<<<<
 *         """
 *         Set message source
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_7Set_source(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_6Set_source[] = "Status.Set_source(self, int source)\n\n        Set message source\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_7Set_source(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_source (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_source") < 0)) __PYX_ERR(24, 30, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(24, 30, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_source", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 30, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_source", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_6Set_source(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_source);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_6Set_source(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_source) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_source", 0);

  /* "mpi4py/MPI/Status.pyx":34
 *         Set message source
 *         """
 *         self.ob_mpi.MPI_SOURCE = source             # <<<<<<<<<<<<<<
 * 
 *     property source:
 */
  __pyx_v_self->ob_mpi.MPI_SOURCE = __pyx_v_source;

  /* "mpi4py/MPI/Status.pyx":30
 *         return self.ob_mpi.MPI_SOURCE
 * 
 *     def Set_source(self, int source):             # <<<<<<<<<<<<<<
 *         """
 *         Set message source
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":38
 *     property source:
 *         """source"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_source()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_6source_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_6source_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_6source___get__(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_6source___get__(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Status.pyx":39
 *         """source"""
 *         def __get__(self):
 *             return self.Get_source()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_source(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_source); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":38
 *     property source:
 *         """source"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_source()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.source.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":40
 *         def __get__(self):
 *             return self.Get_source()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_source(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Status_6source_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Status_6source_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_6source_2__set__(((struct PyMPIStatusObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Status_6source_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Status.pyx":41
 *             return self.Get_source()
 *         def __set__(self, value):
 *             self.Set_source(value)             # <<<<<<<<<<<<<<
 * 
 *     def Get_tag(self):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_source); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Status.pyx":40
 *         def __get__(self):
 *             return self.Get_source()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_source(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.source.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":43
 *             self.Set_source(value)
 * 
 *     def Get_tag(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get message tag
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_9Get_tag(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_8Get_tag[] = "Status.Get_tag(self)\n\n        Get message tag\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_9Get_tag(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_tag (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_tag", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_tag", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_8Get_tag(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_8Get_tag(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Get_tag", 0);

  /* "mpi4py/MPI/Status.pyx":47
 *         Get message tag
 *         """
 *         return self.ob_mpi.MPI_TAG             # <<<<<<<<<<<<<<
 * 
 *     def Set_tag(self, int tag):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ob_mpi.MPI_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":43
 *             self.Set_source(value)
 * 
 *     def Get_tag(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get message tag
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":49
 *         return self.ob_mpi.MPI_TAG
 * 
 *     def Set_tag(self, int tag):             # <<<<<<<<<<<<<<
 *         """
 *         Set message tag
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_11Set_tag(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_10Set_tag[] = "Status.Set_tag(self, int tag)\n\n        Set message tag\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_11Set_tag(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_tag (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tag,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_tag") < 0)) __PYX_ERR(24, 49, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_tag = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(24, 49, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_tag", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 49, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_10Set_tag(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_10Set_tag(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_tag", 0);

  /* "mpi4py/MPI/Status.pyx":53
 *         Set message tag
 *         """
 *         self.ob_mpi.MPI_TAG = tag             # <<<<<<<<<<<<<<
 * 
 *     property tag:
 */
  __pyx_v_self->ob_mpi.MPI_TAG = __pyx_v_tag;

  /* "mpi4py/MPI/Status.pyx":49
 *         return self.ob_mpi.MPI_TAG
 * 
 *     def Set_tag(self, int tag):             # <<<<<<<<<<<<<<
 *         """
 *         Set message tag
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":57
 *     property tag:
 *         """tag"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_tag()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_3tag_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_3tag_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_3tag___get__(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_3tag___get__(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Status.pyx":58
 *         """tag"""
 *         def __get__(self):
 *             return self.Get_tag()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_tag(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":57
 *     property tag:
 *         """tag"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_tag()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.tag.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":59
 *         def __get__(self):
 *             return self.Get_tag()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_tag(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Status_3tag_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Status_3tag_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_3tag_2__set__(((struct PyMPIStatusObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Status_3tag_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Status.pyx":60
 *             return self.Get_tag()
 *         def __set__(self, value):
 *             self.Set_tag(value)             # <<<<<<<<<<<<<<
 * 
 *     def Get_error(self):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_tag); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Status.pyx":59
 *         def __get__(self):
 *             return self.Get_tag()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_tag(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.tag.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":62
 *             self.Set_tag(value)
 * 
 *     def Get_error(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get message error
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_13Get_error(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_12Get_error[] = "Status.Get_error(self)\n\n        Get message error\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_13Get_error(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_error (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_error", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_error", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_12Get_error(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_12Get_error(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Get_error", 0);

  /* "mpi4py/MPI/Status.pyx":66
 *         Get message error
 *         """
 *         return self.ob_mpi.MPI_ERROR             # <<<<<<<<<<<<<<
 * 
 *     def Set_error(self, int error):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ob_mpi.MPI_ERROR); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":62
 *             self.Set_tag(value)
 * 
 *     def Get_error(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get message error
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":68
 *         return self.ob_mpi.MPI_ERROR
 * 
 *     def Set_error(self, int error):             # <<<<<<<<<<<<<<
 *         """
 *         Set message error
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_15Set_error(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_14Set_error[] = "Status.Set_error(self, int error)\n\n        Set message error\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_15Set_error(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_error;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_error (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_error,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_error)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_error") < 0)) __PYX_ERR(24, 68, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_error = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_error == (int)-1) && PyErr_Occurred())) __PYX_ERR(24, 68, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_error", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 68, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_14Set_error(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_error);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_14Set_error(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_error) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_error", 0);

  /* "mpi4py/MPI/Status.pyx":72
 *         Set message error
 *         """
 *         self.ob_mpi.MPI_ERROR = error             # <<<<<<<<<<<<<<
 * 
 *     property error:
 */
  __pyx_v_self->ob_mpi.MPI_ERROR = __pyx_v_error;

  /* "mpi4py/MPI/Status.pyx":68
 *         return self.ob_mpi.MPI_ERROR
 * 
 *     def Set_error(self, int error):             # <<<<<<<<<<<<<<
 *         """
 *         Set message error
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":76
 *     property error:
 *         """error"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_error()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_5error_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_5error_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_5error___get__(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_5error___get__(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Status.pyx":77
 *         """error"""
 *         def __get__(self):
 *             return self.Get_error()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_error(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_error); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":76
 *     property error:
 *         """error"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_error()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.error.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":78
 *         def __get__(self):
 *             return self.Get_error()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_error(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Status_5error_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Status_5error_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_5error_2__set__(((struct PyMPIStatusObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Status_5error_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Status.pyx":79
 *             return self.Get_error()
 *         def __set__(self, value):
 *             self.Set_error(value)             # <<<<<<<<<<<<<<
 * 
 *     def Get_count(self, Datatype datatype=BYTE):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_error); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Status.pyx":78
 *         def __get__(self):
 *             return self.Get_error()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_error(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.error.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":81
 *             self.Set_error(value)
 * 
 *     def Get_count(self, Datatype datatype=BYTE):             # <<<<<<<<<<<<<<
 *         """
 *         Get the number of *top level* elements
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_17Get_count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_16Get_count[] = "Status.Get_count(self, Datatype datatype=BYTE)\n\n        Get the number of *top level* elements\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_17Get_count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_count (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datatype,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)__pyx_k__28;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatype);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_count") < 0)) __PYX_ERR(24, 81, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_datatype = ((struct PyMPIDatatypeObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_count", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 81, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_datatype), __pyx_ptype_6mpi4py_3MPI_Datatype, 0, "datatype", 0))) __PYX_ERR(24, 81, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_16Get_count(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_datatype);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_16Get_count(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype) {
  MPI_Datatype __pyx_v_dtype;
  int __pyx_v_count;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Datatype __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_count", 0);

  /* "mpi4py/MPI/Status.pyx":85
 *         Get the number of *top level* elements
 *         """
 *         cdef MPI_Datatype dtype = datatype.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef int count = MPI_UNDEFINED
 *         CHKERR( MPI_Get_count(&self.ob_mpi, dtype, &count) )
 */
  __pyx_t_1 = __pyx_v_datatype->ob_mpi;
  __pyx_v_dtype = __pyx_t_1;

  /* "mpi4py/MPI/Status.pyx":86
 *         """
 *         cdef MPI_Datatype dtype = datatype.ob_mpi
 *         cdef int count = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Get_count(&self.ob_mpi, dtype, &count) )
 *         return count
 */
  __pyx_v_count = MPI_UNDEFINED;

  /* "mpi4py/MPI/Status.pyx":87
 *         cdef MPI_Datatype dtype = datatype.ob_mpi
 *         cdef int count = MPI_UNDEFINED
 *         CHKERR( MPI_Get_count(&self.ob_mpi, dtype, &count) )             # <<<<<<<<<<<<<<
 *         return count
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_count((&__pyx_v_self->ob_mpi), __pyx_v_dtype, (&__pyx_v_count))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 87, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":88
 *         cdef int count = MPI_UNDEFINED
 *         CHKERR( MPI_Get_count(&self.ob_mpi, dtype, &count) )
 *         return count             # <<<<<<<<<<<<<<
 * 
 *     property count:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":81
 *             self.Set_error(value)
 * 
 *     def Get_count(self, Datatype datatype=BYTE):             # <<<<<<<<<<<<<<
 *         """
 *         Get the number of *top level* elements
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":92
 *     property count:
 *         """byte count"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_count(__BYTE__)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_5count_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_5count_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_5count___get__(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_5count___get__(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Status.pyx":93
 *         """byte count"""
 *         def __get__(self):
 *             return self.Get_count(__BYTE__)             # <<<<<<<<<<<<<<
 * 
 *     def Get_elements(self, Datatype datatype):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_6mpi4py_3MPI___BYTE__)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_6mpi4py_3MPI___BYTE__));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":92
 *     property count:
 *         """byte count"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_count(__BYTE__)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":95
 *             return self.Get_count(__BYTE__)
 * 
 *     def Get_elements(self, Datatype datatype):             # <<<<<<<<<<<<<<
 *         """
 *         Get the number of basic elements in a datatype
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_19Get_elements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_18Get_elements[] = "Status.Get_elements(self, Datatype datatype)\n\n        Get the number of basic elements in a datatype\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_19Get_elements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_elements (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datatype,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatype)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_elements") < 0)) __PYX_ERR(24, 95, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_datatype = ((struct PyMPIDatatypeObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_elements", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 95, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_elements", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_datatype), __pyx_ptype_6mpi4py_3MPI_Datatype, 0, "datatype", 0))) __PYX_ERR(24, 95, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_18Get_elements(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_datatype);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_18Get_elements(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype) {
  MPI_Datatype __pyx_v_dtype;
  MPI_Count __pyx_v_elements;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Datatype __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_elements", 0);

  /* "mpi4py/MPI/Status.pyx":99
 *         Get the number of basic elements in a datatype
 *         """
 *         cdef MPI_Datatype dtype = datatype.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Count elements = MPI_UNDEFINED
 *         CHKERR( MPI_Get_elements_x(&self.ob_mpi, dtype, &elements) )
 */
  __pyx_t_1 = __pyx_v_datatype->ob_mpi;
  __pyx_v_dtype = __pyx_t_1;

  /* "mpi4py/MPI/Status.pyx":100
 *         """
 *         cdef MPI_Datatype dtype = datatype.ob_mpi
 *         cdef MPI_Count elements = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Get_elements_x(&self.ob_mpi, dtype, &elements) )
 *         return elements
 */
  __pyx_v_elements = MPI_UNDEFINED;

  /* "mpi4py/MPI/Status.pyx":101
 *         cdef MPI_Datatype dtype = datatype.ob_mpi
 *         cdef MPI_Count elements = MPI_UNDEFINED
 *         CHKERR( MPI_Get_elements_x(&self.ob_mpi, dtype, &elements) )             # <<<<<<<<<<<<<<
 *         return elements
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_elements_x((&__pyx_v_self->ob_mpi), __pyx_v_dtype, (&__pyx_v_elements))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 101, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":102
 *         cdef MPI_Count elements = MPI_UNDEFINED
 *         CHKERR( MPI_Get_elements_x(&self.ob_mpi, dtype, &elements) )
 *         return elements             # <<<<<<<<<<<<<<
 * 
 *     def Set_elements(self, Datatype datatype, Count count):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Count(__pyx_v_elements); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":95
 *             return self.Get_count(__BYTE__)
 * 
 *     def Get_elements(self, Datatype datatype):             # <<<<<<<<<<<<<<
 *         """
 *         Get the number of basic elements in a datatype
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.Get_elements", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":104
 *         return elements
 * 
 *     def Set_elements(self, Datatype datatype, Count count):             # <<<<<<<<<<<<<<
 *         """
 *         Set the number of elements in a status
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_21Set_elements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_20Set_elements[] = "Status.Set_elements(self, Datatype datatype, Count count)\n\n        Set the number of elements in a status\n\n        .. note:: This should be only used when implementing\n           query callback functions for generalized requests\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_21Set_elements(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  MPI_Count __pyx_v_count;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_elements (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datatype,&__pyx_n_s_count,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatype)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Set_elements", 1, 2, 2, 1); __PYX_ERR(24, 104, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_elements") < 0)) __PYX_ERR(24, 104, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_datatype = ((struct PyMPIDatatypeObject *)values[0]);
    __pyx_v_count = __Pyx_PyInt_As_MPI_Count(values[1]); if (unlikely((__pyx_v_count == ((MPI_Count)-1)) && PyErr_Occurred())) __PYX_ERR(24, 104, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_elements", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 104, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_elements", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_datatype), __pyx_ptype_6mpi4py_3MPI_Datatype, 0, "datatype", 0))) __PYX_ERR(24, 104, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_20Set_elements(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_datatype, __pyx_v_count);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_20Set_elements(struct PyMPIStatusObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype, MPI_Count __pyx_v_count) {
  MPI_Datatype __pyx_v_dtype;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Datatype __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Set_elements", 0);

  /* "mpi4py/MPI/Status.pyx":111
 *            query callback functions for generalized requests
 *         """
 *         cdef MPI_Datatype dtype = datatype.ob_mpi             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Status_set_elements_x(&self.ob_mpi, dtype, count) )
 * 
 */
  __pyx_t_1 = __pyx_v_datatype->ob_mpi;
  __pyx_v_dtype = __pyx_t_1;

  /* "mpi4py/MPI/Status.pyx":112
 *         """
 *         cdef MPI_Datatype dtype = datatype.ob_mpi
 *         CHKERR( MPI_Status_set_elements_x(&self.ob_mpi, dtype, count) )             # <<<<<<<<<<<<<<
 * 
 *     def Is_cancelled(self):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Status_set_elements_x((&__pyx_v_self->ob_mpi), __pyx_v_dtype, __pyx_v_count)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 112, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":104
 *         return elements
 * 
 *     def Set_elements(self, Datatype datatype, Count count):             # <<<<<<<<<<<<<<
 *         """
 *         Set the number of elements in a status
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_elements", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":114
 *         CHKERR( MPI_Status_set_elements_x(&self.ob_mpi, dtype, count) )
 * 
 *     def Is_cancelled(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test to see if a request was cancelled
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_23Is_cancelled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_22Is_cancelled[] = "Status.Is_cancelled(self)\n\n        Test to see if a request was cancelled\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_23Is_cancelled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_cancelled (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_cancelled", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_cancelled", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_22Is_cancelled(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_22Is_cancelled(struct PyMPIStatusObject *__pyx_v_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Is_cancelled", 0);

  /* "mpi4py/MPI/Status.pyx":118
 *         Test to see if a request was cancelled
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Test_cancelled(&self.ob_mpi, &flag) )
 *         return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Status.pyx":119
 *         """
 *         cdef int flag = 0
 *         CHKERR( MPI_Test_cancelled(&self.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Test_cancelled((&__pyx_v_self->ob_mpi), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(24, 119, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":120
 *         cdef int flag = 0
 *         CHKERR( MPI_Test_cancelled(&self.ob_mpi, &flag) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     def Set_cancelled(self, bint flag):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":114
 *         CHKERR( MPI_Status_set_elements_x(&self.ob_mpi, dtype, count) )
 * 
 *     def Is_cancelled(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test to see if a request was cancelled
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Status.Is_cancelled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":122
 *         return <bint>flag
 * 
 *     def Set_cancelled(self, bint flag):             # <<<<<<<<<<<<<<
 *         """
 *         Set the cancelled state associated with a status
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_25Set_cancelled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_24Set_cancelled[] = "Status.Set_cancelled(self, bool flag)\n\n        Set the cancelled state associated with a status\n\n        .. note:: This should be only used when implementing\n           query callback functions for generalized requests\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_25Set_cancelled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_flag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_cancelled (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_cancelled") < 0)) __PYX_ERR(24, 122, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(24, 122, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_cancelled", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 122, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_cancelled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_24Set_cancelled(((struct PyMPIStatusObject *)__pyx_v_self), __pyx_v_flag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_24Set_cancelled(struct PyMPIStatusObject *__pyx_v_self, int __pyx_v_flag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_cancelled", 0);

  /* "mpi4py/MPI/Status.pyx":129
 *            query callback functions for generalized requests
 *         """
 *         CHKERR( MPI_Status_set_cancelled(&self.ob_mpi, flag) )             # <<<<<<<<<<<<<<
 * 
 *     property cancelled:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Status_set_cancelled((&__pyx_v_self->ob_mpi), __pyx_v_flag)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(24, 129, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":122
 *         return <bint>flag
 * 
 *     def Set_cancelled(self, bint flag):             # <<<<<<<<<<<<<<
 *         """
 *         Set the cancelled state associated with a status
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.Set_cancelled", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":135
 *         cancelled state
 *         """
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_cancelled()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_9cancelled_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_9cancelled_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_9cancelled___get__(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_9cancelled___get__(struct PyMPIStatusObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Status.pyx":136
 *         """
 *         def __get__(self):
 *             return self.Is_cancelled()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_cancelled(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Is_cancelled); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":135
 *         cancelled state
 *         """
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_cancelled()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.cancelled.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":137
 *         def __get__(self):
 *             return self.Is_cancelled()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_cancelled(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_6Status_9cancelled_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_6Status_9cancelled_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_9cancelled_2__set__(((struct PyMPIStatusObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_6Status_9cancelled_2__set__(struct PyMPIStatusObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Status.pyx":138
 *             return self.Is_cancelled()
 *         def __set__(self, value):
 *             self.Set_cancelled(value)             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_cancelled); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Status.pyx":137
 *         def __get__(self):
 *             return self.Is_cancelled()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_cancelled(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Status.cancelled.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":143
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_27py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_26py2f[] = "Status.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_27py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_26py2f(((struct PyMPIStatusObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_26py2f(struct PyMPIStatusObject *__pyx_v_self) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  MPI_Status *__pyx_v_c_status;
  MPI_Fint *__pyx_v_f_status;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Status.pyx":146
 *         """
 *         """
 *         cdef Status status = <Status> self             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t i = 0
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_status = ((struct PyMPIStatusObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Status.pyx":147
 *         """
 *         cdef Status status = <Status> self
 *         cdef Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 *         cdef MPI_Status *c_status = &status.ob_mpi
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Status.pyx":148
 *         cdef Status status = <Status> self
 *         cdef Py_ssize_t i = 0
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *c_status = &status.ob_mpi
 *         cdef MPI_Fint *f_status = NULL
 */
  __pyx_v_n = ((int)((sizeof(MPI_Status)) / (sizeof(int))));

  /* "mpi4py/MPI/Status.pyx":149
 *         cdef Py_ssize_t i = 0
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 *         cdef MPI_Status *c_status = &status.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Fint *f_status = NULL
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 */
  __pyx_v_c_status = (&__pyx_v_status->ob_mpi);

  /* "mpi4py/MPI/Status.pyx":150
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 *         cdef MPI_Status *c_status = &status.ob_mpi
 *         cdef MPI_Fint *f_status = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 *         CHKERR( MPI_Status_c2f(c_status, f_status) )
 */
  __pyx_v_f_status = NULL;

  /* "mpi4py/MPI/Status.pyx":151
 *         cdef MPI_Status *c_status = &status.ob_mpi
 *         cdef MPI_Fint *f_status = NULL
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Status_c2f(c_status, f_status) )
 *         return [f_status[i] for i from 0 <= i < n]
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((__pyx_v_n + 1), (sizeof(MPI_Fint)), (&__pyx_v_f_status))); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Status.pyx":152
 *         cdef MPI_Fint *f_status = NULL
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 *         CHKERR( MPI_Status_c2f(c_status, f_status) )             # <<<<<<<<<<<<<<
 *         return [f_status[i] for i from 0 <= i < n]
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Status_c2f(__pyx_v_c_status, __pyx_v_f_status)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 152, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":153
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 *         CHKERR( MPI_Status_c2f(c_status, f_status) )
 *         return [f_status[i] for i from 0 <= i < n]             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
    __pyx_t_4 = __Pyx_PyInt_From_MPI_Fint((__pyx_v_f_status[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(24, 153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(24, 153, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":143
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Status.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_status);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Status.pyx":156
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_29f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_6Status_28f2py[] = "Status.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_6Status_29f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(24, 156, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(24, 156, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Status.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_6Status_28f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_6Status_28f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_n;
  MPI_Status *__pyx_v_c_status;
  MPI_Fint *__pyx_v_f_status;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  MPI_Fint __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Status.pyx":159
 *         """
 *         """
 *         cdef Status status = <Status> Status.__new__(Status)             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t i = 0
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Status(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Status), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 159, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_status = ((struct PyMPIStatusObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Status.pyx":160
 *         """
 *         cdef Status status = <Status> Status.__new__(Status)
 *         cdef Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 *         cdef MPI_Status *c_status = &status.ob_mpi
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Status.pyx":161
 *         cdef Status status = <Status> Status.__new__(Status)
 *         cdef Py_ssize_t i = 0
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *c_status = &status.ob_mpi
 *         cdef MPI_Fint *f_status = NULL
 */
  __pyx_v_n = ((int)((sizeof(MPI_Status)) / (sizeof(int))));

  /* "mpi4py/MPI/Status.pyx":162
 *         cdef Py_ssize_t i = 0
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 *         cdef MPI_Status *c_status = &status.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Fint *f_status = NULL
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 */
  __pyx_v_c_status = (&__pyx_v_status->ob_mpi);

  /* "mpi4py/MPI/Status.pyx":163
 *         cdef Py_ssize_t n = <int>(sizeof(MPI_Status)/sizeof(int))
 *         cdef MPI_Status *c_status = &status.ob_mpi
 *         cdef MPI_Fint *f_status = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 *         for i from 0 <= i < n: f_status[i] = arg[i]
 */
  __pyx_v_f_status = NULL;

  /* "mpi4py/MPI/Status.pyx":164
 *         cdef MPI_Status *c_status = &status.ob_mpi
 *         cdef MPI_Fint *f_status = NULL
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < n: f_status[i] = arg[i]
 *         CHKERR( MPI_Status_f2c(f_status, c_status) )
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((__pyx_v_n + 1), (sizeof(MPI_Fint)), (&__pyx_v_f_status))); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Status.pyx":165
 *         cdef MPI_Fint *f_status = NULL
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 *         for i from 0 <= i < n: f_status[i] = arg[i]             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Status_f2c(f_status, c_status) )
 *         return status
 */
  __pyx_t_3 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_arg, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 165, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyInt_As_MPI_Fint(__pyx_t_2); if (unlikely((__pyx_t_4 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(24, 165, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    (__pyx_v_f_status[__pyx_v_i]) = __pyx_t_4;
  }

  /* "mpi4py/MPI/Status.pyx":166
 *         cdef tmp = allocate(n+1, sizeof(MPI_Fint), &f_status)
 *         for i from 0 <= i < n: f_status[i] = arg[i]
 *         CHKERR( MPI_Status_f2c(f_status, c_status) )             # <<<<<<<<<<<<<<
 *         return status
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Status_f2c(__pyx_v_f_status, __pyx_v_c_status)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(24, 166, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":167
 *         for i from 0 <= i < n: f_status[i] = arg[i]
 *         CHKERR( MPI_Status_f2c(f_status, c_status) )
 *         return status             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_status));
  __pyx_r = ((PyObject *)__pyx_v_status);
  goto __pyx_L0;

  /* "mpi4py/MPI/Status.pyx":156
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Status.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_status);
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":7
 *     """
 * 
 *     def __cinit__(self, Request request=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_REQUEST_NULL
 *         if request is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_7Request_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_7Request_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIRequestObject *__pyx_v_request = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIRequestObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_request);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(25, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_request = ((struct PyMPIRequestObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_request), __pyx_ptype_6mpi4py_3MPI_Request, 1, "request", 0))) __PYX_ERR(25, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request___cinit__(((struct PyMPIRequestObject *)__pyx_v_self), __pyx_v_request);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_7Request___cinit__(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIRequestObject *__pyx_v_request) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Request __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Request.pyx":8
 * 
 *     def __cinit__(self, Request request=None):
 *         self.ob_mpi = MPI_REQUEST_NULL             # <<<<<<<<<<<<<<
 *         if request is None: return
 *         self.ob_mpi = request.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_REQUEST_NULL;

  /* "mpi4py/MPI/Request.pyx":9
 *     def __cinit__(self, Request request=None):
 *         self.ob_mpi = MPI_REQUEST_NULL
 *         if request is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = request.ob_mpi
 *         self.ob_buf = request.ob_buf
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_request) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":10
 *         self.ob_mpi = MPI_REQUEST_NULL
 *         if request is None: return
 *         self.ob_mpi = request.ob_mpi             # <<<<<<<<<<<<<<
 *         self.ob_buf = request.ob_buf
 * 
 */
  __pyx_t_3 = __pyx_v_request->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Request.pyx":11
 *         if request is None: return
 *         self.ob_mpi = request.ob_mpi
 *         self.ob_buf = request.ob_buf             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_4 = __pyx_v_request->ob_buf;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->ob_buf);
  __Pyx_DECREF(__pyx_v_self->ob_buf);
  __pyx_v_self->ob_buf = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Request.pyx":7
 *     """
 * 
 *     def __cinit__(self, Request request=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_REQUEST_NULL
 *         if request is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":13
 *         self.ob_buf = request.ob_buf
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Request(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_7Request_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_7Request_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_7Request_2__dealloc__(((struct PyMPIRequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_7Request_2__dealloc__(struct PyMPIRequestObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Request.pyx":14
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Request(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":15
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Request(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Request((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 15, __pyx_L1_error)

  /* "mpi4py/MPI/Request.pyx":13
 *         self.ob_buf = request.ob_buf
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Request(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Request.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Request.pyx":17
 *         CHKERR( del_Request(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Request): return NotImplemented
 *         cdef Request s = <Request>self, o = <Request>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_4__richcmp__(((struct PyMPIRequestObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_4__richcmp__(struct PyMPIRequestObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIRequestObject *__pyx_v_s = 0;
  struct PyMPIRequestObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Request.pyx":18
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Request): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Request s = <Request>self, o = <Request>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Request); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":19
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Request): return NotImplemented
 *         cdef Request s = <Request>self, o = <Request>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Request.pyx":20
 *         if not isinstance(other, Request): return NotImplemented
 *         cdef Request s = <Request>self, o = <Request>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":21
 *         cdef Request s = <Request>self, o = <Request>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 21, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":22
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Request.pyx":23
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Request.pyx":24
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(25, 24, __pyx_L1_error)

  /* "mpi4py/MPI/Request.pyx":17
 *         CHKERR( del_Request(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Request): return NotImplemented
 *         cdef Request s = <Request>self, o = <Request>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Request.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":26
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_REQUEST_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_7Request_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_7Request_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_6__bool__(((struct PyMPIRequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_7Request_6__bool__(struct PyMPIRequestObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Request.pyx":27
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_REQUEST_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Completion Operations
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_REQUEST_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":26
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_REQUEST_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":32
 *     # ---------------------
 * 
 *     def Wait(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for a send or receive to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_9Wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_8Wait[] = "Request.Wait(self, Status status=None)\n\n        Wait for a send or receive to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_9Wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Wait (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Wait") < 0)) __PYX_ERR(25, 32, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Wait", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 32, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 32, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_8Wait(((struct PyMPIRequestObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_8Wait(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Wait", 0);

  /* "mpi4py/MPI/Request.pyx":36
 *         Wait for a send or receive to complete
 *         """
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Wait(
 *             &self.ob_mpi, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Request.pyx":37
 *         """
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Wait(             # <<<<<<<<<<<<<<
 *             &self.ob_mpi, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Request.pyx":38
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Wait(
 *             &self.ob_mpi, statusp) )             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 *             self.ob_buf = None
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Wait((&__pyx_v_self->ob_mpi), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 37, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Request.pyx":37
 *         """
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Wait(             # <<<<<<<<<<<<<<
 *             &self.ob_mpi, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":39
 *         with nogil: CHKERR( MPI_Wait(
 *             &self.ob_mpi, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             self.ob_buf = None
 *         return True
 */
  __pyx_t_2 = ((__pyx_v_self->ob_mpi == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Request.pyx":40
 *             &self.ob_mpi, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 *             self.ob_buf = None             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->ob_buf);
    __Pyx_DECREF(__pyx_v_self->ob_buf);
    __pyx_v_self->ob_buf = Py_None;

    /* "mpi4py/MPI/Request.pyx":39
 *         with nogil: CHKERR( MPI_Wait(
 *             &self.ob_mpi, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             self.ob_buf = None
 *         return True
 */
  }

  /* "mpi4py/MPI/Request.pyx":41
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 *             self.ob_buf = None
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     def Test(self, Status status=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":32
 *     # ---------------------
 * 
 *     def Wait(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for a send or receive to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":43
 *         return True
 * 
 *     def Test(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for the completion of a send or receive
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_11Test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_10Test[] = "Request.Test(self, Status status=None)\n\n        Test for the completion of a send or receive\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_11Test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Test (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Test") < 0)) __PYX_ERR(25, 43, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Test", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 43, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 43, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_10Test(((struct PyMPIRequestObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_10Test(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Test", 0);

  /* "mpi4py/MPI/Request.pyx":47
 *         Test for the completion of a send or receive
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Test(
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":48
 *         """
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Test(
 *             &self.ob_mpi, &flag, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Request.pyx":49
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Test(             # <<<<<<<<<<<<<<
 *             &self.ob_mpi, &flag, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Request.pyx":50
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Test(
 *             &self.ob_mpi, &flag, statusp) )             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 *             self.ob_buf = None
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Test((&__pyx_v_self->ob_mpi), (&__pyx_v_flag), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 49, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Request.pyx":49
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Test(             # <<<<<<<<<<<<<<
 *             &self.ob_mpi, &flag, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":51
 *         with nogil: CHKERR( MPI_Test(
 *             &self.ob_mpi, &flag, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             self.ob_buf = None
 *         return <bint>flag
 */
  __pyx_t_2 = ((__pyx_v_self->ob_mpi == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Request.pyx":52
 *             &self.ob_mpi, &flag, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 *             self.ob_buf = None             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->ob_buf);
    __Pyx_DECREF(__pyx_v_self->ob_buf);
    __pyx_v_self->ob_buf = Py_None;

    /* "mpi4py/MPI/Request.pyx":51
 *         with nogil: CHKERR( MPI_Test(
 *             &self.ob_mpi, &flag, statusp) )
 *         if self.ob_mpi == MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             self.ob_buf = None
 *         return <bint>flag
 */
  }

  /* "mpi4py/MPI/Request.pyx":53
 *         if self.ob_mpi == MPI_REQUEST_NULL:
 *             self.ob_buf = None
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     def Free(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":43
 *         return True
 * 
 *     def Test(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for the completion of a send or receive
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":55
 *         return <bint>flag
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a communication request
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_13Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_12Free[] = "Request.Free(self)\n\n        Free a communication request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_13Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_12Free(((struct PyMPIRequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_12Free(struct PyMPIRequestObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Request.pyx":59
 *         Free a communication request
 *         """
 *         with nogil: CHKERR( MPI_Request_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_status(self, Status status=None):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Request_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 59, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":55
 *         return <bint>flag
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a communication request
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":61
 *         with nogil: CHKERR( MPI_Request_free(&self.ob_mpi) )
 * 
 *     def Get_status(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Non-destructive test for the completion of a request
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_15Get_status(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_14Get_status[] = "Request.Get_status(self, Status status=None)\n\n        Non-destructive test for the completion of a request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_15Get_status(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_status (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_status") < 0)) __PYX_ERR(25, 61, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_status", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 61, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Get_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 61, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_14Get_status(((struct PyMPIRequestObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_14Get_status(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_status", 0);

  /* "mpi4py/MPI/Request.pyx":65
 *         Non-destructive test for the completion of a request
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Request_get_status(
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":66
 *         """
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Request_get_status(
 *             self.ob_mpi, &flag, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Request.pyx":67
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Request_get_status(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &flag, statusp) )
 *         return <bint>flag
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Request.pyx":68
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Request_get_status(
 *             self.ob_mpi, &flag, statusp) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Request_get_status(__pyx_v_self->ob_mpi, (&__pyx_v_flag), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 67, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Request.pyx":67
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Request_get_status(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &flag, statusp) )
 *         return <bint>flag
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":69
 *         with nogil: CHKERR( MPI_Request_get_status(
 *             self.ob_mpi, &flag, statusp) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     # Multiple Completions
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":61
 *         with nogil: CHKERR( MPI_Request_free(&self.ob_mpi) )
 * 
 *     def Get_status(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Non-destructive test for the completion of a request
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Get_status", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":75
 * 
 *     @classmethod
 *     def Waitany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for any previously initiated request to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_17Waitany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_16Waitany[] = "Request.Waitany(type cls, requests, Status status=None)\n\n        Wait for any previously initiated request to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_17Waitany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Waitany (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Waitany") < 0)) __PYX_ERR(25, 75, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Waitany", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 75, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Waitany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 75, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_16Waitany(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_16Waitany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  int __pyx_v_index;
  MPI_Status *__pyx_v_statusp;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("Waitany", 0);

  /* "mpi4py/MPI/Request.pyx":79
 *         Wait for any previously initiated request to complete
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef int index = MPI_UNDEFINED
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Request.pyx":80
 *         """
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef int index = MPI_UNDEFINED
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":81
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef int index = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         #
 */
  __pyx_v_index = MPI_UNDEFINED;

  /* "mpi4py/MPI/Request.pyx":82
 *         cdef MPI_Request *irequests = NULL
 *         cdef int index = MPI_UNDEFINED
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         #
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Request.pyx":84
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         #
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)             # <<<<<<<<<<<<<<
 *         try:
 *             with nogil: CHKERR( MPI_Waitany(
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_None, (&__pyx_v_count), (&__pyx_v_irequests), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":85
 *         #
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Waitany(
 *                 count, irequests, &index, statusp) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":86
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         try:
 *             with nogil: CHKERR( MPI_Waitany(             # <<<<<<<<<<<<<<
 *                 count, irequests, &index, statusp) )
 *         finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Request.pyx":87
 *         try:
 *             with nogil: CHKERR( MPI_Waitany(
 *                 count, irequests, &index, statusp) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Waitany(__pyx_v_count, __pyx_v_irequests, (&__pyx_v_index), __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 86, __pyx_L7_error)
        }

        /* "mpi4py/MPI/Request.pyx":86
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         try:
 *             with nogil: CHKERR( MPI_Waitany(             # <<<<<<<<<<<<<<
 *                 count, irequests, &index, statusp) )
 *         finally:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":89
 *                 count, irequests, &index, statusp) )
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)             # <<<<<<<<<<<<<<
 *         return index
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 89, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 89, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":90
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)
 *         return index             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":75
 * 
 *     @classmethod
 *     def Waitany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for any previously initiated request to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Waitany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":93
 * 
 *     @classmethod
 *     def Testany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of any previously initiated request
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_19Testany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_18Testany[] = "Request.Testany(type cls, requests, Status status=None)\n\n        Test for completion of any previously initiated request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_19Testany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Testany (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Testany") < 0)) __PYX_ERR(25, 93, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Testany", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 93, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Testany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 93, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_18Testany(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_18Testany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  int __pyx_v_index;
  int __pyx_v_flag;
  MPI_Status *__pyx_v_statusp;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  __Pyx_RefNannySetupContext("Testany", 0);

  /* "mpi4py/MPI/Request.pyx":97
 *         Test for completion of any previously initiated request
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef int index = MPI_UNDEFINED
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Request.pyx":98
 *         """
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef int index = MPI_UNDEFINED
 *         cdef int flag = 0
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":99
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef int index = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_v_index = MPI_UNDEFINED;

  /* "mpi4py/MPI/Request.pyx":100
 *         cdef MPI_Request *irequests = NULL
 *         cdef int index = MPI_UNDEFINED
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         #
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":101
 *         cdef int index = MPI_UNDEFINED
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         #
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Request.pyx":103
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         #
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)             # <<<<<<<<<<<<<<
 *         try:
 *             with nogil: CHKERR( MPI_Testany(
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_None, (&__pyx_v_count), (&__pyx_v_irequests), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":104
 *         #
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Testany(
 *                 count, irequests, &index, &flag, statusp) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":105
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         try:
 *             with nogil: CHKERR( MPI_Testany(             # <<<<<<<<<<<<<<
 *                 count, irequests, &index, &flag, statusp) )
 *         finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Request.pyx":106
 *         try:
 *             with nogil: CHKERR( MPI_Testany(
 *                 count, irequests, &index, &flag, statusp) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Testany(__pyx_v_count, __pyx_v_irequests, (&__pyx_v_index), (&__pyx_v_flag), __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 105, __pyx_L7_error)
        }

        /* "mpi4py/MPI/Request.pyx":105
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         try:
 *             with nogil: CHKERR( MPI_Testany(             # <<<<<<<<<<<<<<
 *                 count, irequests, &index, &flag, statusp) )
 *         finally:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":108
 *                 count, irequests, &index, &flag, statusp) )
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)             # <<<<<<<<<<<<<<
 *         #
 *         return (index, <bint>flag)
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 108, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 108, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":110
 *             release_rs(requests, None, count, irequests, NULL)
 *         #
 *         return (index, <bint>flag)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_12)) __PYX_ERR(25, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(25, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_12);
  __pyx_t_1 = 0;
  __pyx_t_12 = 0;
  __pyx_r = __pyx_t_13;
  __pyx_t_13 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":93
 * 
 *     @classmethod
 *     def Testany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of any previously initiated request
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Testany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":113
 * 
 *     @classmethod
 *     def Waitall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for all previously initiated requests to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_21Waitall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_20Waitall[] = "Request.Waitall(type cls, requests, statuses=None)\n\n        Wait for all previously initiated requests to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_21Waitall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_v_statuses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Waitall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_statuses,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_statuses);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Waitall") < 0)) __PYX_ERR(25, 113, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_statuses = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Waitall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 113, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Waitall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_20Waitall(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_statuses);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_20Waitall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  MPI_Status *__pyx_v_istatuses;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("Waitall", 0);

  /* "mpi4py/MPI/Request.pyx":117
 *         Wait for all previously initiated requests to complete
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Request.pyx":118
 *         """
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":119
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE             # <<<<<<<<<<<<<<
 *         #
 *         cdef tmp = acquire_rs(requests, statuses,
 */
  __pyx_v_istatuses = MPI_STATUSES_IGNORE;

  /* "mpi4py/MPI/Request.pyx":121
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 *         cdef tmp = acquire_rs(requests, statuses,             # <<<<<<<<<<<<<<
 *                               &count, &irequests, &istatuses)
 *         try:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, __pyx_v_statuses, (&__pyx_v_count), (&__pyx_v_irequests), (&__pyx_v_istatuses)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":123
 *         cdef tmp = acquire_rs(requests, statuses,
 *                               &count, &irequests, &istatuses)
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Waitall(
 *                 count, irequests, istatuses) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":124
 *                               &count, &irequests, &istatuses)
 *         try:
 *             with nogil: CHKERR( MPI_Waitall(             # <<<<<<<<<<<<<<
 *                 count, irequests, istatuses) )
 *         finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Request.pyx":125
 *         try:
 *             with nogil: CHKERR( MPI_Waitall(
 *                 count, irequests, istatuses) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, statuses, count, irequests, istatuses)
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Waitall(__pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 124, __pyx_L7_error)
        }

        /* "mpi4py/MPI/Request.pyx":124
 *                               &count, &irequests, &istatuses)
 *         try:
 *             with nogil: CHKERR( MPI_Waitall(             # <<<<<<<<<<<<<<
 *                 count, irequests, istatuses) )
 *         finally:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":127
 *                 count, irequests, istatuses) )
 *         finally:
 *             release_rs(requests, statuses, count, irequests, istatuses)             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 127, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 127, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":128
 *         finally:
 *             release_rs(requests, statuses, count, irequests, istatuses)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":113
 * 
 *     @classmethod
 *     def Waitall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for all previously initiated requests to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Waitall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":131
 * 
 *     @classmethod
 *     def Testall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of all previously initiated requests
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_23Testall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_22Testall[] = "Request.Testall(type cls, requests, statuses=None)\n\n        Test for completion of all previously initiated requests\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_23Testall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_v_statuses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Testall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_statuses,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_statuses);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Testall") < 0)) __PYX_ERR(25, 131, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_statuses = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Testall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 131, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Testall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_22Testall(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_statuses);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_22Testall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  int __pyx_v_flag;
  MPI_Status *__pyx_v_istatuses;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("Testall", 0);

  /* "mpi4py/MPI/Request.pyx":135
 *         Test for completion of all previously initiated requests
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef int flag = 0
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Request.pyx":136
 *         """
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef int flag = 0
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":137
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":138
 *         cdef MPI_Request *irequests = NULL
 *         cdef int flag = 0
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE             # <<<<<<<<<<<<<<
 *         #
 *         cdef tmp = acquire_rs(requests, statuses,
 */
  __pyx_v_istatuses = MPI_STATUSES_IGNORE;

  /* "mpi4py/MPI/Request.pyx":140
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 *         cdef tmp = acquire_rs(requests, statuses,             # <<<<<<<<<<<<<<
 *                               &count, &irequests, &istatuses)
 *         try:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, __pyx_v_statuses, (&__pyx_v_count), (&__pyx_v_irequests), (&__pyx_v_istatuses)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":142
 *         cdef tmp = acquire_rs(requests, statuses,
 *                               &count, &irequests, &istatuses)
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Testall(
 *                 count, irequests, &flag, istatuses) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":143
 *                               &count, &irequests, &istatuses)
 *         try:
 *             with nogil: CHKERR( MPI_Testall(             # <<<<<<<<<<<<<<
 *                 count, irequests, &flag, istatuses) )
 *         finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Request.pyx":144
 *         try:
 *             with nogil: CHKERR( MPI_Testall(
 *                 count, irequests, &flag, istatuses) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, statuses, count, irequests, istatuses)
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Testall(__pyx_v_count, __pyx_v_irequests, (&__pyx_v_flag), __pyx_v_istatuses)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 143, __pyx_L7_error)
        }

        /* "mpi4py/MPI/Request.pyx":143
 *                               &count, &irequests, &istatuses)
 *         try:
 *             with nogil: CHKERR( MPI_Testall(             # <<<<<<<<<<<<<<
 *                 count, irequests, &flag, istatuses) )
 *         finally:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":146
 *                 count, irequests, &flag, istatuses) )
 *         finally:
 *             release_rs(requests, statuses, count, irequests, istatuses)             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 146, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_count, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 146, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":147
 *         finally:
 *             release_rs(requests, statuses, count, irequests, istatuses)
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":131
 * 
 *     @classmethod
 *     def Testall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of all previously initiated requests
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Testall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":150
 * 
 *     @classmethod
 *     def Waitsome(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for some previously initiated requests to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_25Waitsome(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_24Waitsome[] = "Request.Waitsome(type cls, requests, statuses=None)\n\n        Wait for some previously initiated requests to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_25Waitsome(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_v_statuses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Waitsome (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_statuses,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_statuses);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Waitsome") < 0)) __PYX_ERR(25, 150, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_statuses = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Waitsome", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 150, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Waitsome", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_24Waitsome(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_statuses);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_24Waitsome(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  int __pyx_v_incount;
  MPI_Request *__pyx_v_irequests;
  int __pyx_v_outcount;
  int *__pyx_v_iindices;
  MPI_Status *__pyx_v_istatuses;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_i;
  PyObject *__pyx_v_indices = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  __Pyx_RefNannySetupContext("Waitsome", 0);

  /* "mpi4py/MPI/Request.pyx":154
 *         Wait for some previously initiated requests to complete
 *         """
 *         cdef int incount = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL
 */
  __pyx_v_incount = 0;

  /* "mpi4py/MPI/Request.pyx":155
 *         """
 *         cdef int incount = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":156
 *         cdef int incount = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 */
  __pyx_v_outcount = MPI_UNDEFINED;
  __pyx_v_iindices = NULL;

  /* "mpi4py/MPI/Request.pyx":157
 *         cdef MPI_Request *irequests = NULL
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE             # <<<<<<<<<<<<<<
 *         #
 *         cdef tmp1 = acquire_rs(requests, statuses,
 */
  __pyx_v_istatuses = MPI_STATUSES_IGNORE;

  /* "mpi4py/MPI/Request.pyx":159
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 *         cdef tmp1 = acquire_rs(requests, statuses,             # <<<<<<<<<<<<<<
 *                                &incount, &irequests, &istatuses)
 *         cdef tmp2 = newarray(incount, &iindices)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, __pyx_v_statuses, (&__pyx_v_incount), (&__pyx_v_irequests), (&__pyx_v_istatuses)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp1 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":161
 *         cdef tmp1 = acquire_rs(requests, statuses,
 *                                &incount, &irequests, &istatuses)
 *         cdef tmp2 = newarray(incount, &iindices)             # <<<<<<<<<<<<<<
 *         try:
 *             with nogil: CHKERR( MPI_Waitsome(
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_incount, (&__pyx_v_iindices)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp2 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":162
 *                                &incount, &irequests, &istatuses)
 *         cdef tmp2 = newarray(incount, &iindices)
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Waitsome(
 *                 incount, irequests, &outcount, iindices, istatuses) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":163
 *         cdef tmp2 = newarray(incount, &iindices)
 *         try:
 *             with nogil: CHKERR( MPI_Waitsome(             # <<<<<<<<<<<<<<
 *                 incount, irequests, &outcount, iindices, istatuses) )
 *         finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Request.pyx":164
 *         try:
 *             with nogil: CHKERR( MPI_Waitsome(
 *                 incount, irequests, &outcount, iindices, istatuses) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, statuses, incount, irequests, istatuses)
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Waitsome(__pyx_v_incount, __pyx_v_irequests, (&__pyx_v_outcount), __pyx_v_iindices, __pyx_v_istatuses)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 163, __pyx_L7_error)
        }

        /* "mpi4py/MPI/Request.pyx":163
 *         cdef tmp2 = newarray(incount, &iindices)
 *         try:
 *             with nogil: CHKERR( MPI_Waitsome(             # <<<<<<<<<<<<<<
 *                 incount, irequests, &outcount, iindices, istatuses) )
 *         finally:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":166
 *                 incount, irequests, &outcount, iindices, istatuses) )
 *         finally:
 *             release_rs(requests, statuses, incount, irequests, istatuses)             # <<<<<<<<<<<<<<
 *         #
 *         cdef int i = 0
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_incount, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 166, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_incount, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 166, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":168
 *             release_rs(requests, statuses, incount, irequests, istatuses)
 *         #
 *         cdef int i = 0             # <<<<<<<<<<<<<<
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Request.pyx":169
 *         #
 *         cdef int i = 0
 *         cdef object indices = None             # <<<<<<<<<<<<<<
 *         if outcount != MPI_UNDEFINED:
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_indices = Py_None;

  /* "mpi4py/MPI/Request.pyx":170
 *         cdef int i = 0
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 *         return indices
 */
  __pyx_t_12 = ((__pyx_v_outcount != MPI_UNDEFINED) != 0);
  if (__pyx_t_12) {

    /* "mpi4py/MPI/Request.pyx":171
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:
 *             indices = [iindices[i] for i from 0 <= i < outcount]             # <<<<<<<<<<<<<<
 *         return indices
 * 
 */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __pyx_v_outcount;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
      __pyx_t_13 = __Pyx_PyInt_From_int((__pyx_v_iindices[__pyx_v_i])); if (unlikely(!__pyx_t_13)) __PYX_ERR(25, 171, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_13))) __PYX_ERR(25, 171, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "mpi4py/MPI/Request.pyx":170
 *         cdef int i = 0
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 *         return indices
 */
  }

  /* "mpi4py/MPI/Request.pyx":172
 *         if outcount != MPI_UNDEFINED:
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 *         return indices             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_indices);
  __pyx_r = __pyx_v_indices;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":150
 * 
 *     @classmethod
 *     def Waitsome(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for some previously initiated requests to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Waitsome", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_indices);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":175
 * 
 *     @classmethod
 *     def Testsome(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of some previously initiated requests
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_27Testsome(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_26Testsome[] = "Request.Testsome(type cls, requests, statuses=None)\n\n        Test for completion of some previously initiated requests\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_27Testsome(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_v_statuses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Testsome (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_statuses,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_statuses);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Testsome") < 0)) __PYX_ERR(25, 175, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_statuses = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Testsome", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 175, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Testsome", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_26Testsome(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_statuses);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_26Testsome(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  int __pyx_v_incount;
  MPI_Request *__pyx_v_irequests;
  int __pyx_v_outcount;
  int *__pyx_v_iindices;
  MPI_Status *__pyx_v_istatuses;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_i;
  PyObject *__pyx_v_indices = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  __Pyx_RefNannySetupContext("Testsome", 0);

  /* "mpi4py/MPI/Request.pyx":179
 *         Test for completion of some previously initiated requests
 *         """
 *         cdef int incount = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL
 */
  __pyx_v_incount = 0;

  /* "mpi4py/MPI/Request.pyx":180
 *         """
 *         cdef int incount = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":181
 *         cdef int incount = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 */
  __pyx_v_outcount = MPI_UNDEFINED;
  __pyx_v_iindices = NULL;

  /* "mpi4py/MPI/Request.pyx":182
 *         cdef MPI_Request *irequests = NULL
 *         cdef int outcount = MPI_UNDEFINED, *iindices = NULL
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE             # <<<<<<<<<<<<<<
 *         #
 *         cdef tmp1 = acquire_rs(requests, statuses,
 */
  __pyx_v_istatuses = MPI_STATUSES_IGNORE;

  /* "mpi4py/MPI/Request.pyx":184
 *         cdef MPI_Status *istatuses = MPI_STATUSES_IGNORE
 *         #
 *         cdef tmp1 = acquire_rs(requests, statuses,             # <<<<<<<<<<<<<<
 *                                &incount, &irequests, &istatuses)
 *         cdef tmp2 = newarray(incount, &iindices)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, __pyx_v_statuses, (&__pyx_v_incount), (&__pyx_v_irequests), (&__pyx_v_istatuses)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp1 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":186
 *         cdef tmp1 = acquire_rs(requests, statuses,
 *                                &incount, &irequests, &istatuses)
 *         cdef tmp2 = newarray(incount, &iindices)             # <<<<<<<<<<<<<<
 *         try:
 *             with nogil: CHKERR( MPI_Testsome(
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_incount, (&__pyx_v_iindices)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp2 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":187
 *                                &incount, &irequests, &istatuses)
 *         cdef tmp2 = newarray(incount, &iindices)
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Testsome(
 *                 incount, irequests, &outcount, iindices, istatuses) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":188
 *         cdef tmp2 = newarray(incount, &iindices)
 *         try:
 *             with nogil: CHKERR( MPI_Testsome(             # <<<<<<<<<<<<<<
 *                 incount, irequests, &outcount, iindices, istatuses) )
 *         finally:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Request.pyx":189
 *         try:
 *             with nogil: CHKERR( MPI_Testsome(
 *                 incount, irequests, &outcount, iindices, istatuses) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, statuses, incount, irequests, istatuses)
 */
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Testsome(__pyx_v_incount, __pyx_v_irequests, (&__pyx_v_outcount), __pyx_v_iindices, __pyx_v_istatuses)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 188, __pyx_L7_error)
        }

        /* "mpi4py/MPI/Request.pyx":188
 *         cdef tmp2 = newarray(incount, &iindices)
 *         try:
 *             with nogil: CHKERR( MPI_Testsome(             # <<<<<<<<<<<<<<
 *                 incount, irequests, &outcount, iindices, istatuses) )
 *         finally:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":191
 *                 incount, irequests, &outcount, iindices, istatuses) )
 *         finally:
 *             release_rs(requests, statuses, incount, irequests, istatuses)             # <<<<<<<<<<<<<<
 *         #
 *         cdef int i = 0
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_incount, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 191, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, __pyx_v_statuses, __pyx_v_incount, __pyx_v_irequests, __pyx_v_istatuses); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 191, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":193
 *             release_rs(requests, statuses, incount, irequests, istatuses)
 *         #
 *         cdef int i = 0             # <<<<<<<<<<<<<<
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Request.pyx":194
 *         #
 *         cdef int i = 0
 *         cdef object indices = None             # <<<<<<<<<<<<<<
 *         if outcount != MPI_UNDEFINED:
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_indices = Py_None;

  /* "mpi4py/MPI/Request.pyx":195
 *         cdef int i = 0
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 *         return indices
 */
  __pyx_t_12 = ((__pyx_v_outcount != MPI_UNDEFINED) != 0);
  if (__pyx_t_12) {

    /* "mpi4py/MPI/Request.pyx":196
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:
 *             indices = [iindices[i] for i from 0 <= i < outcount]             # <<<<<<<<<<<<<<
 *         return indices
 * 
 */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __pyx_v_outcount;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
      __pyx_t_13 = __Pyx_PyInt_From_int((__pyx_v_iindices[__pyx_v_i])); if (unlikely(!__pyx_t_13)) __PYX_ERR(25, 196, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_13))) __PYX_ERR(25, 196, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "mpi4py/MPI/Request.pyx":195
 *         cdef int i = 0
 *         cdef object indices = None
 *         if outcount != MPI_UNDEFINED:             # <<<<<<<<<<<<<<
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 *         return indices
 */
  }

  /* "mpi4py/MPI/Request.pyx":197
 *         if outcount != MPI_UNDEFINED:
 *             indices = [iindices[i] for i from 0 <= i < outcount]
 *         return indices             # <<<<<<<<<<<<<<
 * 
 *     # Cancel
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_indices);
  __pyx_r = __pyx_v_indices;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":175
 * 
 *     @classmethod
 *     def Testsome(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of some previously initiated requests
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("mpi4py.MPI.Request.Testsome", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_indices);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":202
 *     # ------
 * 
 *     def Cancel(self):             # <<<<<<<<<<<<<<
 *         """
 *         Cancel a communication request
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_29Cancel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_28Cancel[] = "Request.Cancel(self)\n\n        Cancel a communication request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_29Cancel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Cancel (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Cancel", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Cancel", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_28Cancel(((struct PyMPIRequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_28Cancel(struct PyMPIRequestObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Cancel", 0);

  /* "mpi4py/MPI/Request.pyx":206
 *         Cancel a communication request
 *         """
 *         with nogil: CHKERR( MPI_Cancel(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cancel((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 206, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":202
 *     # ------
 * 
 *     def Cancel(self):             # <<<<<<<<<<<<<<
 *         """
 *         Cancel a communication request
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.Cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":211
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_31py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_30py2f[] = "Request.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_31py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_30py2f(((struct PyMPIRequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_30py2f(struct PyMPIRequestObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Request.pyx":214
 *         """
 *         """
 *         return MPI_Request_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Request_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 214, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":211
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Request.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":217
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_33f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_32f2py[] = "Request.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_33f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(25, 217, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 217, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_32f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_32f2py(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  MPI_Fint __pyx_t_5;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Request.pyx":220
 *         """
 *         """
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         if issubclass(cls, Prequest):
 *             request = <Request>Prequest.__new__(Prequest)
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 220, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Request.pyx":221
 *         """
 *         cdef Request request = <Request>Request.__new__(Request)
 *         if issubclass(cls, Prequest):             # <<<<<<<<<<<<<<
 *             request = <Request>Prequest.__new__(Prequest)
 *         if issubclass(cls, Grequest):
 */
  __pyx_t_3 = PyObject_IsSubclass(((PyObject *)__pyx_v_cls), ((PyObject *)__pyx_ptype_6mpi4py_3MPI_Prequest)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(25, 221, __pyx_L1_error)
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/Request.pyx":222
 *         cdef Request request = <Request>Request.__new__(Request)
 *         if issubclass(cls, Prequest):
 *             request = <Request>Prequest.__new__(Prequest)             # <<<<<<<<<<<<<<
 *         if issubclass(cls, Grequest):
 *             request = <Request>Grequest.__new__(Grequest)
 */
    __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Prequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Prequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 222, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
    __pyx_t_1 = ((PyObject *)__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_request, ((struct PyMPIRequestObject *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "mpi4py/MPI/Request.pyx":221
 *         """
 *         cdef Request request = <Request>Request.__new__(Request)
 *         if issubclass(cls, Prequest):             # <<<<<<<<<<<<<<
 *             request = <Request>Prequest.__new__(Prequest)
 *         if issubclass(cls, Grequest):
 */
  }

  /* "mpi4py/MPI/Request.pyx":223
 *         if issubclass(cls, Prequest):
 *             request = <Request>Prequest.__new__(Prequest)
 *         if issubclass(cls, Grequest):             # <<<<<<<<<<<<<<
 *             request = <Request>Grequest.__new__(Grequest)
 *         request.ob_mpi = MPI_Request_f2c(arg)
 */
  __pyx_t_4 = PyObject_IsSubclass(((PyObject *)__pyx_v_cls), ((PyObject *)__pyx_ptype_6mpi4py_3MPI_Grequest)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(25, 223, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/Request.pyx":224
 *             request = <Request>Prequest.__new__(Prequest)
 *         if issubclass(cls, Grequest):
 *             request = <Request>Grequest.__new__(Grequest)             # <<<<<<<<<<<<<<
 *         request.ob_mpi = MPI_Request_f2c(arg)
 *         return request
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Grequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Grequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 224, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    __pyx_t_2 = ((PyObject *)__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_request, ((struct PyMPIRequestObject *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/Request.pyx":223
 *         if issubclass(cls, Prequest):
 *             request = <Request>Prequest.__new__(Prequest)
 *         if issubclass(cls, Grequest):             # <<<<<<<<<<<<<<
 *             request = <Request>Grequest.__new__(Grequest)
 *         request.ob_mpi = MPI_Request_f2c(arg)
 */
  }

  /* "mpi4py/MPI/Request.pyx":225
 *         if issubclass(cls, Grequest):
 *             request = <Request>Grequest.__new__(Grequest)
 *         request.ob_mpi = MPI_Request_f2c(arg)             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __pyx_t_5 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_5 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(25, 225, __pyx_L1_error)
  __pyx_v_request->ob_mpi = MPI_Request_f2c(__pyx_t_5);

  /* "mpi4py/MPI/Request.pyx":226
 *             request = <Request>Grequest.__new__(Grequest)
 *         request.ob_mpi = MPI_Request_f2c(arg)
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Python Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":217
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Request.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":231
 *     # --------------------
 *     #
 *     def wait(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for a send or receive to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_35wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_34wait[] = "Request.wait(self, Status status=None)\n\n        Wait for a send or receive to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_35wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wait (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "wait") < 0)) __PYX_ERR(25, 231, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("wait", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 231, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 231, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_34wait(((struct PyMPIRequestObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_34wait(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wait", 0);

  /* "mpi4py/MPI/Request.pyx":235
 *         Wait for a send or receive to complete
 *         """
 *         cdef msg = PyMPI_wait(self, status)             # <<<<<<<<<<<<<<
 *         return msg
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_wait(__pyx_v_self, __pyx_v_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":236
 *         """
 *         cdef msg = PyMPI_wait(self, status)
 *         return msg             # <<<<<<<<<<<<<<
 *     #
 *     def test(self, Status status=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_msg);
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":231
 *     # --------------------
 *     #
 *     def wait(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for a send or receive to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Request.wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":238
 *         return msg
 *     #
 *     def test(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for the completion of a send or receive
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_37test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_36test[] = "Request.test(self, Status status=None)\n\n        Test for the completion of a send or receive\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_37test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("test (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "test") < 0)) __PYX_ERR(25, 238, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("test", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 238, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 238, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_36test(((struct PyMPIRequestObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_36test(struct PyMPIRequestObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("test", 0);

  /* "mpi4py/MPI/Request.pyx":242
 *         Test for the completion of a send or receive
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef msg = PyMPI_test(self, &flag, status)
 *         return (<bint>flag, msg)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":243
 *         """
 *         cdef int flag = 0
 *         cdef msg = PyMPI_test(self, &flag, status)             # <<<<<<<<<<<<<<
 *         return (<bint>flag, msg)
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_test(__pyx_v_self, (&__pyx_v_flag), __pyx_v_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":244
 *         cdef int flag = 0
 *         cdef msg = PyMPI_test(self, &flag, status)
 *         return (<bint>flag, msg)             # <<<<<<<<<<<<<<
 *     #
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":238
 *         return msg
 *     #
 *     def test(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for the completion of a send or receive
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Request.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":247
 *     #
 *     @classmethod
 *     def waitany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for any previously initiated request to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_39waitany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_38waitany[] = "Request.waitany(type cls, requests, Status status=None)\n\n        Wait for any previously initiated request to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_39waitany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("waitany (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "waitany") < 0)) __PYX_ERR(25, 247, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("waitany", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 247, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.waitany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 247, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_38waitany(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_38waitany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_index;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("waitany", 0);

  /* "mpi4py/MPI/Request.pyx":251
 *         Wait for any previously initiated request to complete
 *         """
 *         cdef int index = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         cdef msg = PyMPI_waitany(requests, &index, status)
 *         return (index, msg)
 */
  __pyx_v_index = MPI_UNDEFINED;

  /* "mpi4py/MPI/Request.pyx":252
 *         """
 *         cdef int index = MPI_UNDEFINED
 *         cdef msg = PyMPI_waitany(requests, &index, status)             # <<<<<<<<<<<<<<
 *         return (index, msg)
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_waitany(__pyx_v_requests, (&__pyx_v_index), __pyx_v_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":253
 *         cdef int index = MPI_UNDEFINED
 *         cdef msg = PyMPI_waitany(requests, &index, status)
 *         return (index, msg)             # <<<<<<<<<<<<<<
 *     #
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":247
 *     #
 *     @classmethod
 *     def waitany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for any previously initiated request to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Request.waitany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":256
 *     #
 *     @classmethod
 *     def testany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of any previously initiated request
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_41testany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_40testany[] = "Request.testany(type cls, requests, Status status=None)\n\n        Test for completion of any previously initiated request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_41testany(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("testany (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "testany") < 0)) __PYX_ERR(25, 256, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("testany", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 256, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.testany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(25, 256, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_40testany(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_40testany(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_index;
  int __pyx_v_flag;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("testany", 0);

  /* "mpi4py/MPI/Request.pyx":260
 *         Test for completion of any previously initiated request
 *         """
 *         cdef int index = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         cdef int flag  = 0
 *         cdef msg = PyMPI_testany(requests, &index, &flag, status)
 */
  __pyx_v_index = MPI_UNDEFINED;

  /* "mpi4py/MPI/Request.pyx":261
 *         """
 *         cdef int index = MPI_UNDEFINED
 *         cdef int flag  = 0             # <<<<<<<<<<<<<<
 *         cdef msg = PyMPI_testany(requests, &index, &flag, status)
 *         return (index, <bint>flag, msg)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":262
 *         cdef int index = MPI_UNDEFINED
 *         cdef int flag  = 0
 *         cdef msg = PyMPI_testany(requests, &index, &flag, status)             # <<<<<<<<<<<<<<
 *         return (index, <bint>flag, msg)
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_testany(__pyx_v_requests, (&__pyx_v_index), (&__pyx_v_flag), __pyx_v_status); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":263
 *         cdef int flag  = 0
 *         cdef msg = PyMPI_testany(requests, &index, &flag, status)
 *         return (index, <bint>flag, msg)             # <<<<<<<<<<<<<<
 *     #
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_msg);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":256
 *     #
 *     @classmethod
 *     def testany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of any previously initiated request
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Request.testany", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":266
 *     #
 *     @classmethod
 *     def waitall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for all previously initiated requests to complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_43waitall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_42waitall[] = "Request.waitall(type cls, requests, statuses=None)\n\n        Wait for all previously initiated requests to complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_43waitall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_v_statuses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("waitall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_statuses,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_statuses);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "waitall") < 0)) __PYX_ERR(25, 266, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_statuses = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("waitall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 266, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.waitall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_42waitall(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_statuses);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_42waitall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("waitall", 0);

  /* "mpi4py/MPI/Request.pyx":270
 *         Wait for all previously initiated requests to complete
 *         """
 *         cdef msg = PyMPI_waitall(requests, statuses)             # <<<<<<<<<<<<<<
 *         return msg
 *     #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_waitall(__pyx_v_requests, __pyx_v_statuses); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":271
 *         """
 *         cdef msg = PyMPI_waitall(requests, statuses)
 *         return msg             # <<<<<<<<<<<<<<
 *     #
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_msg);
  __pyx_r = __pyx_v_msg;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":266
 *     #
 *     @classmethod
 *     def waitall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for all previously initiated requests to complete
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Request.waitall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":274
 *     #
 *     @classmethod
 *     def testall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of all previously initiated requests
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_45testall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Request_44testall[] = "Request.testall(type cls, requests, statuses=None)\n\n        Test for completion of all previously initiated requests\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Request_45testall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_v_statuses = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("testall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,&__pyx_n_s_statuses,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_statuses);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "testall") < 0)) __PYX_ERR(25, 274, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_requests = values[0];
    __pyx_v_statuses = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("testall", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 274, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Request.testall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Request_44testall(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests, __pyx_v_statuses);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Request_44testall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests, PyObject *__pyx_v_statuses) {
  int __pyx_v_flag;
  PyObject *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("testall", 0);

  /* "mpi4py/MPI/Request.pyx":278
 *         Test for completion of all previously initiated requests
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef msg = PyMPI_testall(requests, &flag, statuses)
 *         return (<bint>flag, msg)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Request.pyx":279
 *         """
 *         cdef int flag = 0
 *         cdef msg = PyMPI_testall(requests, &flag, statuses)             # <<<<<<<<<<<<<<
 *         return (<bint>flag, msg)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_testall(__pyx_v_requests, (&__pyx_v_flag), __pyx_v_statuses); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":280
 *         cdef int flag = 0
 *         cdef msg = PyMPI_testall(requests, &flag, statuses)
 *         return (<bint>flag, msg)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_msg);
  __Pyx_GIVEREF(__pyx_v_msg);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":274
 *     #
 *     @classmethod
 *     def testall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of all previously initiated requests
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Request.testall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":289
 *     """
 * 
 *     def __cinit__(self, Request request=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 *         <void>(<Prequest?>request)
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Prequest_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Prequest_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIRequestObject *__pyx_v_request = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIRequestObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_request);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(25, 289, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_request = ((struct PyMPIRequestObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 289, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Prequest.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_request), __pyx_ptype_6mpi4py_3MPI_Request, 1, "request", 0))) __PYX_ERR(25, 289, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Prequest___cinit__(((struct PyMPIPrequestObject *)__pyx_v_self), __pyx_v_request);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Prequest___cinit__(struct PyMPIPrequestObject *__pyx_v_self, struct PyMPIRequestObject *__pyx_v_request) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Request.pyx":290
 * 
 *     def __cinit__(self, Request request=None):
 *         if self.ob_mpi == MPI_REQUEST_NULL: return             # <<<<<<<<<<<<<<
 *         <void>(<Prequest?>request)
 * 
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.ob_mpi == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":291
 *     def __cinit__(self, Request request=None):
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 *         <void>(<Prequest?>request)             # <<<<<<<<<<<<<<
 * 
 *     def Start(self):
 */
  if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_v_request), __pyx_ptype_6mpi4py_3MPI_Prequest)))) __PYX_ERR(25, 291, __pyx_L1_error)
  ((void)((struct PyMPIPrequestObject *)__pyx_v_request));

  /* "mpi4py/MPI/Request.pyx":289
 *     """
 * 
 *     def __cinit__(self, Request request=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 *         <void>(<Prequest?>request)
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Prequest.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":293
 *         <void>(<Prequest?>request)
 * 
 *     def Start(self):             # <<<<<<<<<<<<<<
 *         """
 *         Initiate a communication with a persistent request
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Prequest_3Start(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Prequest_2Start[] = "Prequest.Start(self)\n\n        Initiate a communication with a persistent request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Prequest_3Start(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Start (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Start", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Start", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Prequest_2Start(((struct PyMPIPrequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Prequest_2Start(struct PyMPIPrequestObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Start", 0);

  /* "mpi4py/MPI/Request.pyx":297
 *         Initiate a communication with a persistent request
 *         """
 *         with nogil: CHKERR( MPI_Start(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Start((&__pyx_v_self->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 297, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":293
 *         <void>(<Prequest?>request)
 * 
 *     def Start(self):             # <<<<<<<<<<<<<<
 *         """
 *         Initiate a communication with a persistent request
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Prequest.Start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":300
 * 
 *     @classmethod
 *     def Startall(cls, requests):             # <<<<<<<<<<<<<<
 *         """
 *         Start a collection of persistent requests
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Prequest_5Startall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Prequest_4Startall[] = "Prequest.Startall(type cls, requests)\n\n        Start a collection of persistent requests\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Prequest_5Startall(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_requests = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Startall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_requests,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_requests)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Startall") < 0)) __PYX_ERR(25, 300, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_requests = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Startall", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 300, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Prequest.Startall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Prequest_4Startall(((PyTypeObject*)__pyx_v_cls), __pyx_v_requests);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Prequest_4Startall(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_requests) {
  int __pyx_v_count;
  MPI_Request *__pyx_v_irequests;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  char const *__pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("Startall", 0);

  /* "mpi4py/MPI/Request.pyx":304
 *         Start a collection of persistent requests
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Request *irequests = NULL
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Request.pyx":305
 *         """
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         #
 */
  __pyx_v_irequests = NULL;

  /* "mpi4py/MPI/Request.pyx":306
 *         cdef int count = 0
 *         cdef MPI_Request *irequests = NULL
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)             # <<<<<<<<<<<<<<
 *         #
 *         try:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_acquire_rs(__pyx_v_requests, Py_None, (&__pyx_v_count), (&__pyx_v_irequests), NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":308
 *         cdef tmp = acquire_rs(requests, None, &count, &irequests, NULL)
 *         #
 *         try:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Startall(count, irequests) )
 *         finally:
 */
  /*try:*/ {

    /* "mpi4py/MPI/Request.pyx":309
 *         #
 *         try:
 *             with nogil: CHKERR( MPI_Startall(count, irequests) )             # <<<<<<<<<<<<<<
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {
          __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Startall(__pyx_v_count, __pyx_v_irequests)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 309, __pyx_L7_error)
        }
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L7_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L4_error;
          }
          __pyx_L8:;
        }
    }
  }

  /* "mpi4py/MPI/Request.pyx":311
 *             with nogil: CHKERR( MPI_Startall(count, irequests) )
 *         finally:
 *             release_rs(requests, None, count, irequests, NULL)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_2 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 311, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __pyx_t_2 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename;
      {
        __pyx_t_11 = __pyx_f_6mpi4py_3MPI_release_rs(__pyx_v_requests, Py_None, __pyx_v_count, __pyx_v_irequests, NULL); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(25, 311, __pyx_L10_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      __pyx_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4;
      goto __pyx_L1_error;
      __pyx_L10_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "mpi4py/MPI/Request.pyx":300
 * 
 *     @classmethod
 *     def Startall(cls, requests):             # <<<<<<<<<<<<<<
 *         """
 *         Start a collection of persistent requests
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Prequest.Startall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":321
 *     """
 * 
 *     def __cinit__(self, Request request=None):             # <<<<<<<<<<<<<<
 *         self.ob_grequest = self.ob_mpi
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Grequest_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Grequest_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIRequestObject *__pyx_v_request = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_request,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIRequestObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_request);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(25, 321, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_request = ((struct PyMPIRequestObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 321, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Grequest.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_request), __pyx_ptype_6mpi4py_3MPI_Request, 1, "request", 0))) __PYX_ERR(25, 321, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Grequest___cinit__(((struct PyMPIGrequestObject *)__pyx_v_self), __pyx_v_request);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Grequest___cinit__(struct PyMPIGrequestObject *__pyx_v_self, struct PyMPIRequestObject *__pyx_v_request) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  MPI_Request __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Request.pyx":322
 * 
 *     def __cinit__(self, Request request=None):
 *         self.ob_grequest = self.ob_mpi             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 *         <void>(<Grequest?>request)
 */
  __pyx_t_1 = __pyx_v_self->__pyx_base.ob_mpi;
  __pyx_v_self->ob_grequest = __pyx_t_1;

  /* "mpi4py/MPI/Request.pyx":323
 *     def __cinit__(self, Request request=None):
 *         self.ob_grequest = self.ob_mpi
 *         if self.ob_mpi == MPI_REQUEST_NULL: return             # <<<<<<<<<<<<<<
 *         <void>(<Grequest?>request)
 * 
 */
  __pyx_t_2 = ((__pyx_v_self->__pyx_base.ob_mpi == MPI_REQUEST_NULL) != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Request.pyx":324
 *         self.ob_grequest = self.ob_mpi
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 *         <void>(<Grequest?>request)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_v_request), __pyx_ptype_6mpi4py_3MPI_Grequest)))) __PYX_ERR(25, 324, __pyx_L1_error)
  ((void)((struct PyMPIGrequestObject *)__pyx_v_request));

  /* "mpi4py/MPI/Request.pyx":321
 *     """
 * 
 *     def __cinit__(self, Request request=None):             # <<<<<<<<<<<<<<
 *         self.ob_grequest = self.ob_mpi
 *         if self.ob_mpi == MPI_REQUEST_NULL: return
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Grequest.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":327
 * 
 *     @classmethod
 *     def Start(cls, query_fn, free_fn, cancel_fn,             # <<<<<<<<<<<<<<
 *               args=None, kargs=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Grequest_3Start(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Grequest_2Start[] = "Grequest.Start(type cls, query_fn, free_fn, cancel_fn, args=None, kargs=None)\n\n        Create and return a user-defined request\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Grequest_3Start(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_query_fn = 0;
  PyObject *__pyx_v_free_fn = 0;
  PyObject *__pyx_v_cancel_fn = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kargs = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Start (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_query_fn,&__pyx_n_s_free_fn,&__pyx_n_s_cancel_fn,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
    PyObject* values[5] = {0,0,0,0,0};

    /* "mpi4py/MPI/Request.pyx":328
 *     @classmethod
 *     def Start(cls, query_fn, free_fn, cancel_fn,
 *               args=None, kargs=None):             # <<<<<<<<<<<<<<
 *         """
 *         Create and return a user-defined request
 */
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_query_fn)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_free_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Start", 0, 3, 5, 1); __PYX_ERR(25, 327, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cancel_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Start", 0, 3, 5, 2); __PYX_ERR(25, 327, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kargs);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Start") < 0)) __PYX_ERR(25, 327, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_query_fn = values[0];
    __pyx_v_free_fn = values[1];
    __pyx_v_cancel_fn = values[2];
    __pyx_v_args = values[3];
    __pyx_v_kargs = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Start", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 327, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Grequest.Start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Grequest_2Start(((PyTypeObject*)__pyx_v_cls), __pyx_v_query_fn, __pyx_v_free_fn, __pyx_v_cancel_fn, __pyx_v_args, __pyx_v_kargs);

  /* "mpi4py/MPI/Request.pyx":327
 * 
 *     @classmethod
 *     def Start(cls, query_fn, free_fn, cancel_fn,             # <<<<<<<<<<<<<<
 *               args=None, kargs=None):
 *         """
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Grequest_2Start(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_query_fn, PyObject *__pyx_v_free_fn, PyObject *__pyx_v_cancel_fn, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
  struct PyMPIGrequestObject *__pyx_v_request = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_greq *__pyx_v_state = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  MPI_Request __pyx_t_4;
  __Pyx_RefNannySetupContext("Start", 0);

  /* "mpi4py/MPI/Request.pyx":332
 *         Create and return a user-defined request
 *         """
 *         cdef Grequest request = <Grequest>Grequest.__new__(Grequest)             # <<<<<<<<<<<<<<
 *         cdef _p_greq state = \
 *              _p_greq(query_fn, free_fn, cancel_fn, args, kargs)
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Grequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Grequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 332, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIGrequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Request.pyx":334
 *         cdef Grequest request = <Grequest>Grequest.__new__(Grequest)
 *         cdef _p_greq state = \
 *              _p_greq(query_fn, free_fn, cancel_fn, args, kargs)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Grequest_start(
 *             greq_query_fn, greq_free_fn, greq_cancel_fn,
 */
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_query_fn);
  __Pyx_GIVEREF(__pyx_v_query_fn);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_query_fn);
  __Pyx_INCREF(__pyx_v_free_fn);
  __Pyx_GIVEREF(__pyx_v_free_fn);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_free_fn);
  __Pyx_INCREF(__pyx_v_cancel_fn);
  __Pyx_GIVEREF(__pyx_v_cancel_fn);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_cancel_fn);
  __Pyx_INCREF(__pyx_v_args);
  __Pyx_GIVEREF(__pyx_v_args);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_args);
  __Pyx_INCREF(__pyx_v_kargs);
  __Pyx_GIVEREF(__pyx_v_kargs);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_kargs);
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6mpi4py_3MPI__p_greq), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_state = ((struct __pyx_obj_6mpi4py_3MPI__p_greq *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Request.pyx":335
 *         cdef _p_greq state = \
 *              _p_greq(query_fn, free_fn, cancel_fn, args, kargs)
 *         with nogil: CHKERR( MPI_Grequest_start(             # <<<<<<<<<<<<<<
 *             greq_query_fn, greq_free_fn, greq_cancel_fn,
 *             <void*>state, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Request.pyx":337
 *         with nogil: CHKERR( MPI_Grequest_start(
 *             greq_query_fn, greq_free_fn, greq_cancel_fn,
 *             <void*>state, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         Py_INCREF(state)
 *         request.ob_grequest = request.ob_mpi
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Grequest_start(__pyx_f_6mpi4py_3MPI_greq_query_fn, __pyx_f_6mpi4py_3MPI_greq_free_fn, __pyx_f_6mpi4py_3MPI_greq_cancel_fn, ((void *)__pyx_v_state), (&__pyx_v_request->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(25, 335, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Request.pyx":335
 *         cdef _p_greq state = \
 *              _p_greq(query_fn, free_fn, cancel_fn, args, kargs)
 *         with nogil: CHKERR( MPI_Grequest_start(             # <<<<<<<<<<<<<<
 *             greq_query_fn, greq_free_fn, greq_cancel_fn,
 *             <void*>state, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":338
 *             greq_query_fn, greq_free_fn, greq_cancel_fn,
 *             <void*>state, &request.ob_mpi) )
 *         Py_INCREF(state)             # <<<<<<<<<<<<<<
 *         request.ob_grequest = request.ob_mpi
 *         return request
 */
  Py_INCREF(((PyObject *)__pyx_v_state));

  /* "mpi4py/MPI/Request.pyx":339
 *             <void*>state, &request.ob_mpi) )
 *         Py_INCREF(state)
 *         request.ob_grequest = request.ob_mpi             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __pyx_t_4 = __pyx_v_request->__pyx_base.ob_mpi;
  __pyx_v_request->ob_grequest = __pyx_t_4;

  /* "mpi4py/MPI/Request.pyx":340
 *         Py_INCREF(state)
 *         request.ob_grequest = request.ob_mpi
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Complete(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Request.pyx":327
 * 
 *     @classmethod
 *     def Start(cls, query_fn, free_fn, cancel_fn,             # <<<<<<<<<<<<<<
 *               args=None, kargs=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Grequest.Start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XDECREF((PyObject *)__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Request.pyx":342
 *         return request
 * 
 *     def Complete(self):             # <<<<<<<<<<<<<<
 *         """
 *         Notify that a user-defined request is complete
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Grequest_5Complete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Grequest_4Complete[] = "Grequest.Complete(self)\n\n        Notify that a user-defined request is complete\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Grequest_5Complete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Complete (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Complete", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Complete", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Grequest_4Complete(((struct PyMPIGrequestObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Grequest_4Complete(struct PyMPIGrequestObject *__pyx_v_self) {
  MPI_Request __pyx_v_grequest;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  MPI_Request __pyx_t_6;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("Complete", 0);

  /* "mpi4py/MPI/Request.pyx":346
 *         Notify that a user-defined request is complete
 *         """
 *         if self.ob_mpi != MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             if self.ob_mpi != self.ob_grequest:
 *                 raise MPIException(MPI_ERR_REQUEST)
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.ob_mpi != MPI_REQUEST_NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Request.pyx":347
 *         """
 *         if self.ob_mpi != MPI_REQUEST_NULL:
 *             if self.ob_mpi != self.ob_grequest:             # <<<<<<<<<<<<<<
 *                 raise MPIException(MPI_ERR_REQUEST)
 *         cdef MPI_Request grequest = self.ob_grequest
 */
    __pyx_t_1 = ((__pyx_v_self->__pyx_base.ob_mpi != __pyx_v_self->ob_grequest) != 0);
    if (unlikely(__pyx_t_1)) {

      /* "mpi4py/MPI/Request.pyx":348
 *         if self.ob_mpi != MPI_REQUEST_NULL:
 *             if self.ob_mpi != self.ob_grequest:
 *                 raise MPIException(MPI_ERR_REQUEST)             # <<<<<<<<<<<<<<
 *         cdef MPI_Request grequest = self.ob_grequest
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??
 */
      __pyx_t_3 = __Pyx_PyInt_From_int(MPI_ERR_REQUEST); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_v_6mpi4py_3MPI_MPIException);
      __pyx_t_4 = __pyx_v_6mpi4py_3MPI_MPIException; __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(25, 348, __pyx_L1_error)

      /* "mpi4py/MPI/Request.pyx":347
 *         """
 *         if self.ob_mpi != MPI_REQUEST_NULL:
 *             if self.ob_mpi != self.ob_grequest:             # <<<<<<<<<<<<<<
 *                 raise MPIException(MPI_ERR_REQUEST)
 *         cdef MPI_Request grequest = self.ob_grequest
 */
    }

    /* "mpi4py/MPI/Request.pyx":346
 *         Notify that a user-defined request is complete
 *         """
 *         if self.ob_mpi != MPI_REQUEST_NULL:             # <<<<<<<<<<<<<<
 *             if self.ob_mpi != self.ob_grequest:
 *                 raise MPIException(MPI_ERR_REQUEST)
 */
  }

  /* "mpi4py/MPI/Request.pyx":349
 *             if self.ob_mpi != self.ob_grequest:
 *                 raise MPIException(MPI_ERR_REQUEST)
 *         cdef MPI_Request grequest = self.ob_grequest             # <<<<<<<<<<<<<<
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??
 *         with nogil: CHKERR( MPI_Grequest_complete(grequest) )
 */
  __pyx_t_6 = __pyx_v_self->ob_grequest;
  __pyx_v_grequest = __pyx_t_6;

  /* "mpi4py/MPI/Request.pyx":350
 *                 raise MPIException(MPI_ERR_REQUEST)
 *         cdef MPI_Request grequest = self.ob_grequest
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Grequest_complete(grequest) )
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??
 */
  __pyx_t_6 = __pyx_v_self->__pyx_base.ob_mpi;
  __pyx_v_self->ob_grequest = __pyx_t_6;

  /* "mpi4py/MPI/Request.pyx":351
 *         cdef MPI_Request grequest = self.ob_grequest
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??
 *         with nogil: CHKERR( MPI_Grequest_complete(grequest) )             # <<<<<<<<<<<<<<
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_7 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Grequest_complete(__pyx_v_grequest)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(25, 351, __pyx_L6_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Request.pyx":352
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??
 *         with nogil: CHKERR( MPI_Grequest_complete(grequest) )
 *         self.ob_grequest = self.ob_mpi ## or MPI_REQUEST_NULL ??             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_6 = __pyx_v_self->__pyx_base.ob_mpi;
  __pyx_v_self->ob_grequest = __pyx_t_6;

  /* "mpi4py/MPI/Request.pyx":342
 *         return request
 * 
 *     def Complete(self):             # <<<<<<<<<<<<<<
 *         """
 *         Notify that a user-defined request is complete
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Grequest.Complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":7
 *     """
 * 
 *     def __cinit__(self, Message message=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_MESSAGE_NULL
 *         if message is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_7Message_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_7Message_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIMessageObject *__pyx_v_message = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIMessageObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_message);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(26, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_message = ((struct PyMPIMessageObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_message), __pyx_ptype_6mpi4py_3MPI_Message, 1, "message", 0))) __PYX_ERR(26, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message___cinit__(((struct PyMPIMessageObject *)__pyx_v_self), __pyx_v_message);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_7Message___cinit__(struct PyMPIMessageObject *__pyx_v_self, struct PyMPIMessageObject *__pyx_v_message) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Message __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Message.pyx":8
 * 
 *     def __cinit__(self, Message message=None):
 *         self.ob_mpi = MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 *         if message is None: return
 *         self.ob_mpi = message.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_MESSAGE_NULL;

  /* "mpi4py/MPI/Message.pyx":9
 *     def __cinit__(self, Message message=None):
 *         self.ob_mpi = MPI_MESSAGE_NULL
 *         if message is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = message.ob_mpi
 *         self.ob_buf = message.ob_buf
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_message) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":10
 *         self.ob_mpi = MPI_MESSAGE_NULL
 *         if message is None: return
 *         self.ob_mpi = message.ob_mpi             # <<<<<<<<<<<<<<
 *         self.ob_buf = message.ob_buf
 * 
 */
  __pyx_t_3 = __pyx_v_message->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Message.pyx":11
 *         if message is None: return
 *         self.ob_mpi = message.ob_mpi
 *         self.ob_buf = message.ob_buf             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_4 = __pyx_v_message->ob_buf;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->ob_buf);
  __Pyx_DECREF(__pyx_v_self->ob_buf);
  __pyx_v_self->ob_buf = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Message.pyx":7
 *     """
 * 
 *     def __cinit__(self, Message message=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_MESSAGE_NULL
 *         if message is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":13
 *         self.ob_buf = message.ob_buf
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Message(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_7Message_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_7Message_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_7Message_2__dealloc__(((struct PyMPIMessageObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_7Message_2__dealloc__(struct PyMPIMessageObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Message.pyx":14
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Message(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":15
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Message(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Message((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 15, __pyx_L1_error)

  /* "mpi4py/MPI/Message.pyx":13
 *         self.ob_buf = message.ob_buf
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Message(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Message.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Message.pyx":17
 *         CHKERR( del_Message(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Message): return NotImplemented
 *         cdef Message s = <Message>self, o = <Message>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_4__richcmp__(((struct PyMPIMessageObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_4__richcmp__(struct PyMPIMessageObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIMessageObject *__pyx_v_s = 0;
  struct PyMPIMessageObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Message.pyx":18
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Message): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Message s = <Message>self, o = <Message>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Message); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":19
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Message): return NotImplemented
 *         cdef Message s = <Message>self, o = <Message>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIMessageObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIMessageObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":20
 *         if not isinstance(other, Message): return NotImplemented
 *         cdef Message s = <Message>self, o = <Message>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":21
 *         cdef Message s = <Message>self, o = <Message>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 21, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":22
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":23
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":24
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(26, 24, __pyx_L1_error)

  /* "mpi4py/MPI/Message.pyx":17
 *         CHKERR( del_Message(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Message): return NotImplemented
 *         cdef Message s = <Message>self, o = <Message>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Message.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":26
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_MESSAGE_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_7Message_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_7Message_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_6__bool__(((struct PyMPIMessageObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_7Message_6__bool__(struct PyMPIMessageObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Message.pyx":27
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Matching Probe
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_MESSAGE_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":26
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_MESSAGE_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":33
 * 
 *     @classmethod
 *     def Probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_9Probe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_8Probe[] = "Message.Probe(type cls, Comm comm, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Blocking test for a matched message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_9Probe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Probe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Message.pyx":34
 *     @classmethod
 *     def Probe(cls, Comm comm,
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking test for a matched message
 */
    values[3] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Probe") < 0)) __PYX_ERR(26, 33, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 34, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__29;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 34, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__30;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Probe", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 33, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.Probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(26, 33, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(26, 34, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_8Probe(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm, __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Message.pyx":33
 * 
 *     @classmethod
 *     def Probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_8Probe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Message __pyx_v_cmessage;
  MPI_Status *__pyx_v_statusp;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Probe", 0);

  /* "mpi4py/MPI/Message.pyx":38
 *         Blocking test for a matched message
 *         """
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(
 */
  __pyx_v_cmessage = MPI_MESSAGE_NULL;

  /* "mpi4py/MPI/Message.pyx":39
 *         """
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Mprobe(
 *             source, tag, comm.ob_mpi, &cmessage, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Message.pyx":40
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(             # <<<<<<<<<<<<<<
 *             source, tag, comm.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(cls)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Message.pyx":41
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(
 *             source, tag, comm.ob_mpi, &cmessage, statusp) )             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(cls)
 *         message.ob_mpi = cmessage
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm->ob_mpi, (&__pyx_v_cmessage), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 40, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Message.pyx":40
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(             # <<<<<<<<<<<<<<
 *             source, tag, comm.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(cls)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Message.pyx":42
 *         with nogil: CHKERR( MPI_Mprobe(
 *             source, tag, comm.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(cls)             # <<<<<<<<<<<<<<
 *         message.ob_mpi = cmessage
 *         return message
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_cls)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_cls));
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":43
 *             source, tag, comm.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(cls)
 *         message.ob_mpi = cmessage             # <<<<<<<<<<<<<<
 *         return message
 * 
 */
  __pyx_v_message->ob_mpi = __pyx_v_cmessage;

  /* "mpi4py/MPI/Message.pyx":44
 *         cdef Message message = <Message>Message.__new__(cls)
 *         message.ob_mpi = cmessage
 *         return message             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":33
 * 
 *     @classmethod
 *     def Probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Message.Probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":47
 * 
 *     @classmethod
 *     def Iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_11Iprobe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_10Iprobe[] = "Message.Iprobe(type cls, Comm comm, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Nonblocking test for a matched message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_11Iprobe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iprobe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Message.pyx":48
 *     @classmethod
 *     def Iprobe(cls, Comm comm,
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking test for a matched message
 */
    values[3] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iprobe") < 0)) __PYX_ERR(26, 47, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 48, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__31;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 48, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__32;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iprobe", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 47, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.Iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(26, 47, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(26, 48, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_10Iprobe(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm, __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Message.pyx":47
 * 
 *     @classmethod
 *     def Iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_10Iprobe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  MPI_Message __pyx_v_cmessage;
  MPI_Status *__pyx_v_statusp;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Iprobe", 0);

  /* "mpi4py/MPI/Message.pyx":52
 *         Nonblocking test for a matched message
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Message.pyx":53
 *         """
 *         cdef int flag = 0
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(
 */
  __pyx_v_cmessage = MPI_MESSAGE_NULL;

  /* "mpi4py/MPI/Message.pyx":54
 *         cdef int flag = 0
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Improbe(
 *              source, tag, comm.ob_mpi, &flag, &cmessage, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Message.pyx":55
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(             # <<<<<<<<<<<<<<
 *              source, tag, comm.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Message.pyx":56
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(
 *              source, tag, comm.ob_mpi, &flag, &cmessage, statusp) )             # <<<<<<<<<<<<<<
 *         if flag == 0: return None
 *         cdef Message message = <Message>Message.__new__(cls)
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Improbe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm->ob_mpi, (&__pyx_v_flag), (&__pyx_v_cmessage), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 55, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Message.pyx":55
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(             # <<<<<<<<<<<<<<
 *              source, tag, comm.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Message.pyx":57
 *         with nogil: CHKERR( MPI_Improbe(
 *              source, tag, comm.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(cls)
 *         message.ob_mpi = cmessage
 */
  __pyx_t_2 = ((__pyx_v_flag == 0) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":58
 *              source, tag, comm.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None
 *         cdef Message message = <Message>Message.__new__(cls)             # <<<<<<<<<<<<<<
 *         message.ob_mpi = cmessage
 *         return message
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_n_s_new); if (unlikely(!__pyx_t_4)) __PYX_ERR(26, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, ((PyObject *)__pyx_v_cls)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_cls));
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Message.pyx":59
 *         if flag == 0: return None
 *         cdef Message message = <Message>Message.__new__(cls)
 *         message.ob_mpi = cmessage             # <<<<<<<<<<<<<<
 *         return message
 * 
 */
  __pyx_v_message->ob_mpi = __pyx_v_cmessage;

  /* "mpi4py/MPI/Message.pyx":60
 *         cdef Message message = <Message>Message.__new__(cls)
 *         message.ob_mpi = cmessage
 *         return message             # <<<<<<<<<<<<<<
 * 
 *     # Matched receives
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":47
 * 
 *     @classmethod
 *     def Iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Message.Iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":65
 *     # ----------------
 * 
 *     def Recv(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking receive of matched message
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_13Recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_12Recv[] = "Message.Recv(self, buf, Status status=None)\n\n        Blocking receive of matched message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_13Recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Recv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Recv") < 0)) __PYX_ERR(26, 65, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Recv", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 65, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.Recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(26, 65, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_12Recv(((struct PyMPIMessageObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_12Recv(struct PyMPIMessageObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Message __pyx_v_message;
  int __pyx_v_source;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Message __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Recv", 0);

  /* "mpi4py/MPI/Message.pyx":69
 *         Blocking receive of matched message
 *         """
 *         cdef MPI_Message message = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_message = __pyx_t_1;

  /* "mpi4py/MPI/Message.pyx":70
 *         """
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef int source = MPI_ANY_SOURCE             # <<<<<<<<<<<<<<
 *         if message == MPI_MESSAGE_NO_PROC:
 *             source = MPI_PROC_NULL
 */
  __pyx_v_source = MPI_ANY_SOURCE;

  /* "mpi4py/MPI/Message.pyx":71
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 */
  __pyx_t_2 = ((__pyx_v_message == MPI_MESSAGE_NO_PROC) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Message.pyx":72
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:
 *             source = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
    __pyx_v_source = MPI_PROC_NULL;

    /* "mpi4py/MPI/Message.pyx":71
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 */
  }

  /* "mpi4py/MPI/Message.pyx":73
 *         if message == MPI_MESSAGE_NO_PROC:
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mrecv(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_buf, __pyx_v_source)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":74
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Mrecv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Message.pyx":75
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mrecv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, statusp) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Message.pyx":77
 *         with nogil: CHKERR( MPI_Mrecv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, statusp) )             # <<<<<<<<<<<<<<
 *         if self is not __MESSAGE_NO_PROC__:
 *             self.ob_mpi = message
 */
        __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mrecv(__pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, (&__pyx_v_message), __pyx_v_statusp)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(26, 75, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Message.pyx":75
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mrecv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, statusp) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Message.pyx":78
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, statusp) )
 *         if self is not __MESSAGE_NO_PROC__:             # <<<<<<<<<<<<<<
 *             self.ob_mpi = message
 * 
 */
  __pyx_t_2 = (__pyx_v_self != __pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__);
  __pyx_t_5 = (__pyx_t_2 != 0);
  if (__pyx_t_5) {

    /* "mpi4py/MPI/Message.pyx":79
 *             &message, statusp) )
 *         if self is not __MESSAGE_NO_PROC__:
 *             self.ob_mpi = message             # <<<<<<<<<<<<<<
 * 
 *     def Irecv(self, buf):
 */
    __pyx_v_self->ob_mpi = __pyx_v_message;

    /* "mpi4py/MPI/Message.pyx":78
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, statusp) )
 *         if self is not __MESSAGE_NO_PROC__:             # <<<<<<<<<<<<<<
 *             self.ob_mpi = message
 * 
 */
  }

  /* "mpi4py/MPI/Message.pyx":65
 *     # ----------------
 * 
 *     def Recv(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking receive of matched message
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Message.Recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":81
 *             self.ob_mpi = message
 * 
 *     def Irecv(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking receive of matched message
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_15Irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_14Irecv[] = "Message.Irecv(self, buf)\n\n        Nonblocking receive of matched message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_15Irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Irecv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Irecv") < 0)) __PYX_ERR(26, 81, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Irecv", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 81, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.Irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_14Irecv(((struct PyMPIMessageObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_14Irecv(struct PyMPIMessageObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  MPI_Message __pyx_v_message;
  int __pyx_v_source;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Message __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("Irecv", 0);

  /* "mpi4py/MPI/Message.pyx":85
 *         Nonblocking receive of matched message
 *         """
 *         cdef MPI_Message message = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_message = __pyx_t_1;

  /* "mpi4py/MPI/Message.pyx":86
 *         """
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef int source = MPI_ANY_SOURCE             # <<<<<<<<<<<<<<
 *         if message == MPI_MESSAGE_NO_PROC:
 *             source = MPI_PROC_NULL
 */
  __pyx_v_source = MPI_ANY_SOURCE;

  /* "mpi4py/MPI/Message.pyx":87
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 */
  __pyx_t_2 = ((__pyx_v_message == MPI_MESSAGE_NO_PROC) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Message.pyx":88
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:
 *             source = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
    __pyx_v_source = MPI_PROC_NULL;

    /* "mpi4py/MPI/Message.pyx":87
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef int source = MPI_ANY_SOURCE
 *         if message == MPI_MESSAGE_NO_PROC:             # <<<<<<<<<<<<<<
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 */
  }

  /* "mpi4py/MPI/Message.pyx":89
 *         if message == MPI_MESSAGE_NO_PROC:
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Imrecv(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_buf, __pyx_v_source)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":90
 *             source = MPI_PROC_NULL
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Imrecv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 90, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Message.pyx":91
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Imrecv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Message.pyx":93
 *         with nogil: CHKERR( MPI_Imrecv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         if self is not __MESSAGE_NO_PROC__:
 *             self.ob_mpi = message
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Imrecv(__pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, (&__pyx_v_message), (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(26, 91, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Message.pyx":91
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Imrecv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Message.pyx":94
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, &request.ob_mpi) )
 *         if self is not __MESSAGE_NO_PROC__:             # <<<<<<<<<<<<<<
 *             self.ob_mpi = message
 *         request.ob_buf = rmsg
 */
  __pyx_t_2 = (__pyx_v_self != __pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__);
  __pyx_t_6 = (__pyx_t_2 != 0);
  if (__pyx_t_6) {

    /* "mpi4py/MPI/Message.pyx":95
 *             &message, &request.ob_mpi) )
 *         if self is not __MESSAGE_NO_PROC__:
 *             self.ob_mpi = message             # <<<<<<<<<<<<<<
 *         request.ob_buf = rmsg
 *         return request
 */
    __pyx_v_self->ob_mpi = __pyx_v_message;

    /* "mpi4py/MPI/Message.pyx":94
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             &message, &request.ob_mpi) )
 *         if self is not __MESSAGE_NO_PROC__:             # <<<<<<<<<<<<<<
 *             self.ob_mpi = message
 *         request.ob_buf = rmsg
 */
  }

  /* "mpi4py/MPI/Message.pyx":96
 *         if self is not __MESSAGE_NO_PROC__:
 *             self.ob_mpi = message
 *         request.ob_buf = rmsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_rmsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_rmsg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_rmsg);

  /* "mpi4py/MPI/Message.pyx":97
 *             self.ob_mpi = message
 *         request.ob_buf = rmsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Python Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":81
 *             self.ob_mpi = message
 * 
 *     def Irecv(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking receive of matched message
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Message.Irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":103
 *     #
 *     @classmethod
 *     def probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Blocking test for a matched message"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_17probe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_16probe[] = "Message.probe(type cls, Comm comm, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nBlocking test for a matched message";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_17probe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("probe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Message.pyx":104
 *     @classmethod
 *     def probe(cls, Comm comm,
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """Blocking test for a matched message"""
 *         cdef Message message = <Message>Message.__new__(cls)
 */
    values[3] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "probe") < 0)) __PYX_ERR(26, 103, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 104, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__33;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 104, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__34;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("probe", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 103, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(26, 103, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(26, 104, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_16probe(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm, __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Message.pyx":103
 *     #
 *     @classmethod
 *     def probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Blocking test for a matched message"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_16probe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  struct PyMPIMessageObject *__pyx_v_message = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("probe", 0);

  /* "mpi4py/MPI/Message.pyx":106
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Blocking test for a matched message"""
 *         cdef Message message = <Message>Message.__new__(cls)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm.ob_mpi,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_cls)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_cls));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Message.pyx":107
 *         """Blocking test for a matched message"""
 *         cdef Message message = <Message>Message.__new__(cls)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm.ob_mpi,
 *                                       &message.ob_mpi, statusp)
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Message.pyx":108
 *         cdef Message message = <Message>Message.__new__(cls)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm.ob_mpi,             # <<<<<<<<<<<<<<
 *                                       &message.ob_mpi, statusp)
 *         return message
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_mprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm->ob_mpi, (&__pyx_v_message->ob_mpi), __pyx_v_statusp); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_message->ob_buf);
  __Pyx_DECREF(__pyx_v_message->ob_buf);
  __pyx_v_message->ob_buf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Message.pyx":110
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm.ob_mpi,
 *                                       &message.ob_mpi, statusp)
 *         return message             # <<<<<<<<<<<<<<
 *     #
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":103
 *     #
 *     @classmethod
 *     def probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Blocking test for a matched message"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Message.probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":113
 *     #
 *     @classmethod
 *     def iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Nonblocking test for a matched message"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_19iprobe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_18iprobe[] = "Message.iprobe(type cls, Comm comm, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nNonblocking test for a matched message";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_19iprobe(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iprobe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Message.pyx":114
 *     @classmethod
 *     def iprobe(cls, Comm comm,
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0
 */
    values[3] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iprobe") < 0)) __PYX_ERR(26, 113, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 114, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__35;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 114, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__36;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iprobe", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 113, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm", 0))) __PYX_ERR(26, 113, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(26, 114, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_18iprobe(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm, __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Message.pyx":113
 *     #
 *     @classmethod
 *     def iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Nonblocking test for a matched message"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_18iprobe(PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("iprobe", 0);

  /* "mpi4py/MPI/Message.pyx":116
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(cls)
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Message.pyx":117
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0
 *         cdef Message message = <Message>Message.__new__(cls)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         message.ob_buf = PyMPI_improbe(source, tag, comm.ob_mpi, &flag,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, ((PyObject *)__pyx_v_cls)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_cls));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Message.pyx":118
 *         cdef int flag = 0
 *         cdef Message message = <Message>Message.__new__(cls)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         message.ob_buf = PyMPI_improbe(source, tag, comm.ob_mpi, &flag,
 *                                        &message.ob_mpi, statusp)
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Message.pyx":119
 *         cdef Message message = <Message>Message.__new__(cls)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         message.ob_buf = PyMPI_improbe(source, tag, comm.ob_mpi, &flag,             # <<<<<<<<<<<<<<
 *                                        &message.ob_mpi, statusp)
 *         if flag == 0: return None
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_improbe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm->ob_mpi, (&__pyx_v_flag), (&__pyx_v_message->ob_mpi), __pyx_v_statusp); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_message->ob_buf);
  __Pyx_DECREF(__pyx_v_message->ob_buf);
  __pyx_v_message->ob_buf = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Message.pyx":121
 *         message.ob_buf = PyMPI_improbe(source, tag, comm.ob_mpi, &flag,
 *                                        &message.ob_mpi, statusp)
 *         if flag == 0: return None             # <<<<<<<<<<<<<<
 *         return message
 *     #
 */
  __pyx_t_4 = ((__pyx_v_flag == 0) != 0);
  if (__pyx_t_4) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Message.pyx":122
 *                                        &message.ob_mpi, statusp)
 *         if flag == 0: return None
 *         return message             # <<<<<<<<<<<<<<
 *     #
 *     def recv(self, Status status=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":113
 *     #
 *     @classmethod
 *     def iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Nonblocking test for a matched message"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Message.iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":124
 *         return message
 *     #
 *     def recv(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """Blocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_21recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_20recv[] = "Message.recv(self, Status status=None)\nBlocking receive of matched message";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_21recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("recv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "recv") < 0)) __PYX_ERR(26, 124, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("recv", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 124, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(26, 124, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_20recv(((struct PyMPIMessageObject *)__pyx_v_self), __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_20recv(struct PyMPIMessageObject *__pyx_v_self, struct PyMPIStatusObject *__pyx_v_status) {
  PyObject *__pyx_v_rmsg = 0;
  MPI_Message __pyx_v_message;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  MPI_Message __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("recv", 0);

  /* "mpi4py/MPI/Message.pyx":126
 *     def recv(self, Status status=None):
 *         """Blocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf             # <<<<<<<<<<<<<<
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_t_1 = __pyx_v_self->ob_buf;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_rmsg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Message.pyx":127
 *         """Blocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf
 *         cdef MPI_Message message = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         rmsg = PyMPI_mrecv(rmsg, &message, statusp)
 */
  __pyx_t_2 = __pyx_v_self->ob_mpi;
  __pyx_v_message = __pyx_t_2;

  /* "mpi4py/MPI/Message.pyx":128
 *         cdef object rmsg = self.ob_buf
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         rmsg = PyMPI_mrecv(rmsg, &message, statusp)
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Message.pyx":129
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         rmsg = PyMPI_mrecv(rmsg, &message, statusp)             # <<<<<<<<<<<<<<
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_PyMPI_mrecv(__pyx_v_rmsg, (&__pyx_v_message), __pyx_v_statusp); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_rmsg, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Message.pyx":130
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         rmsg = PyMPI_mrecv(rmsg, &message, statusp)
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None
 *         return rmsg
 */
  __pyx_t_3 = (__pyx_v_self != __pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
    __pyx_v_self->ob_mpi = __pyx_v_message;
  }

  /* "mpi4py/MPI/Message.pyx":131
 *         rmsg = PyMPI_mrecv(rmsg, &message, statusp)
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None             # <<<<<<<<<<<<<<
 *         return rmsg
 *     #
 */
  __pyx_t_4 = ((__pyx_v_self->ob_mpi == MPI_MESSAGE_NULL) != 0);
  if (__pyx_t_4) {
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->ob_buf);
    __Pyx_DECREF(__pyx_v_self->ob_buf);
    __pyx_v_self->ob_buf = Py_None;
  }

  /* "mpi4py/MPI/Message.pyx":132
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None
 *         return rmsg             # <<<<<<<<<<<<<<
 *     #
 *     def irecv(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rmsg);
  __pyx_r = __pyx_v_rmsg;
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":124
 *         return message
 *     #
 *     def recv(self, Status status=None):             # <<<<<<<<<<<<<<
 *         """Blocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Message.recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":134
 *         return rmsg
 *     #
 *     def irecv(self):             # <<<<<<<<<<<<<<
 *         """Nonblocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_23irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_22irecv[] = "Message.irecv(self)\nNonblocking receive of matched message";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_23irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("irecv (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("irecv", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "irecv", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_22irecv(((struct PyMPIMessageObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_22irecv(struct PyMPIMessageObject *__pyx_v_self) {
  PyObject *__pyx_v_rmsg = 0;
  MPI_Message __pyx_v_message;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  MPI_Message __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("irecv", 0);

  /* "mpi4py/MPI/Message.pyx":136
 *     def irecv(self):
 *         """Nonblocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf             # <<<<<<<<<<<<<<
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = __pyx_v_self->ob_buf;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_rmsg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Message.pyx":137
 *         """Nonblocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf
 *         cdef MPI_Message message = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_imrecv(rmsg, &message, &request.ob_mpi)
 */
  __pyx_t_2 = __pyx_v_self->ob_mpi;
  __pyx_v_message = __pyx_t_2;

  /* "mpi4py/MPI/Message.pyx":138
 *         cdef object rmsg = self.ob_buf
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         request.ob_buf = PyMPI_imrecv(rmsg, &message, &request.ob_mpi)
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 138, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":139
 *         cdef MPI_Message message = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_imrecv(rmsg, &message, &request.ob_mpi)             # <<<<<<<<<<<<<<
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_imrecv(__pyx_v_rmsg, (&__pyx_v_message), (&__pyx_v_request->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Message.pyx":140
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_imrecv(rmsg, &message, &request.ob_mpi)
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None
 *         return request
 */
  __pyx_t_4 = (__pyx_v_self != __pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {
    __pyx_v_self->ob_mpi = __pyx_v_message;
  }

  /* "mpi4py/MPI/Message.pyx":141
 *         request.ob_buf = PyMPI_imrecv(rmsg, &message, &request.ob_mpi)
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __pyx_t_5 = ((__pyx_v_self->ob_mpi == MPI_MESSAGE_NULL) != 0);
  if (__pyx_t_5) {
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->ob_buf);
    __Pyx_DECREF(__pyx_v_self->ob_buf);
    __pyx_v_self->ob_buf = Py_None;
  }

  /* "mpi4py/MPI/Message.pyx":142
 *         if self is not __MESSAGE_NO_PROC__: self.ob_mpi = message
 *         if self.ob_mpi == MPI_MESSAGE_NULL: self.ob_buf = None
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":134
 *         return rmsg
 *     #
 *     def irecv(self):             # <<<<<<<<<<<<<<
 *         """Nonblocking receive of matched message"""
 *         cdef object rmsg = self.ob_buf
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Message.irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rmsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":147
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_25py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_24py2f[] = "Message.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_25py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_24py2f(((struct PyMPIMessageObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_24py2f(struct PyMPIMessageObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Message.pyx":150
 *         """
 *         """
 *         return MPI_Message_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Message_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":147
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Message.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Message.pyx":153
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_27f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_7Message_26f2py[] = "Message.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_7Message_27f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(26, 153, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(26, 153, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Message.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_7Message_26f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_7Message_26f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Message.pyx":156
 *         """
 *         """
 *         cdef Message message = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *         message.ob_mpi = MPI_Message_f2c(arg)
 *         return message
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 156, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Message.pyx":157
 *         """
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = MPI_Message_f2c(arg)             # <<<<<<<<<<<<<<
 *         return message
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(26, 157, __pyx_L1_error)
  __pyx_v_message->ob_mpi = MPI_Message_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Message.pyx":158
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = MPI_Message_f2c(arg)
 *         return message             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Message.pyx":153
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Message.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":7
 *     """
 * 
 *     def __cinit__(self, Info info=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_INFO_NULL
 *         if info is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Info_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Info_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIInfoObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(27, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 1, "info", 0))) __PYX_ERR(27, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info___cinit__(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Info___cinit__(struct PyMPIInfoObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Info __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Info.pyx":8
 * 
 *     def __cinit__(self, Info info=None):
 *         self.ob_mpi = MPI_INFO_NULL             # <<<<<<<<<<<<<<
 *         if info is None: return
 *         self.ob_mpi = info.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_INFO_NULL;

  /* "mpi4py/MPI/Info.pyx":9
 *     def __cinit__(self, Info info=None):
 *         self.ob_mpi = MPI_INFO_NULL
 *         if info is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = info.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_info) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":10
 *         self.ob_mpi = MPI_INFO_NULL
 *         if info is None: return
 *         self.ob_mpi = info.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_3 = __pyx_v_info->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Info.pyx":7
 *     """
 * 
 *     def __cinit__(self, Info info=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_INFO_NULL
 *         if info is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":12
 *         self.ob_mpi = info.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Info(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_4Info_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_4Info_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_4Info_2__dealloc__(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_4Info_2__dealloc__(struct PyMPIInfoObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Info.pyx":13
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Info(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":14
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Info(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Info((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 14, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":12
 *         self.ob_mpi = info.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Info(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Info.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Info.pyx":16
 *         CHKERR( del_Info(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Info): return NotImplemented
 *         cdef Info s = <Info>self, o = <Info>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_4__richcmp__(((struct PyMPIInfoObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_4__richcmp__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIInfoObject *__pyx_v_s = 0;
  struct PyMPIInfoObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Info.pyx":17
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Info): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Info s = <Info>self, o = <Info>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Info); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":18
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Info): return NotImplemented
 *         cdef Info s = <Info>self, o = <Info>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIInfoObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIInfoObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":19
 *         if not isinstance(other, Info): return NotImplemented
 *         cdef Info s = <Info>self, o = <Info>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 19, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":20
 *         cdef Info s = <Info>self, o = <Info>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":21
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":22
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":23
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(27, 23, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":16
 *         CHKERR( del_Info(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Info): return NotImplemented
 *         cdef Info s = <Info>self, o = <Info>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":25
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_INFO_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Info_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Info_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_6__bool__(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Info_6__bool__(struct PyMPIInfoObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Info.pyx":26
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_INFO_NULL             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_INFO_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":25
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_INFO_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":29
 * 
 *     @classmethod
 *     def Create(cls):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new, empty info object
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_9Create(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_8Create[] = "Info.Create(type cls)\n\n        Create a new, empty info object\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_9Create(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Create", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Create", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_8Create(((PyTypeObject*)__pyx_v_cls));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_8Create(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create", 0);

  /* "mpi4py/MPI/Info.pyx":33
 *         Create a new, empty info object
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_create(&info.ob_mpi) )
 *         return info
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 33, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Info.pyx":34
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         CHKERR( MPI_Info_create(&info.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return info
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_create((&__pyx_v_info->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(27, 34, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":35
 *         cdef Info info = <Info>Info.__new__(Info)
 *         CHKERR( MPI_Info_create(&info.ob_mpi) )
 *         return info             # <<<<<<<<<<<<<<
 * 
 *     def Free(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = ((PyObject *)__pyx_v_info);
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":29
 * 
 *     @classmethod
 *     def Create(cls):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new, empty info object
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":37
 *         return info
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a info object
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_11Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_10Free[] = "Info.Free(self)\n\n        Free a info object\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_11Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_10Free(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_10Free(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Info.pyx":41
 *         Free a info object
 *         """
 *         CHKERR( MPI_Info_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         if self is __INFO_ENV__: self.ob_mpi = MPI_INFO_ENV
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 41, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":42
 *         """
 *         CHKERR( MPI_Info_free(&self.ob_mpi) )
 *         if self is __INFO_ENV__: self.ob_mpi = MPI_INFO_ENV             # <<<<<<<<<<<<<<
 * 
 *     def Dup(self):
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___INFO_ENV__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_INFO_ENV;
  }

  /* "mpi4py/MPI/Info.pyx":37
 *         return info
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a info object
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":44
 *         if self is __INFO_ENV__: self.ob_mpi = MPI_INFO_ENV
 * 
 *     def Dup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate an existing info object, creating a new object, with
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_13Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_12Dup[] = "Info.Dup(self)\n\n        Duplicate an existing info object, creating a new object, with\n        the same (key, value) pairs and the same ordering of keys\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_13Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dup (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Dup", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Dup", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_12Dup(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_12Dup(struct PyMPIInfoObject *__pyx_v_self) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Dup", 0);

  /* "mpi4py/MPI/Info.pyx":49
 *         the same (key, value) pairs and the same ordering of keys
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_dup(self.ob_mpi, &info.ob_mpi) )
 *         return info
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 49, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Info.pyx":50
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         CHKERR( MPI_Info_dup(self.ob_mpi, &info.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return info
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_dup(__pyx_v_self->ob_mpi, (&__pyx_v_info->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(27, 50, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":51
 *         cdef Info info = <Info>Info.__new__(Info)
 *         CHKERR( MPI_Info_dup(self.ob_mpi, &info.ob_mpi) )
 *         return info             # <<<<<<<<<<<<<<
 * 
 *     def Get(self, object key, int maxlen=-1):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = ((PyObject *)__pyx_v_info);
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":44
 *         if self is __INFO_ENV__: self.ob_mpi = MPI_INFO_ENV
 * 
 *     def Dup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate an existing info object, creating a new object, with
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Dup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":53
 *         return info
 * 
 *     def Get(self, object key, int maxlen=-1):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve the value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_15Get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_14Get[] = "Info.Get(self, key, int maxlen=-1)\n\n        Retrieve the value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_15Get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  int __pyx_v_maxlen;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_maxlen,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxlen);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get") < 0)) __PYX_ERR(27, 53, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_key = values[0];
    if (values[1]) {
      __pyx_v_maxlen = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_maxlen == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 53, __pyx_L3_error)
    } else {
      __pyx_v_maxlen = ((int)-1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 53, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_14Get(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_key, __pyx_v_maxlen);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_14Get(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, int __pyx_v_maxlen) {
  char *__pyx_v_ckey;
  char *__pyx_v_cvalue;
  int __pyx_v_flag;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get", 0);
  __Pyx_INCREF(__pyx_v_key);

  /* "mpi4py/MPI/Info.pyx":57
 *         Retrieve the value associated with a key
 *         """
 *         if maxlen < 0: maxlen = MPI_MAX_INFO_VAL             # <<<<<<<<<<<<<<
 *         if maxlen > MPI_MAX_INFO_VAL: maxlen = MPI_MAX_INFO_VAL
 *         cdef char *ckey = NULL
 */
  __pyx_t_1 = ((__pyx_v_maxlen < 0) != 0);
  if (__pyx_t_1) {
    __pyx_v_maxlen = MPI_MAX_INFO_VAL;
  }

  /* "mpi4py/MPI/Info.pyx":58
 *         """
 *         if maxlen < 0: maxlen = MPI_MAX_INFO_VAL
 *         if maxlen > MPI_MAX_INFO_VAL: maxlen = MPI_MAX_INFO_VAL             # <<<<<<<<<<<<<<
 *         cdef char *ckey = NULL
 *         cdef char *cvalue = NULL
 */
  __pyx_t_1 = ((__pyx_v_maxlen > MPI_MAX_INFO_VAL) != 0);
  if (__pyx_t_1) {
    __pyx_v_maxlen = MPI_MAX_INFO_VAL;
  }

  /* "mpi4py/MPI/Info.pyx":59
 *         if maxlen < 0: maxlen = MPI_MAX_INFO_VAL
 *         if maxlen > MPI_MAX_INFO_VAL: maxlen = MPI_MAX_INFO_VAL
 *         cdef char *ckey = NULL             # <<<<<<<<<<<<<<
 *         cdef char *cvalue = NULL
 *         cdef int flag = 0
 */
  __pyx_v_ckey = NULL;

  /* "mpi4py/MPI/Info.pyx":60
 *         if maxlen > MPI_MAX_INFO_VAL: maxlen = MPI_MAX_INFO_VAL
 *         cdef char *ckey = NULL
 *         cdef char *cvalue = NULL             # <<<<<<<<<<<<<<
 *         cdef int flag = 0
 *         key = asmpistr(key, &ckey)
 */
  __pyx_v_cvalue = NULL;

  /* "mpi4py/MPI/Info.pyx":61
 *         cdef char *ckey = NULL
 *         cdef char *cvalue = NULL
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         key = asmpistr(key, &ckey)
 *         cdef tmp = allocate((maxlen+1), sizeof(char), &cvalue)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Info.pyx":62
 *         cdef char *cvalue = NULL
 *         cdef int flag = 0
 *         key = asmpistr(key, &ckey)             # <<<<<<<<<<<<<<
 *         cdef tmp = allocate((maxlen+1), sizeof(char), &cvalue)
 *         CHKERR( MPI_Info_get(self.ob_mpi, ckey, maxlen, cvalue, &flag) )
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_key, (&__pyx_v_ckey)); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Info.pyx":63
 *         cdef int flag = 0
 *         key = asmpistr(key, &ckey)
 *         cdef tmp = allocate((maxlen+1), sizeof(char), &cvalue)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_get(self.ob_mpi, ckey, maxlen, cvalue, &flag) )
 *         cvalue[maxlen] = 0 # just in case
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate((__pyx_v_maxlen + 1), (sizeof(char)), (&__pyx_v_cvalue))); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Info.pyx":64
 *         key = asmpistr(key, &ckey)
 *         cdef tmp = allocate((maxlen+1), sizeof(char), &cvalue)
 *         CHKERR( MPI_Info_get(self.ob_mpi, ckey, maxlen, cvalue, &flag) )             # <<<<<<<<<<<<<<
 *         cvalue[maxlen] = 0 # just in case
 *         if not flag: return None
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_get(__pyx_v_self->ob_mpi, __pyx_v_ckey, __pyx_v_maxlen, __pyx_v_cvalue, (&__pyx_v_flag))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(27, 64, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":65
 *         cdef tmp = allocate((maxlen+1), sizeof(char), &cvalue)
 *         CHKERR( MPI_Info_get(self.ob_mpi, ckey, maxlen, cvalue, &flag) )
 *         cvalue[maxlen] = 0 # just in case             # <<<<<<<<<<<<<<
 *         if not flag: return None
 *         return mpistr(cvalue)
 */
  (__pyx_v_cvalue[__pyx_v_maxlen]) = 0;

  /* "mpi4py/MPI/Info.pyx":66
 *         CHKERR( MPI_Info_get(self.ob_mpi, ckey, maxlen, cvalue, &flag) )
 *         cvalue[maxlen] = 0 # just in case
 *         if not flag: return None             # <<<<<<<<<<<<<<
 *         return mpistr(cvalue)
 * 
 */
  __pyx_t_1 = ((!(__pyx_v_flag != 0)) != 0);
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":67
 *         cvalue[maxlen] = 0 # just in case
 *         if not flag: return None
 *         return mpistr(cvalue)             # <<<<<<<<<<<<<<
 * 
 *     def Set(self, object key, object value):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_mpistr(__pyx_v_cvalue); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":53
 *         return info
 * 
 *     def Get(self, object key, int maxlen=-1):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve the value associated with a key
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":69
 *         return mpistr(cvalue)
 * 
 *     def Set(self, object key, object value):             # <<<<<<<<<<<<<<
 *         """
 *         Add the (key, value) pair to info, and overrides the value if
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_17Set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_16Set[] = "Info.Set(self, key, value)\n\n        Add the (key, value) pair to info, and overrides the value if\n        a value for the same key was previously set\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_17Set(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_value,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Set", 1, 2, 2, 1); __PYX_ERR(27, 69, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set") < 0)) __PYX_ERR(27, 69, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_key = values[0];
    __pyx_v_value = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 69, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.Set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_16Set(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_key, __pyx_v_value);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_16Set(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  char *__pyx_v_ckey;
  char *__pyx_v_cvalue;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Set", 0);
  __Pyx_INCREF(__pyx_v_key);
  __Pyx_INCREF(__pyx_v_value);

  /* "mpi4py/MPI/Info.pyx":74
 *         a value for the same key was previously set
 *         """
 *         cdef char *ckey = NULL             # <<<<<<<<<<<<<<
 *         cdef char *cvalue = NULL
 *         key = asmpistr(key, &ckey)
 */
  __pyx_v_ckey = NULL;

  /* "mpi4py/MPI/Info.pyx":75
 *         """
 *         cdef char *ckey = NULL
 *         cdef char *cvalue = NULL             # <<<<<<<<<<<<<<
 *         key = asmpistr(key, &ckey)
 *         value = asmpistr(value, &cvalue)
 */
  __pyx_v_cvalue = NULL;

  /* "mpi4py/MPI/Info.pyx":76
 *         cdef char *ckey = NULL
 *         cdef char *cvalue = NULL
 *         key = asmpistr(key, &ckey)             # <<<<<<<<<<<<<<
 *         value = asmpistr(value, &cvalue)
 *         CHKERR( MPI_Info_set(self.ob_mpi, ckey, cvalue) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_key, (&__pyx_v_ckey)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Info.pyx":77
 *         cdef char *cvalue = NULL
 *         key = asmpistr(key, &ckey)
 *         value = asmpistr(value, &cvalue)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_set(self.ob_mpi, ckey, cvalue) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_value, (&__pyx_v_cvalue)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Info.pyx":78
 *         key = asmpistr(key, &ckey)
 *         value = asmpistr(value, &cvalue)
 *         CHKERR( MPI_Info_set(self.ob_mpi, ckey, cvalue) )             # <<<<<<<<<<<<<<
 * 
 *     def Delete(self, object key):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_set(__pyx_v_self->ob_mpi, __pyx_v_ckey, __pyx_v_cvalue)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 78, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":69
 *         return mpistr(cvalue)
 * 
 *     def Set(self, object key, object value):             # <<<<<<<<<<<<<<
 *         """
 *         Add the (key, value) pair to info, and overrides the value if
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":80
 *         CHKERR( MPI_Info_set(self.ob_mpi, ckey, cvalue) )
 * 
 *     def Delete(self, object key):             # <<<<<<<<<<<<<<
 *         """
 *         Remove a (key, value) pair from info
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_19Delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_18Delete[] = "Info.Delete(self, key)\n\n        Remove a (key, value) pair from info\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_19Delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Delete (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Delete") < 0)) __PYX_ERR(27, 80, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_key = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Delete", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 80, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.Delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_18Delete(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_key);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_18Delete(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key) {
  char *__pyx_v_ckey;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Delete", 0);
  __Pyx_INCREF(__pyx_v_key);

  /* "mpi4py/MPI/Info.pyx":84
 *         Remove a (key, value) pair from info
 *         """
 *         cdef char *ckey = NULL             # <<<<<<<<<<<<<<
 *         key = asmpistr(key, &ckey)
 *         CHKERR( MPI_Info_delete(self.ob_mpi, ckey) )
 */
  __pyx_v_ckey = NULL;

  /* "mpi4py/MPI/Info.pyx":85
 *         """
 *         cdef char *ckey = NULL
 *         key = asmpistr(key, &ckey)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_delete(self.ob_mpi, ckey) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_key, (&__pyx_v_ckey)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Info.pyx":86
 *         cdef char *ckey = NULL
 *         key = asmpistr(key, &ckey)
 *         CHKERR( MPI_Info_delete(self.ob_mpi, ckey) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_nkeys(self):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_delete(__pyx_v_self->ob_mpi, __pyx_v_ckey)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 86, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":80
 *         CHKERR( MPI_Info_set(self.ob_mpi, ckey, cvalue) )
 * 
 *     def Delete(self, object key):             # <<<<<<<<<<<<<<
 *         """
 *         Remove a (key, value) pair from info
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":88
 *         CHKERR( MPI_Info_delete(self.ob_mpi, ckey) )
 * 
 *     def Get_nkeys(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of currently defined keys in info
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_21Get_nkeys(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_20Get_nkeys[] = "Info.Get_nkeys(self)\n\n        Return the number of currently defined keys in info\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_21Get_nkeys(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_nkeys (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_nkeys", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_nkeys", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_20Get_nkeys(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_20Get_nkeys(struct PyMPIInfoObject *__pyx_v_self) {
  int __pyx_v_nkeys;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_nkeys", 0);

  /* "mpi4py/MPI/Info.pyx":92
 *         Return the number of currently defined keys in info
 *         """
 *         cdef int nkeys = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_get_nkeys(self.ob_mpi, &nkeys) )
 *         return nkeys
 */
  __pyx_v_nkeys = 0;

  /* "mpi4py/MPI/Info.pyx":93
 *         """
 *         cdef int nkeys = 0
 *         CHKERR( MPI_Info_get_nkeys(self.ob_mpi, &nkeys) )             # <<<<<<<<<<<<<<
 *         return nkeys
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_get_nkeys(__pyx_v_self->ob_mpi, (&__pyx_v_nkeys))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 93, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":94
 *         cdef int nkeys = 0
 *         CHKERR( MPI_Info_get_nkeys(self.ob_mpi, &nkeys) )
 *         return nkeys             # <<<<<<<<<<<<<<
 * 
 *     def Get_nthkey(self, int n):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nkeys); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":88
 *         CHKERR( MPI_Info_delete(self.ob_mpi, ckey) )
 * 
 *     def Get_nkeys(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of currently defined keys in info
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Get_nkeys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":96
 *         return nkeys
 * 
 *     def Get_nthkey(self, int n):             # <<<<<<<<<<<<<<
 *         """
 *         Return the nth defined key in info. Keys are numbered in the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_23Get_nthkey(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_22Get_nthkey[] = "Info.Get_nthkey(self, int n)\n\n        Return the nth defined key in info. Keys are numbered in the\n        range [0, N) where N is the value returned by\n        `Info.Get_nkeys()`\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_23Get_nthkey(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_n;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_nthkey (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_n)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_nthkey") < 0)) __PYX_ERR(27, 96, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_n = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_n == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 96, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_nthkey", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 96, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.Get_nthkey", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_22Get_nthkey(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_n);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_22Get_nthkey(struct PyMPIInfoObject *__pyx_v_self, int __pyx_v_n) {
  char __pyx_v_ckey[(MPI_MAX_INFO_KEY + 1)];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_nthkey", 0);

  /* "mpi4py/MPI/Info.pyx":103
 *         """
 *         cdef char ckey[MPI_MAX_INFO_KEY+1]
 *         CHKERR( MPI_Info_get_nthkey(self.ob_mpi, n, ckey) )             # <<<<<<<<<<<<<<
 *         ckey[MPI_MAX_INFO_KEY] = 0 # just in case
 *         return mpistr(ckey)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_get_nthkey(__pyx_v_self->ob_mpi, __pyx_v_n, __pyx_v_ckey)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 103, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":104
 *         cdef char ckey[MPI_MAX_INFO_KEY+1]
 *         CHKERR( MPI_Info_get_nthkey(self.ob_mpi, n, ckey) )
 *         ckey[MPI_MAX_INFO_KEY] = 0 # just in case             # <<<<<<<<<<<<<<
 *         return mpistr(ckey)
 * 
 */
  (__pyx_v_ckey[MPI_MAX_INFO_KEY]) = 0;

  /* "mpi4py/MPI/Info.pyx":105
 *         CHKERR( MPI_Info_get_nthkey(self.ob_mpi, n, ckey) )
 *         ckey[MPI_MAX_INFO_KEY] = 0 # just in case
 *         return mpistr(ckey)             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_mpistr(__pyx_v_ckey); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":96
 *         return nkeys
 * 
 *     def Get_nthkey(self, int n):             # <<<<<<<<<<<<<<
 *         """
 *         Return the nth defined key in info. Keys are numbered in the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Info.Get_nthkey", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":110
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_25py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_24py2f[] = "Info.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_25py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_24py2f(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_24py2f(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Info.pyx":113
 *         """
 *         """
 *         return MPI_Info_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Info_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":110
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Info.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":116
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_27f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_26f2py[] = "Info.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_27f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(27, 116, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 116, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_26f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_26f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Info.pyx":119
 *         """
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *         info.ob_mpi = MPI_Info_f2c(arg)
 *         return info
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 119, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Info.pyx":120
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         info.ob_mpi = MPI_Info_f2c(arg)             # <<<<<<<<<<<<<<
 *         return info
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(27, 120, __pyx_L1_error)
  __pyx_v_info->ob_mpi = MPI_Info_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Info.pyx":121
 *         cdef Info info = <Info>Info.__new__(Info)
 *         info.ob_mpi = MPI_Info_f2c(arg)
 *         return info             # <<<<<<<<<<<<<<
 * 
 *     # Python mapping emulation
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = ((PyObject *)__pyx_v_info);
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":116
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Info.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":126
 *     # ------------------------
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         if not self: return 0
 *         return self.Get_nkeys()
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_4Info_29__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_4Info_29__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_28__len__(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_6mpi4py_3MPI_4Info_28__len__(struct PyMPIInfoObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  __Pyx_RefNannySetupContext("__len__", 0);

  /* "mpi4py/MPI/Info.pyx":127
 * 
 *     def __len__(self):
 *         if not self: return 0             # <<<<<<<<<<<<<<
 *         return self.Get_nkeys()
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 127, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":128
 *     def __len__(self):
 *         if not self: return 0
 *         return self.Get_nkeys()             # <<<<<<<<<<<<<<
 * 
 *     def __contains__(self, object key):
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nkeys); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(27, 128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":126
 *     # ------------------------
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         if not self: return 0
 *         return self.Get_nkeys()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":130
 *         return self.Get_nkeys()
 * 
 *     def __contains__(self, object key):             # <<<<<<<<<<<<<<
 *         if not self: return False
 *         cdef char *ckey = NULL
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Info_31__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Info_31__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_30__contains__(((struct PyMPIInfoObject *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Info_30__contains__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key) {
  char *__pyx_v_ckey;
  int __pyx_v_dummy;
  int __pyx_v_haskey;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("__contains__", 0);
  __Pyx_INCREF(__pyx_v_key);

  /* "mpi4py/MPI/Info.pyx":131
 * 
 *     def __contains__(self, object key):
 *         if not self: return False             # <<<<<<<<<<<<<<
 *         cdef char *ckey = NULL
 *         cdef int dummy = 0
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 131, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":132
 *     def __contains__(self, object key):
 *         if not self: return False
 *         cdef char *ckey = NULL             # <<<<<<<<<<<<<<
 *         cdef int dummy = 0
 *         cdef int haskey = 0
 */
  __pyx_v_ckey = NULL;

  /* "mpi4py/MPI/Info.pyx":133
 *         if not self: return False
 *         cdef char *ckey = NULL
 *         cdef int dummy = 0             # <<<<<<<<<<<<<<
 *         cdef int haskey = 0
 *         key = asmpistr(key, &ckey)
 */
  __pyx_v_dummy = 0;

  /* "mpi4py/MPI/Info.pyx":134
 *         cdef char *ckey = NULL
 *         cdef int dummy = 0
 *         cdef int haskey = 0             # <<<<<<<<<<<<<<
 *         key = asmpistr(key, &ckey)
 *         CHKERR( MPI_Info_get_valuelen(self.ob_mpi, ckey, &dummy, &haskey) )
 */
  __pyx_v_haskey = 0;

  /* "mpi4py/MPI/Info.pyx":135
 *         cdef int dummy = 0
 *         cdef int haskey = 0
 *         key = asmpistr(key, &ckey)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Info_get_valuelen(self.ob_mpi, ckey, &dummy, &haskey) )
 *         return <bint>haskey
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_key, (&__pyx_v_ckey)); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_key, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":136
 *         cdef int haskey = 0
 *         key = asmpistr(key, &ckey)
 *         CHKERR( MPI_Info_get_valuelen(self.ob_mpi, ckey, &dummy, &haskey) )             # <<<<<<<<<<<<<<
 *         return <bint>haskey
 * 
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Info_get_valuelen(__pyx_v_self->ob_mpi, __pyx_v_ckey, (&__pyx_v_dummy), (&__pyx_v_haskey))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 136, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":137
 *         key = asmpistr(key, &ckey)
 *         CHKERR( MPI_Info_get_valuelen(self.ob_mpi, ckey, &dummy, &haskey) )
 *         return <bint>haskey             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
 */
  __pyx_r = (__pyx_v_haskey != 0);
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":130
 *         return self.Get_nkeys()
 * 
 *     def __contains__(self, object key):             # <<<<<<<<<<<<<<
 *         if not self: return False
 *         cdef char *ckey = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":139
 *         return <bint>haskey
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return iter(self.keys())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_33__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_33__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_32__iter__(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_32__iter__(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "mpi4py/MPI/Info.pyx":140
 * 
 *     def __iter__(self):
 *         return iter(self.keys())             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, object key):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":139
 *         return <bint>haskey
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return iter(self.keys())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":142
 *         return iter(self.keys())
 * 
 *     def __getitem__(self, object key):             # <<<<<<<<<<<<<<
 *         if not self: raise KeyError(key)
 *         cdef object value = self.Get(key)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_35__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_35__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_34__getitem__(((struct PyMPIInfoObject *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_34__getitem__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "mpi4py/MPI/Info.pyx":143
 * 
 *     def __getitem__(self, object key):
 *         if not self: raise KeyError(key)             # <<<<<<<<<<<<<<
 *         cdef object value = self.Get(key)
 *         if value is None: raise KeyError(key)
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 143, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (unlikely(__pyx_t_2)) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_KeyError, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(27, 143, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":144
 *     def __getitem__(self, object key):
 *         if not self: raise KeyError(key)
 *         cdef object value = self.Get(key)             # <<<<<<<<<<<<<<
 *         if value is None: raise KeyError(key)
 *         return value
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_value = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":145
 *         if not self: raise KeyError(key)
 *         cdef object value = self.Get(key)
 *         if value is None: raise KeyError(key)             # <<<<<<<<<<<<<<
 *         return value
 * 
 */
  __pyx_t_2 = (__pyx_v_value == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_KeyError, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 145, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(27, 145, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":146
 *         cdef object value = self.Get(key)
 *         if value is None: raise KeyError(key)
 *         return value             # <<<<<<<<<<<<<<
 * 
 *     def __setitem__(self, object key, object value):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_value);
  __pyx_r = __pyx_v_value;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":142
 *         return iter(self.keys())
 * 
 *     def __getitem__(self, object key):             # <<<<<<<<<<<<<<
 *         if not self: raise KeyError(key)
 *         cdef object value = self.Get(key)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":148
 *         return value
 * 
 *     def __setitem__(self, object key, object value):             # <<<<<<<<<<<<<<
 *         if not self: raise KeyError(key)
 *         self.Set(key, value)
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Info_37__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Info_37__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_36__setitem__(((struct PyMPIInfoObject *)__pyx_v_self), ((PyObject *)__pyx_v_key), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Info_36__setitem__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("__setitem__", 0);

  /* "mpi4py/MPI/Info.pyx":149
 * 
 *     def __setitem__(self, object key, object value):
 *         if not self: raise KeyError(key)             # <<<<<<<<<<<<<<
 *         self.Set(key, value)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 149, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (unlikely(__pyx_t_2)) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_KeyError, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(27, 149, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":150
 *     def __setitem__(self, object key, object value):
 *         if not self: raise KeyError(key)
 *         self.Set(key, value)             # <<<<<<<<<<<<<<
 * 
 *     def __delitem__(self, object key):
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_key, __pyx_v_value};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 150, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_key, __pyx_v_value};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 150, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_key);
    __Pyx_INCREF(__pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_value);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":148
 *         return value
 * 
 *     def __setitem__(self, object key, object value):             # <<<<<<<<<<<<<<
 *         if not self: raise KeyError(key)
 *         self.Set(key, value)
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":152
 *         self.Set(key, value)
 * 
 *     def __delitem__(self, object key):             # <<<<<<<<<<<<<<
 *         if not self: raise KeyError(key)
 *         if key not in self: raise KeyError(key)
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Info_39__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Info_39__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_38__delitem__(((struct PyMPIInfoObject *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Info_38__delitem__(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__delitem__", 0);

  /* "mpi4py/MPI/Info.pyx":153
 * 
 *     def __delitem__(self, object key):
 *         if not self: raise KeyError(key)             # <<<<<<<<<<<<<<
 *         if key not in self: raise KeyError(key)
 *         self.Delete(key)
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 153, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (unlikely(__pyx_t_2)) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_KeyError, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(27, 153, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":154
 *     def __delitem__(self, object key):
 *         if not self: raise KeyError(key)
 *         if key not in self: raise KeyError(key)             # <<<<<<<<<<<<<<
 *         self.Delete(key)
 * 
 */
  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_v_key, ((PyObject *)__pyx_v_self), Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(27, 154, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_KeyError, __pyx_v_key); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 154, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(27, 154, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":155
 *         if not self: raise KeyError(key)
 *         if key not in self: raise KeyError(key)
 *         self.Delete(key)             # <<<<<<<<<<<<<<
 * 
 *     def get(self, object key, object default=None):
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Delete); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":152
 *         self.Set(key, value)
 * 
 *     def __delitem__(self, object key):             # <<<<<<<<<<<<<<
 *         if not self: raise KeyError(key)
 *         if key not in self: raise KeyError(key)
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Info.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":157
 *         self.Delete(key)
 * 
 *     def get(self, object key, object default=None):             # <<<<<<<<<<<<<<
 *         """info get"""
 *         if not self: return default
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_41get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_40get[] = "Info.get(self, key, default=None)\ninfo get";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_41get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_default = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_key,&__pyx_n_s_default,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_default);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get") < 0)) __PYX_ERR(27, 157, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_key = values[0];
    __pyx_v_default = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 157, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Info.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_40get(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_key, __pyx_v_default);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_40get(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_default) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("get", 0);

  /* "mpi4py/MPI/Info.pyx":159
 *     def get(self, object key, object default=None):
 *         """info get"""
 *         if not self: return default             # <<<<<<<<<<<<<<
 *         cdef object value = self.Get(key)
 *         if value is None: return default
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 159, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_default);
    __pyx_r = __pyx_v_default;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":160
 *         """info get"""
 *         if not self: return default
 *         cdef object value = self.Get(key)             # <<<<<<<<<<<<<<
 *         if value is None: return default
 *         return value
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_value = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":161
 *         if not self: return default
 *         cdef object value = self.Get(key)
 *         if value is None: return default             # <<<<<<<<<<<<<<
 *         return value
 * 
 */
  __pyx_t_2 = (__pyx_v_value == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_default);
    __pyx_r = __pyx_v_default;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":162
 *         cdef object value = self.Get(key)
 *         if value is None: return default
 *         return value             # <<<<<<<<<<<<<<
 * 
 *     def keys(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_value);
  __pyx_r = __pyx_v_value;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":157
 *         self.Delete(key)
 * 
 *     def get(self, object key, object default=None):             # <<<<<<<<<<<<<<
 *         """info get"""
 *         if not self: return default
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Info.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":164
 *         return value
 * 
 *     def keys(self):             # <<<<<<<<<<<<<<
 *         """info keys"""
 *         if not self: return []
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_43keys(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_42keys[] = "Info.keys(self)\ninfo keys";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_43keys(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keys (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("keys", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "keys", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_42keys(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_42keys(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_v_keys = 0;
  int __pyx_v_k;
  int __pyx_v_nkeys;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  __Pyx_RefNannySetupContext("keys", 0);

  /* "mpi4py/MPI/Info.pyx":166
 *     def keys(self):
 *         """info keys"""
 *         if not self: return []             # <<<<<<<<<<<<<<
 *         cdef list keys = []
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 166, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 166, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":167
 *         """info keys"""
 *         if not self: return []
 *         cdef list keys = []             # <<<<<<<<<<<<<<
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         cdef object key
 */
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_keys = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":168
 *         if not self: return []
 *         cdef list keys = []
 *         cdef int k = 0, nkeys = self.Get_nkeys()             # <<<<<<<<<<<<<<
 *         cdef object key
 *         for k from 0 <= k < nkeys:
 */
  __pyx_v_k = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nkeys); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_nkeys = __pyx_t_6;

  /* "mpi4py/MPI/Info.pyx":170
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         cdef object key
 *         for k from 0 <= k < nkeys:             # <<<<<<<<<<<<<<
 *             key = self.Get_nthkey(k)
 *             keys.append(key)
 */
  __pyx_t_6 = __pyx_v_nkeys;
  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_6; __pyx_v_k++) {

    /* "mpi4py/MPI/Info.pyx":171
 *         cdef object key
 *         for k from 0 <= k < nkeys:
 *             key = self.Get_nthkey(k)             # <<<<<<<<<<<<<<
 *             keys.append(key)
 *         return keys
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nthkey); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_k); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":172
 *         for k from 0 <= k < nkeys:
 *             key = self.Get_nthkey(k)
 *             keys.append(key)             # <<<<<<<<<<<<<<
 *         return keys
 * 
 */
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_keys, __pyx_v_key); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(27, 172, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":173
 *             key = self.Get_nthkey(k)
 *             keys.append(key)
 *         return keys             # <<<<<<<<<<<<<<
 * 
 *     def values(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_keys);
  __pyx_r = __pyx_v_keys;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":164
 *         return value
 * 
 *     def keys(self):             # <<<<<<<<<<<<<<
 *         """info keys"""
 *         if not self: return []
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Info.keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_keys);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":175
 *         return keys
 * 
 *     def values(self):             # <<<<<<<<<<<<<<
 *         """info values"""
 *         if not self: return []
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_45values(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_44values[] = "Info.values(self)\ninfo values";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_45values(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("values (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("values", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "values", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_44values(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_44values(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_v_values = 0;
  int __pyx_v_k;
  int __pyx_v_nkeys;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_val = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  __Pyx_RefNannySetupContext("values", 0);

  /* "mpi4py/MPI/Info.pyx":177
 *     def values(self):
 *         """info values"""
 *         if not self: return []             # <<<<<<<<<<<<<<
 *         cdef list values = []
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 177, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 177, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":178
 *         """info values"""
 *         if not self: return []
 *         cdef list values = []             # <<<<<<<<<<<<<<
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         cdef object key, val
 */
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_values = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":179
 *         if not self: return []
 *         cdef list values = []
 *         cdef int k = 0, nkeys = self.Get_nkeys()             # <<<<<<<<<<<<<<
 *         cdef object key, val
 *         for k from 0 <= k < nkeys:
 */
  __pyx_v_k = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nkeys); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_nkeys = __pyx_t_6;

  /* "mpi4py/MPI/Info.pyx":181
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         cdef object key, val
 *         for k from 0 <= k < nkeys:             # <<<<<<<<<<<<<<
 *             key = self.Get_nthkey(k)
 *             val = self.Get(key)
 */
  __pyx_t_6 = __pyx_v_nkeys;
  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_6; __pyx_v_k++) {

    /* "mpi4py/MPI/Info.pyx":182
 *         cdef object key, val
 *         for k from 0 <= k < nkeys:
 *             key = self.Get_nthkey(k)             # <<<<<<<<<<<<<<
 *             val = self.Get(key)
 *             values.append(val)
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nthkey); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_k); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 182, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":183
 *         for k from 0 <= k < nkeys:
 *             key = self.Get_nthkey(k)
 *             val = self.Get(key)             # <<<<<<<<<<<<<<
 *             values.append(val)
 *         return values
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 183, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":184
 *             key = self.Get_nthkey(k)
 *             val = self.Get(key)
 *             values.append(val)             # <<<<<<<<<<<<<<
 *         return values
 * 
 */
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_values, __pyx_v_val); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(27, 184, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":185
 *             val = self.Get(key)
 *             values.append(val)
 *         return values             # <<<<<<<<<<<<<<
 * 
 *     def items(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_values);
  __pyx_r = __pyx_v_values;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":175
 *         return keys
 * 
 *     def values(self):             # <<<<<<<<<<<<<<
 *         """info values"""
 *         if not self: return []
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Info.values", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_values);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_val);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":187
 *         return values
 * 
 *     def items(self):             # <<<<<<<<<<<<<<
 *         """info items"""
 *         if not self: return []
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_47items(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_46items[] = "Info.items(self)\ninfo items";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_47items(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("items (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("items", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "items", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_46items(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_46items(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_v_items = 0;
  int __pyx_v_k;
  int __pyx_v_nkeys;
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  __Pyx_RefNannySetupContext("items", 0);

  /* "mpi4py/MPI/Info.pyx":189
 *     def items(self):
 *         """info items"""
 *         if not self: return []             # <<<<<<<<<<<<<<
 *         cdef list items = []
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 189, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":190
 *         """info items"""
 *         if not self: return []
 *         cdef list items = []             # <<<<<<<<<<<<<<
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         cdef object key, value
 */
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_items = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":191
 *         if not self: return []
 *         cdef list items = []
 *         cdef int k = 0, nkeys = self.Get_nkeys()             # <<<<<<<<<<<<<<
 *         cdef object key, value
 *         for k from 0 <= k < nkeys:
 */
  __pyx_v_k = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nkeys); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 191, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_nkeys = __pyx_t_6;

  /* "mpi4py/MPI/Info.pyx":193
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         cdef object key, value
 *         for k from 0 <= k < nkeys:             # <<<<<<<<<<<<<<
 *             key = self.Get_nthkey(k)
 *             value = self.Get(key)
 */
  __pyx_t_6 = __pyx_v_nkeys;
  for (__pyx_v_k = 0; __pyx_v_k < __pyx_t_6; __pyx_v_k++) {

    /* "mpi4py/MPI/Info.pyx":194
 *         cdef object key, value
 *         for k from 0 <= k < nkeys:
 *             key = self.Get_nthkey(k)             # <<<<<<<<<<<<<<
 *             value = self.Get(key)
 *             items.append((key, value))
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nthkey); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_k); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":195
 *         for k from 0 <= k < nkeys:
 *             key = self.Get_nthkey(k)
 *             value = self.Get(key)             # <<<<<<<<<<<<<<
 *             items.append((key, value))
 *         return items
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":196
 *             key = self.Get_nthkey(k)
 *             value = self.Get(key)
 *             items.append((key, value))             # <<<<<<<<<<<<<<
 *         return items
 * 
 */
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_key);
    __Pyx_GIVEREF(__pyx_v_key);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_key);
    __Pyx_INCREF(__pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_value);
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_items, __pyx_t_3); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(27, 196, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/Info.pyx":197
 *             value = self.Get(key)
 *             items.append((key, value))
 *         return items             # <<<<<<<<<<<<<<
 * 
 *     def update(self, other=(), **kwds):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_items);
  __pyx_r = __pyx_v_items;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":187
 *         return values
 * 
 *     def items(self):             # <<<<<<<<<<<<<<
 *         """info items"""
 *         if not self: return []
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Info.items", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_items);
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":199
 *         return items
 * 
 *     def update(self, other=(), **kwds):             # <<<<<<<<<<<<<<
 *         """info update"""
 *         if not self: raise KeyError
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_49update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_48update[] = "Info.update(self, other=(), **kwds)\ninfo update";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_49update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_other = 0;
  PyObject *__pyx_v_kwds = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update (wrapper)", 0);
  __pyx_v_kwds = PyDict_New(); if (unlikely(!__pyx_v_kwds)) return NULL;
  __Pyx_GOTREF(__pyx_v_kwds);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_other,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)__pyx_empty_tuple);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_other);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwds, values, pos_args, "update") < 0)) __PYX_ERR(27, 199, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_other = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 199, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_kwds); __pyx_v_kwds = 0;
  __Pyx_AddTraceback("mpi4py.MPI.Info.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_48update(((struct PyMPIInfoObject *)__pyx_v_self), __pyx_v_other, __pyx_v_kwds);

  /* function exit code */
  __Pyx_XDECREF(__pyx_v_kwds);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_48update(struct PyMPIInfoObject *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_kwds) {
  PyObject *__pyx_v_key = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *(*__pyx_t_12)(PyObject *);
  __Pyx_RefNannySetupContext("update", 0);

  /* "mpi4py/MPI/Info.pyx":201
 *     def update(self, other=(), **kwds):
 *         """info update"""
 *         if not self: raise KeyError             # <<<<<<<<<<<<<<
 *         cdef object key, value
 *         if hasattr(other, 'keys'):
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 201, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (unlikely(__pyx_t_2)) {
    __Pyx_Raise(__pyx_builtin_KeyError, 0, 0, 0);
    __PYX_ERR(27, 201, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Info.pyx":203
 *         if not self: raise KeyError
 *         cdef object key, value
 *         if hasattr(other, 'keys'):             # <<<<<<<<<<<<<<
 *             for key in other.keys():
 *                 self.Set(key, other[key])
 */
  __pyx_t_2 = __Pyx_HasAttr(__pyx_v_other, __pyx_n_s_keys); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 203, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Info.pyx":204
 *         cdef object key, value
 *         if hasattr(other, 'keys'):
 *             for key in other.keys():             # <<<<<<<<<<<<<<
 *                 self.Set(key, other[key])
 *         else:
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_keys); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 204, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 204, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_4))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(27, 204, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 204, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(27, 204, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 204, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_7(__pyx_t_4);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(27, 204, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/Info.pyx":205
 *         if hasattr(other, 'keys'):
 *             for key in other.keys():
 *                 self.Set(key, other[key])             # <<<<<<<<<<<<<<
 *         else:
 *             for key, value in other:
 */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 205, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_other, __pyx_v_key); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 205, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_key, __pyx_t_8};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 205, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_key, __pyx_t_8};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 205, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(27, 205, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_9) {
          __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
        }
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_key);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 205, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "mpi4py/MPI/Info.pyx":204
 *         cdef object key, value
 *         if hasattr(other, 'keys'):
 *             for key in other.keys():             # <<<<<<<<<<<<<<
 *                 self.Set(key, other[key])
 *         else:
 */
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Info.pyx":203
 *         if not self: raise KeyError
 *         cdef object key, value
 *         if hasattr(other, 'keys'):             # <<<<<<<<<<<<<<
 *             for key in other.keys():
 *                 self.Set(key, other[key])
 */
    goto __pyx_L4;
  }

  /* "mpi4py/MPI/Info.pyx":207
 *                 self.Set(key, other[key])
 *         else:
 *             for key, value in other:             # <<<<<<<<<<<<<<
 *                 self.Set(key, value)
 *         for key, value in kwds.items():
 */
  /*else*/ {
    if (likely(PyList_CheckExact(__pyx_v_other)) || PyTuple_CheckExact(__pyx_v_other)) {
      __pyx_t_4 = __pyx_v_other; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 207, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 207, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_4))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(27, 207, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 207, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(27, 207, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 207, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_7(__pyx_t_4);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(27, 207, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
        PyObject* sequence = __pyx_t_3;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(27, 207, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_11);
        #else
        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(27, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        #endif
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 207, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_12 = Py_TYPE(__pyx_t_8)->tp_iternext;
        index = 0; __pyx_t_5 = __pyx_t_12(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_11 = __pyx_t_12(__pyx_t_8); if (unlikely(!__pyx_t_11)) goto __pyx_L9_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_11);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_8), 2) < 0) __PYX_ERR(27, 207, __pyx_L1_error)
        __pyx_t_12 = NULL;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L10_unpacking_done;
        __pyx_L9_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_12 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(27, 207, __pyx_L1_error)
        __pyx_L10_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_11);
      __pyx_t_11 = 0;

      /* "mpi4py/MPI/Info.pyx":208
 *         else:
 *             for key, value in other:
 *                 self.Set(key, value)             # <<<<<<<<<<<<<<
 *         for key, value in kwds.items():
 *             self.Set(key, value)
 */
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set); if (unlikely(!__pyx_t_11)) __PYX_ERR(27, 208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = NULL;
      __pyx_t_10 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
          __pyx_t_10 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_key, __pyx_v_value};
        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 208, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_key, __pyx_v_value};
        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 208, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_3);
      } else
      #endif
      {
        __pyx_t_8 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (__pyx_t_5) {
          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
        }
        __Pyx_INCREF(__pyx_v_key);
        __Pyx_GIVEREF(__pyx_v_key);
        PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_10, __pyx_v_key);
        __Pyx_INCREF(__pyx_v_value);
        __Pyx_GIVEREF(__pyx_v_value);
        PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_10, __pyx_v_value);
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "mpi4py/MPI/Info.pyx":207
 *                 self.Set(key, other[key])
 *         else:
 *             for key, value in other:             # <<<<<<<<<<<<<<
 *                 self.Set(key, value)
 *         for key, value in kwds.items():
 */
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_L4:;

  /* "mpi4py/MPI/Info.pyx":209
 *             for key, value in other:
 *                 self.Set(key, value)
 *         for key, value in kwds.items():             # <<<<<<<<<<<<<<
 *             self.Set(key, value)
 * 
 */
  __pyx_t_4 = __Pyx_PyDict_Items(__pyx_v_kwds); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
    __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 209, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 209, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(27, 209, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(27, 209, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 209, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_7(__pyx_t_3);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(27, 209, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
      PyObject* sequence = __pyx_t_4;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(27, 209, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_11 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_8);
      #else
      __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(27, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 209, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_12 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_11 = __pyx_t_12(__pyx_t_5); if (unlikely(!__pyx_t_11)) goto __pyx_L13_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_11);
      index = 1; __pyx_t_8 = __pyx_t_12(__pyx_t_5); if (unlikely(!__pyx_t_8)) goto __pyx_L13_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_5), 2) < 0) __PYX_ERR(27, 209, __pyx_L1_error)
      __pyx_t_12 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L14_unpacking_done;
      __pyx_L13_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_12 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(27, 209, __pyx_L1_error)
      __pyx_L14_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "mpi4py/MPI/Info.pyx":210
 *                 self.Set(key, value)
 *         for key, value in kwds.items():
 *             self.Set(key, value)             # <<<<<<<<<<<<<<
 * 
 *     def copy(self):
 */
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set); if (unlikely(!__pyx_t_8)) __PYX_ERR(27, 210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_11 = NULL;
    __pyx_t_10 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_10 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_v_key, __pyx_v_value};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 210, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
      PyObject *__pyx_temp[3] = {__pyx_t_11, __pyx_v_key, __pyx_v_value};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 210, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 210, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_11) {
        __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_11); __pyx_t_11 = NULL;
      }
      __Pyx_INCREF(__pyx_v_key);
      __Pyx_GIVEREF(__pyx_v_key);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_10, __pyx_v_key);
      __Pyx_INCREF(__pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_10, __pyx_v_value);
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 210, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "mpi4py/MPI/Info.pyx":209
 *             for key, value in other:
 *                 self.Set(key, value)
 *         for key, value in kwds.items():             # <<<<<<<<<<<<<<
 *             self.Set(key, value)
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Info.pyx":199
 *         return items
 * 
 *     def update(self, other=(), **kwds):             # <<<<<<<<<<<<<<
 *         """info update"""
 *         if not self: raise KeyError
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("mpi4py.MPI.Info.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":212
 *             self.Set(key, value)
 * 
 *     def copy(self):             # <<<<<<<<<<<<<<
 *         """info copy"""
 *         if not self: return Info()
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_51copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_50copy[] = "Info.copy(self)\ninfo copy";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_51copy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("copy (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_50copy(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_50copy(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("copy", 0);

  /* "mpi4py/MPI/Info.pyx":214
 *     def copy(self):
 *         """info copy"""
 *         if not self: return Info()             # <<<<<<<<<<<<<<
 *         return self.Dup()
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 214, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Info)); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":215
 *         """info copy"""
 *         if not self: return Info()
 *         return self.Dup()             # <<<<<<<<<<<<<<
 * 
 *     def clear(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Dup); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Info.pyx":212
 *             self.Set(key, value)
 * 
 *     def copy(self):             # <<<<<<<<<<<<<<
 *         """info copy"""
 *         if not self: return Info()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Info.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Info.pyx":217
 *         return self.Dup()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         """info clear"""
 *         if not self: return None
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_53clear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Info_52clear[] = "Info.clear(self)\ninfo clear";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Info_53clear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "clear", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Info_52clear(((struct PyMPIInfoObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Info_52clear(struct PyMPIInfoObject *__pyx_v_self) {
  PyObject *__pyx_v_key = 0;
  int __pyx_v_k;
  int __pyx_v_nkeys;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("clear", 0);

  /* "mpi4py/MPI/Info.pyx":219
 *     def clear(self):
 *         """info clear"""
 *         if not self: return None             # <<<<<<<<<<<<<<
 *         cdef object key
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(27, 219, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Info.pyx":221
 *         if not self: return None
 *         cdef object key
 *         cdef int k = 0, nkeys = self.Get_nkeys()             # <<<<<<<<<<<<<<
 *         while k < nkeys:
 *             key = self.Get_nthkey(0)
 */
  __pyx_v_k = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nkeys); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 221, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_nkeys = __pyx_t_6;

  /* "mpi4py/MPI/Info.pyx":222
 *         cdef object key
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         while k < nkeys:             # <<<<<<<<<<<<<<
 *             key = self.Get_nthkey(0)
 *             self.Delete(key)
 */
  while (1) {
    __pyx_t_2 = ((__pyx_v_k < __pyx_v_nkeys) != 0);
    if (!__pyx_t_2) break;

    /* "mpi4py/MPI/Info.pyx":223
 *         cdef int k = 0, nkeys = self.Get_nkeys()
 *         while k < nkeys:
 *             key = self.Get_nthkey(0)             # <<<<<<<<<<<<<<
 *             self.Delete(key)
 *             k += 1
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_nthkey); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_int_0);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":224
 *         while k < nkeys:
 *             key = self.Get_nthkey(0)
 *             self.Delete(key)             # <<<<<<<<<<<<<<
 *             k += 1
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Delete); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_key) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_key);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Info.pyx":225
 *             key = self.Get_nthkey(0)
 *             self.Delete(key)
 *             k += 1             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_v_k = (__pyx_v_k + 1);
  }

  /* "mpi4py/MPI/Info.pyx":217
 *         return self.Dup()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         """info clear"""
 *         if not self: return None
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Info.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":7
 *     """
 * 
 *     def __cinit__(self, Op op=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_OP_NULL
 *         if op is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_2Op_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_2Op_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIOpObject *__pyx_v_op = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_op,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIOpObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(28, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_op = ((struct PyMPIOpObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Op.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 1, "op", 0))) __PYX_ERR(28, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op___cinit__(((struct PyMPIOpObject *)__pyx_v_self), __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_2Op___cinit__(struct PyMPIOpObject *__pyx_v_self, struct PyMPIOpObject *__pyx_v_op) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Op __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *, PyObject *);
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Op.pyx":8
 * 
 *     def __cinit__(self, Op op=None):
 *         self.ob_mpi = MPI_OP_NULL             # <<<<<<<<<<<<<<
 *         if op is None: return
 *         self.ob_mpi = op.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_OP_NULL;

  /* "mpi4py/MPI/Op.pyx":9
 *     def __cinit__(self, Op op=None):
 *         self.ob_mpi = MPI_OP_NULL
 *         if op is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = op.ob_mpi
 *         self.ob_func = op.ob_func
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_op) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Op.pyx":10
 *         self.ob_mpi = MPI_OP_NULL
 *         if op is None: return
 *         self.ob_mpi = op.ob_mpi             # <<<<<<<<<<<<<<
 *         self.ob_func = op.ob_func
 *         self.ob_usrid = op.ob_usrid
 */
  __pyx_t_3 = __pyx_v_op->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Op.pyx":11
 *         if op is None: return
 *         self.ob_mpi = op.ob_mpi
 *         self.ob_func = op.ob_func             # <<<<<<<<<<<<<<
 *         self.ob_usrid = op.ob_usrid
 * 
 */
  __pyx_t_4 = __pyx_v_op->ob_func;
  __pyx_v_self->ob_func = __pyx_t_4;

  /* "mpi4py/MPI/Op.pyx":12
 *         self.ob_mpi = op.ob_mpi
 *         self.ob_func = op.ob_func
 *         self.ob_usrid = op.ob_usrid             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_5 = __pyx_v_op->ob_usrid;
  __pyx_v_self->ob_usrid = __pyx_t_5;

  /* "mpi4py/MPI/Op.pyx":7
 *     """
 * 
 *     def __cinit__(self, Op op=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_OP_NULL
 *         if op is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":14
 *         self.ob_usrid = op.ob_usrid
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Op(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_2Op_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_2Op_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_2Op_2__dealloc__(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_2Op_2__dealloc__(struct PyMPIOpObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Op.pyx":15
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Op(&self.ob_mpi) )
 *         op_user_del(&self.ob_usrid)
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Op.pyx":16
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Op(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         op_user_del(&self.ob_usrid)
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Op((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 16, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":17
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Op(&self.ob_mpi) )
 *         op_user_del(&self.ob_usrid)             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_op_user_del((&__pyx_v_self->ob_usrid)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 17, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":14
 *         self.ob_usrid = op.ob_usrid
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Op(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Op.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Op.pyx":19
 *         op_user_del(&self.ob_usrid)
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Op): return NotImplemented
 *         cdef Op s = <Op>self, o = <Op>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_4__richcmp__(((struct PyMPIOpObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_4__richcmp__(struct PyMPIOpObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIOpObject *__pyx_v_s = 0;
  struct PyMPIOpObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Op.pyx":20
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Op): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Op s = <Op>self, o = <Op>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Op); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Op.pyx":21
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Op): return NotImplemented
 *         cdef Op s = <Op>self, o = <Op>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIOpObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIOpObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Op.pyx":22
 *         if not isinstance(other, Op): return NotImplemented
 *         cdef Op s = <Op>self, o = <Op>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 22, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Op.pyx":23
 *         cdef Op s = <Op>self, o = <Op>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 23, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Op.pyx":24
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Op.pyx":25
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Op.pyx":26
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(28, 26, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":19
 *         op_user_del(&self.ob_usrid)
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Op): return NotImplemented
 *         cdef Op s = <Op>self, o = <Op>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Op.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":28
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_OP_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_2Op_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_2Op_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_6__bool__(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_2Op_6__bool__(struct PyMPIOpObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Op.pyx":29
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_OP_NULL             # <<<<<<<<<<<<<<
 * 
 *     def __call__(self, x, y):
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_OP_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":28
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_OP_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":31
 *         return self.ob_mpi != MPI_OP_NULL
 * 
 *     def __call__(self, x, y):             # <<<<<<<<<<<<<<
 *         if self.ob_func != NULL:
 *             return self.ob_func(x, y)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_9__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_9__call__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_y = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__call__", 1, 2, 2, 1); __PYX_ERR(28, 31, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(28, 31, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_x = values[0];
    __pyx_v_y = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__call__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 31, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Op.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_8__call__(((struct PyMPIOpObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_8__call__(struct PyMPIOpObject *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__call__", 0);

  /* "mpi4py/MPI/Op.pyx":32
 * 
 *     def __call__(self, x, y):
 *         if self.ob_func != NULL:             # <<<<<<<<<<<<<<
 *             return self.ob_func(x, y)
 *         else:
 */
  __pyx_t_1 = ((__pyx_v_self->ob_func != NULL) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Op.pyx":33
 *     def __call__(self, x, y):
 *         if self.ob_func != NULL:
 *             return self.ob_func(x, y)             # <<<<<<<<<<<<<<
 *         else:
 *             return op_user_py(self.ob_usrid, x, y, None)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_v_self->ob_func(__pyx_v_x, __pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Op.pyx":32
 * 
 *     def __call__(self, x, y):
 *         if self.ob_func != NULL:             # <<<<<<<<<<<<<<
 *             return self.ob_func(x, y)
 *         else:
 */
  }

  /* "mpi4py/MPI/Op.pyx":35
 *             return self.ob_func(x, y)
 *         else:
 *             return op_user_py(self.ob_usrid, x, y, None)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_op_user_py(__pyx_v_self->ob_usrid, __pyx_v_x, __pyx_v_y, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 35, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Op.pyx":31
 *         return self.ob_mpi != MPI_OP_NULL
 * 
 *     def __call__(self, x, y):             # <<<<<<<<<<<<<<
 *         if self.ob_func != NULL:
 *             return self.ob_func(x, y)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Op.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":38
 * 
 *     @classmethod
 *     def Create(cls, function, bint commute=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a user-defined operation
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_11Create(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2Op_10Create[] = "Op.Create(type cls, function, bool commute=False)\n\n        Create a user-defined operation\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_11Create(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_function = 0;
  int __pyx_v_commute;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_function,&__pyx_n_s_commute,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_commute);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create") < 0)) __PYX_ERR(28, 38, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_function = values[0];
    if (values[1]) {
      __pyx_v_commute = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_commute == (int)-1) && PyErr_Occurred())) __PYX_ERR(28, 38, __pyx_L3_error)
    } else {
      __pyx_v_commute = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 38, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Op.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_10Create(((PyTypeObject*)__pyx_v_cls), __pyx_v_function, __pyx_v_commute);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_10Create(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_function, int __pyx_v_commute) {
  struct PyMPIOpObject *__pyx_v_op = 0;
  MPI_User_function *__pyx_v_cfunction;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create", 0);

  /* "mpi4py/MPI/Op.pyx":42
 *         Create a user-defined operation
 *         """
 *         cdef Op op = <Op>Op.__new__(Op)             # <<<<<<<<<<<<<<
 *         cdef MPI_User_function *cfunction = NULL
 *         op.ob_usrid = op_user_new(function, &cfunction)
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Op(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Op), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 42, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_op = ((struct PyMPIOpObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Op.pyx":43
 *         """
 *         cdef Op op = <Op>Op.__new__(Op)
 *         cdef MPI_User_function *cfunction = NULL             # <<<<<<<<<<<<<<
 *         op.ob_usrid = op_user_new(function, &cfunction)
 *         CHKERR( MPI_Op_create(cfunction, commute, &op.ob_mpi) )
 */
  __pyx_v_cfunction = NULL;

  /* "mpi4py/MPI/Op.pyx":44
 *         cdef Op op = <Op>Op.__new__(Op)
 *         cdef MPI_User_function *cfunction = NULL
 *         op.ob_usrid = op_user_new(function, &cfunction)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Op_create(cfunction, commute, &op.ob_mpi) )
 *         return op
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_op_user_new(__pyx_v_function, (&__pyx_v_cfunction)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(28, 44, __pyx_L1_error)
  __pyx_v_op->ob_usrid = __pyx_t_3;

  /* "mpi4py/MPI/Op.pyx":45
 *         cdef MPI_User_function *cfunction = NULL
 *         op.ob_usrid = op_user_new(function, &cfunction)
 *         CHKERR( MPI_Op_create(cfunction, commute, &op.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return op
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Op_create(__pyx_v_cfunction, __pyx_v_commute, (&__pyx_v_op->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(28, 45, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":46
 *         op.ob_usrid = op_user_new(function, &cfunction)
 *         CHKERR( MPI_Op_create(cfunction, commute, &op.ob_mpi) )
 *         return op             # <<<<<<<<<<<<<<
 * 
 *     def Free(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_op));
  __pyx_r = ((PyObject *)__pyx_v_op);
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":38
 * 
 *     @classmethod
 *     def Create(cls, function, bint commute=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a user-defined operation
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Op.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_op);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":48
 *         return op
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free the operation
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_13Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2Op_12Free[] = "Op.Free(self)\n\n        Free the operation\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_13Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_12Free(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_12Free(struct PyMPIOpObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Op.pyx":52
 *         Free the operation
 *         """
 *         CHKERR( MPI_Op_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         op_user_del(&self.ob_usrid)
 *         if   self is __MAX__     : self.ob_mpi =  MPI_MAX
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Op_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 52, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":53
 *         """
 *         CHKERR( MPI_Op_free(&self.ob_mpi) )
 *         op_user_del(&self.ob_usrid)             # <<<<<<<<<<<<<<
 *         if   self is __MAX__     : self.ob_mpi =  MPI_MAX
 *         elif self is __MIN__     : self.ob_mpi =  MPI_MIN
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_op_user_del((&__pyx_v_self->ob_usrid)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 53, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":54
 *         CHKERR( MPI_Op_free(&self.ob_mpi) )
 *         op_user_del(&self.ob_usrid)
 *         if   self is __MAX__     : self.ob_mpi =  MPI_MAX             # <<<<<<<<<<<<<<
 *         elif self is __MIN__     : self.ob_mpi =  MPI_MIN
 *         elif self is __SUM__     : self.ob_mpi =  MPI_SUM
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___MAX__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_MAX;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":55
 *         op_user_del(&self.ob_usrid)
 *         if   self is __MAX__     : self.ob_mpi =  MPI_MAX
 *         elif self is __MIN__     : self.ob_mpi =  MPI_MIN             # <<<<<<<<<<<<<<
 *         elif self is __SUM__     : self.ob_mpi =  MPI_SUM
 *         elif self is __PROD__    : self.ob_mpi =  MPI_PROD
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___MIN__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_MIN;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":56
 *         if   self is __MAX__     : self.ob_mpi =  MPI_MAX
 *         elif self is __MIN__     : self.ob_mpi =  MPI_MIN
 *         elif self is __SUM__     : self.ob_mpi =  MPI_SUM             # <<<<<<<<<<<<<<
 *         elif self is __PROD__    : self.ob_mpi =  MPI_PROD
 *         elif self is __LAND__    : self.ob_mpi =  MPI_LAND
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___SUM__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_SUM;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":57
 *         elif self is __MIN__     : self.ob_mpi =  MPI_MIN
 *         elif self is __SUM__     : self.ob_mpi =  MPI_SUM
 *         elif self is __PROD__    : self.ob_mpi =  MPI_PROD             # <<<<<<<<<<<<<<
 *         elif self is __LAND__    : self.ob_mpi =  MPI_LAND
 *         elif self is __BAND__    : self.ob_mpi =  MPI_BAND
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___PROD__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_PROD;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":58
 *         elif self is __SUM__     : self.ob_mpi =  MPI_SUM
 *         elif self is __PROD__    : self.ob_mpi =  MPI_PROD
 *         elif self is __LAND__    : self.ob_mpi =  MPI_LAND             # <<<<<<<<<<<<<<
 *         elif self is __BAND__    : self.ob_mpi =  MPI_BAND
 *         elif self is __LOR__     : self.ob_mpi =  MPI_LOR
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___LAND__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_LAND;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":59
 *         elif self is __PROD__    : self.ob_mpi =  MPI_PROD
 *         elif self is __LAND__    : self.ob_mpi =  MPI_LAND
 *         elif self is __BAND__    : self.ob_mpi =  MPI_BAND             # <<<<<<<<<<<<<<
 *         elif self is __LOR__     : self.ob_mpi =  MPI_LOR
 *         elif self is __BOR__     : self.ob_mpi =  MPI_BOR
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___BAND__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_BAND;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":60
 *         elif self is __LAND__    : self.ob_mpi =  MPI_LAND
 *         elif self is __BAND__    : self.ob_mpi =  MPI_BAND
 *         elif self is __LOR__     : self.ob_mpi =  MPI_LOR             # <<<<<<<<<<<<<<
 *         elif self is __BOR__     : self.ob_mpi =  MPI_BOR
 *         elif self is __LXOR__    : self.ob_mpi =  MPI_LXOR
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___LOR__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_LOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":61
 *         elif self is __BAND__    : self.ob_mpi =  MPI_BAND
 *         elif self is __LOR__     : self.ob_mpi =  MPI_LOR
 *         elif self is __BOR__     : self.ob_mpi =  MPI_BOR             # <<<<<<<<<<<<<<
 *         elif self is __LXOR__    : self.ob_mpi =  MPI_LXOR
 *         elif self is __BXOR__    : self.ob_mpi =  MPI_BXOR
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___BOR__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_BOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":62
 *         elif self is __LOR__     : self.ob_mpi =  MPI_LOR
 *         elif self is __BOR__     : self.ob_mpi =  MPI_BOR
 *         elif self is __LXOR__    : self.ob_mpi =  MPI_LXOR             # <<<<<<<<<<<<<<
 *         elif self is __BXOR__    : self.ob_mpi =  MPI_BXOR
 *         elif self is __MAXLOC__  : self.ob_mpi =  MPI_MAXLOC
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___LXOR__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_LXOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":63
 *         elif self is __BOR__     : self.ob_mpi =  MPI_BOR
 *         elif self is __LXOR__    : self.ob_mpi =  MPI_LXOR
 *         elif self is __BXOR__    : self.ob_mpi =  MPI_BXOR             # <<<<<<<<<<<<<<
 *         elif self is __MAXLOC__  : self.ob_mpi =  MPI_MAXLOC
 *         elif self is __MINLOC__  : self.ob_mpi =  MPI_MINLOC
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___BXOR__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_BXOR;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":64
 *         elif self is __LXOR__    : self.ob_mpi =  MPI_LXOR
 *         elif self is __BXOR__    : self.ob_mpi =  MPI_BXOR
 *         elif self is __MAXLOC__  : self.ob_mpi =  MPI_MAXLOC             # <<<<<<<<<<<<<<
 *         elif self is __MINLOC__  : self.ob_mpi =  MPI_MINLOC
 *         elif self is __REPLACE__ : self.ob_mpi =  MPI_REPLACE
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___MAXLOC__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_MAXLOC;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":65
 *         elif self is __BXOR__    : self.ob_mpi =  MPI_BXOR
 *         elif self is __MAXLOC__  : self.ob_mpi =  MPI_MAXLOC
 *         elif self is __MINLOC__  : self.ob_mpi =  MPI_MINLOC             # <<<<<<<<<<<<<<
 *         elif self is __REPLACE__ : self.ob_mpi =  MPI_REPLACE
 *         elif self is __NO_OP__   : self.ob_mpi =  MPI_NO_OP
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___MINLOC__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_MINLOC;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":66
 *         elif self is __MAXLOC__  : self.ob_mpi =  MPI_MAXLOC
 *         elif self is __MINLOC__  : self.ob_mpi =  MPI_MINLOC
 *         elif self is __REPLACE__ : self.ob_mpi =  MPI_REPLACE             # <<<<<<<<<<<<<<
 *         elif self is __NO_OP__   : self.ob_mpi =  MPI_NO_OP
 * 
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___REPLACE__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_REPLACE;
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Op.pyx":67
 *         elif self is __MINLOC__  : self.ob_mpi =  MPI_MINLOC
 *         elif self is __REPLACE__ : self.ob_mpi =  MPI_REPLACE
 *         elif self is __NO_OP__   : self.ob_mpi =  MPI_NO_OP             # <<<<<<<<<<<<<<
 * 
 *     # Process-local reduction
 */
  __pyx_t_3 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___NO_OP__);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_NO_OP;
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Op.pyx":48
 *         return op
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free the operation
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Op.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":72
 *     # -----------------------
 * 
 *     def Is_commutative(self):             # <<<<<<<<<<<<<<
 *         """
 *         Query reduction operations for their commutativity
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_15Is_commutative(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2Op_14Is_commutative[] = "Op.Is_commutative(self)\n\n        Query reduction operations for their commutativity\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_15Is_commutative(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_commutative (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_commutative", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_commutative", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_14Is_commutative(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_14Is_commutative(struct PyMPIOpObject *__pyx_v_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Is_commutative", 0);

  /* "mpi4py/MPI/Op.pyx":76
 *         Query reduction operations for their commutativity
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Op_commutative(self.ob_mpi, &flag) )
 *         return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Op.pyx":77
 *         """
 *         cdef int flag = 0
 *         CHKERR( MPI_Op_commutative(self.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Op_commutative(__pyx_v_self->ob_mpi, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 77, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":78
 *         cdef int flag = 0
 *         CHKERR( MPI_Op_commutative(self.ob_mpi, &flag) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     property is_commutative:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":72
 *     # -----------------------
 * 
 *     def Is_commutative(self):             # <<<<<<<<<<<<<<
 *         """
 *         Query reduction operations for their commutativity
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Op.Is_commutative", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":82
 *     property is_commutative:
 *         """is commutative"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_commutative()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_14is_commutative_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_14is_commutative_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_14is_commutative___get__(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_14is_commutative___get__(struct PyMPIOpObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Op.pyx":83
 *         """is commutative"""
 *         def __get__(self):
 *             return self.Is_commutative()             # <<<<<<<<<<<<<<
 * 
 *     def Reduce_local(self, inbuf, inoutbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Is_commutative); if (unlikely(!__pyx_t_2)) __PYX_ERR(28, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":82
 *     property is_commutative:
 *         """is commutative"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_commutative()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Op.is_commutative.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":85
 *             return self.Is_commutative()
 * 
 *     def Reduce_local(self, inbuf, inoutbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Apply a reduction operator to local data
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_17Reduce_local(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2Op_16Reduce_local[] = "Op.Reduce_local(self, inbuf, inoutbuf)\n\n        Apply a reduction operator to local data\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_17Reduce_local(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_inbuf = 0;
  PyObject *__pyx_v_inoutbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Reduce_local (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_inbuf,&__pyx_n_s_inoutbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_inoutbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Reduce_local", 1, 2, 2, 1); __PYX_ERR(28, 85, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Reduce_local") < 0)) __PYX_ERR(28, 85, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_inbuf = values[0];
    __pyx_v_inoutbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Reduce_local", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 85, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Op.Reduce_local", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_16Reduce_local(((struct PyMPIOpObject *)__pyx_v_self), __pyx_v_inbuf, __pyx_v_inoutbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_16Reduce_local(struct PyMPIOpObject *__pyx_v_self, PyObject *__pyx_v_inbuf, PyObject *__pyx_v_inoutbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Reduce_local", 0);

  /* "mpi4py/MPI/Op.pyx":90
 *         """
 *         # get *in* and *inout* buffers
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_cro_send(inbuf, 0)
 *         m.for_cro_recv(inoutbuf, 0)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":91
 *         # get *in* and *inout* buffers
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_cro_send(inbuf, 0)             # <<<<<<<<<<<<<<
 *         m.for_cro_recv(inoutbuf, 0)
 *         # check counts and datatypes
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send(__pyx_v_m, __pyx_v_inbuf, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 91, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":92
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_cro_send(inbuf, 0)
 *         m.for_cro_recv(inoutbuf, 0)             # <<<<<<<<<<<<<<
 *         # check counts and datatypes
 *         if m.scount != m.rcount: raise ValueError(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv(__pyx_v_m, __pyx_v_inoutbuf, 0); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 92, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":94
 *         m.for_cro_recv(inoutbuf, 0)
 *         # check counts and datatypes
 *         if m.scount != m.rcount: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in inbuf count %d and inoutbuf count %d" %
 *             (m.scount, m.rcount))
 */
  __pyx_t_3 = ((__pyx_v_m->scount != __pyx_v_m->rcount) != 0);
  if (unlikely(__pyx_t_3)) {

    /* "mpi4py/MPI/Op.pyx":96
 *         if m.scount != m.rcount: raise ValueError(
 *             "mismatch in inbuf count %d and inoutbuf count %d" %
 *             (m.scount, m.rcount))             # <<<<<<<<<<<<<<
 *         if (m.stype != m.rtype): raise ValueError(
 *             "mismatch in inbuf and inoutbuf MPI datatypes")
 */
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_m->scount); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_m->rcount); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(28, 96, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
    __pyx_t_1 = 0;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/Op.pyx":95
 *         # check counts and datatypes
 *         if m.scount != m.rcount: raise ValueError(
 *             "mismatch in inbuf count %d and inoutbuf count %d" %             # <<<<<<<<<<<<<<
 *             (m.scount, m.rcount))
 *         if (m.stype != m.rtype): raise ValueError(
 */
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_mismatch_in_inbuf_count_d_and_in, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 95, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/Op.pyx":94
 *         m.for_cro_recv(inoutbuf, 0)
 *         # check counts and datatypes
 *         if m.scount != m.rcount: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in inbuf count %d and inoutbuf count %d" %
 *             (m.scount, m.rcount))
 */
    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(28, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(28, 94, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Op.pyx":97
 *             "mismatch in inbuf count %d and inoutbuf count %d" %
 *             (m.scount, m.rcount))
 *         if (m.stype != m.rtype): raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in inbuf and inoutbuf MPI datatypes")
 *         # do local reduction
 */
  __pyx_t_3 = ((__pyx_v_m->stype != __pyx_v_m->rtype) != 0);
  if (unlikely(__pyx_t_3)) {
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(28, 97, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(28, 97, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Op.pyx":100
 *             "mismatch in inbuf and inoutbuf MPI datatypes")
 *         # do local reduction
 *         with nogil: CHKERR( MPI_Reduce_local(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype, self.ob_mpi) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Op.pyx":101
 *         # do local reduction
 *         with nogil: CHKERR( MPI_Reduce_local(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     property is_predefined:
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Reduce_local(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 100, __pyx_L6_error)
      }

      /* "mpi4py/MPI/Op.pyx":100
 *             "mismatch in inbuf and inoutbuf MPI datatypes")
 *         # do local reduction
 *         with nogil: CHKERR( MPI_Reduce_local(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype, self.ob_mpi) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Op.pyx":85
 *             return self.Is_commutative()
 * 
 *     def Reduce_local(self, inbuf, inoutbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Apply a reduction operator to local data
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Op.Reduce_local", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":105
 *     property is_predefined:
 *         """is a predefined operation"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Op op = self.ob_mpi
 *             return (op == MPI_OP_NULL or
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_13is_predefined_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_13is_predefined_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_13is_predefined___get__(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_13is_predefined___get__(struct PyMPIOpObject *__pyx_v_self) {
  MPI_Op __pyx_v_op;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Op __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Op.pyx":106
 *         """is a predefined operation"""
 *         def __get__(self):
 *             cdef MPI_Op op = self.ob_mpi             # <<<<<<<<<<<<<<
 *             return (op == MPI_OP_NULL or
 *                     op == MPI_MAX or
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_op = __pyx_t_1;

  /* "mpi4py/MPI/Op.pyx":107
 *         def __get__(self):
 *             cdef MPI_Op op = self.ob_mpi
 *             return (op == MPI_OP_NULL or             # <<<<<<<<<<<<<<
 *                     op == MPI_MAX or
 *                     op == MPI_MIN or
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (__pyx_v_op == MPI_OP_NULL);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":108
 *             cdef MPI_Op op = self.ob_mpi
 *             return (op == MPI_OP_NULL or
 *                     op == MPI_MAX or             # <<<<<<<<<<<<<<
 *                     op == MPI_MIN or
 *                     op == MPI_SUM or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_MAX);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":109
 *             return (op == MPI_OP_NULL or
 *                     op == MPI_MAX or
 *                     op == MPI_MIN or             # <<<<<<<<<<<<<<
 *                     op == MPI_SUM or
 *                     op == MPI_PROD or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_MIN);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":110
 *                     op == MPI_MAX or
 *                     op == MPI_MIN or
 *                     op == MPI_SUM or             # <<<<<<<<<<<<<<
 *                     op == MPI_PROD or
 *                     op == MPI_LAND or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_SUM);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 110, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":111
 *                     op == MPI_MIN or
 *                     op == MPI_SUM or
 *                     op == MPI_PROD or             # <<<<<<<<<<<<<<
 *                     op == MPI_LAND or
 *                     op == MPI_BAND or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_PROD);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":112
 *                     op == MPI_SUM or
 *                     op == MPI_PROD or
 *                     op == MPI_LAND or             # <<<<<<<<<<<<<<
 *                     op == MPI_BAND or
 *                     op == MPI_LOR or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_LAND);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":113
 *                     op == MPI_PROD or
 *                     op == MPI_LAND or
 *                     op == MPI_BAND or             # <<<<<<<<<<<<<<
 *                     op == MPI_LOR or
 *                     op == MPI_BOR or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_BAND);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":114
 *                     op == MPI_LAND or
 *                     op == MPI_BAND or
 *                     op == MPI_LOR or             # <<<<<<<<<<<<<<
 *                     op == MPI_BOR or
 *                     op == MPI_LXOR or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_LOR);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":115
 *                     op == MPI_BAND or
 *                     op == MPI_LOR or
 *                     op == MPI_BOR or             # <<<<<<<<<<<<<<
 *                     op == MPI_LXOR or
 *                     op == MPI_BXOR or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_BOR);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":116
 *                     op == MPI_LOR or
 *                     op == MPI_BOR or
 *                     op == MPI_LXOR or             # <<<<<<<<<<<<<<
 *                     op == MPI_BXOR or
 *                     op == MPI_MAXLOC or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_LXOR);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":117
 *                     op == MPI_BOR or
 *                     op == MPI_LXOR or
 *                     op == MPI_BXOR or             # <<<<<<<<<<<<<<
 *                     op == MPI_MAXLOC or
 *                     op == MPI_MINLOC or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_BXOR);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":118
 *                     op == MPI_LXOR or
 *                     op == MPI_BXOR or
 *                     op == MPI_MAXLOC or             # <<<<<<<<<<<<<<
 *                     op == MPI_MINLOC or
 *                     op == MPI_REPLACE or
 */
  __pyx_t_3 = (__pyx_v_op == MPI_MAXLOC);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":119
 *                     op == MPI_BXOR or
 *                     op == MPI_MAXLOC or
 *                     op == MPI_MINLOC or             # <<<<<<<<<<<<<<
 *                     op == MPI_REPLACE or
 *                     op == MPI_NO_OP)
 */
  __pyx_t_3 = (__pyx_v_op == MPI_MINLOC);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":120
 *                     op == MPI_MAXLOC or
 *                     op == MPI_MINLOC or
 *                     op == MPI_REPLACE or             # <<<<<<<<<<<<<<
 *                     op == MPI_NO_OP)
 * 
 */
  __pyx_t_3 = (__pyx_v_op == MPI_REPLACE);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "mpi4py/MPI/Op.pyx":121
 *                     op == MPI_MINLOC or
 *                     op == MPI_REPLACE or
 *                     op == MPI_NO_OP)             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_3 = (__pyx_v_op == MPI_NO_OP);
  __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(28, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":105
 *     property is_predefined:
 *         """is a predefined operation"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef MPI_Op op = self.ob_mpi
 *             return (op == MPI_OP_NULL or
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Op.is_predefined.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":126
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_19py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2Op_18py2f[] = "Op.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_19py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_18py2f(((struct PyMPIOpObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_18py2f(struct PyMPIOpObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Op.pyx":129
 *         """
 *         """
 *         return MPI_Op_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Op_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":126
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Op.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Op.pyx":132
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_21f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_2Op_20f2py[] = "Op.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_2Op_21f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(28, 132, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(28, 132, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Op.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_2Op_20f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_2Op_20f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Op.pyx":135
 *         """
 *         """
 *         cdef Op op = <Op>Op.__new__(Op)             # <<<<<<<<<<<<<<
 *         op.ob_mpi = MPI_Op_f2c(arg)
 *         return op
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Op(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Op), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 135, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_op = ((struct PyMPIOpObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Op.pyx":136
 *         """
 *         cdef Op op = <Op>Op.__new__(Op)
 *         op.ob_mpi = MPI_Op_f2c(arg)             # <<<<<<<<<<<<<<
 *         return op
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(28, 136, __pyx_L1_error)
  __pyx_v_op->ob_mpi = MPI_Op_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Op.pyx":137
 *         cdef Op op = <Op>Op.__new__(Op)
 *         op.ob_mpi = MPI_Op_f2c(arg)
 *         return op             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_op));
  __pyx_r = ((PyObject *)__pyx_v_op);
  goto __pyx_L0;

  /* "mpi4py/MPI/Op.pyx":132
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Op.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_op);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":7
 *     """
 * 
 *     def __cinit__(self, Group group=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_GROUP_NULL
 *         if group is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_5Group_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_5Group_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIGroupObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(29, 7, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_group = ((struct PyMPIGroupObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 7, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_6mpi4py_3MPI_Group, 1, "group", 0))) __PYX_ERR(29, 7, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group___cinit__(((struct PyMPIGroupObject *)__pyx_v_self), __pyx_v_group);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_5Group___cinit__(struct PyMPIGroupObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Group __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Group.pyx":8
 * 
 *     def __cinit__(self, Group group=None):
 *         self.ob_mpi = MPI_GROUP_NULL             # <<<<<<<<<<<<<<
 *         if group is None: return
 *         self.ob_mpi = group.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_GROUP_NULL;

  /* "mpi4py/MPI/Group.pyx":9
 *     def __cinit__(self, Group group=None):
 *         self.ob_mpi = MPI_GROUP_NULL
 *         if group is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = group.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_group) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Group.pyx":10
 *         self.ob_mpi = MPI_GROUP_NULL
 *         if group is None: return
 *         self.ob_mpi = group.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_3 = __pyx_v_group->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Group.pyx":7
 *     """
 * 
 *     def __cinit__(self, Group group=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_GROUP_NULL
 *         if group is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":12
 *         self.ob_mpi = group.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Group(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_5Group_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_5Group_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_5Group_2__dealloc__(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_5Group_2__dealloc__(struct PyMPIGroupObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Group.pyx":13
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Group(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Group.pyx":14
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Group(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Group((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 14, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":12
 *         self.ob_mpi = group.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Group(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Group.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Group.pyx":16
 *         CHKERR( del_Group(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Group): return NotImplemented
 *         cdef Group s = <Group>self, o = <Group>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_4__richcmp__(((struct PyMPIGroupObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_4__richcmp__(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIGroupObject *__pyx_v_s = 0;
  struct PyMPIGroupObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Group.pyx":17
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Group): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Group s = <Group>self, o = <Group>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Group); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Group.pyx":18
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Group): return NotImplemented
 *         cdef Group s = <Group>self, o = <Group>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIGroupObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIGroupObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Group.pyx":19
 *         if not isinstance(other, Group): return NotImplemented
 *         cdef Group s = <Group>self, o = <Group>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 19, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Group.pyx":20
 *         cdef Group s = <Group>self, o = <Group>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 20, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Group.pyx":21
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Group.pyx":22
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Group.pyx":23
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(29, 23, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":16
 *         CHKERR( del_Group(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Group): return NotImplemented
 *         cdef Group s = <Group>self, o = <Group>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Group.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":25
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_GROUP_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_5Group_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_5Group_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_6__bool__(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_5Group_6__bool__(struct PyMPIGroupObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Group.pyx":26
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_GROUP_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Group Accessors
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_GROUP_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":25
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_GROUP_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":31
 *     # ---------------
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the size of a group
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_9Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_8Get_size[] = "Group.Get_size(self)\n\n        Return the size of a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_9Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_size (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_size", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_size", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_8Get_size(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_8Get_size(struct PyMPIGroupObject *__pyx_v_self) {
  int __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_size", 0);

  /* "mpi4py/MPI/Group.pyx":35
 *         Return the size of a group
 *         """
 *         cdef int size = -1             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_size(self.ob_mpi, &size) )
 *         return size
 */
  __pyx_v_size = -1;

  /* "mpi4py/MPI/Group.pyx":36
 *         """
 *         cdef int size = -1
 *         CHKERR( MPI_Group_size(self.ob_mpi, &size) )             # <<<<<<<<<<<<<<
 *         return size
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_size(__pyx_v_self->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 36, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":37
 *         cdef int size = -1
 *         CHKERR( MPI_Group_size(self.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     property size:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":31
 *     # ---------------
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the size of a group
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Get_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":41
 *     property size:
 *         """number of processes in group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_4size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_4size___get__(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_4size___get__(struct PyMPIGroupObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Group.pyx":42
 *         """number of processes in group"""
 *         def __get__(self):
 *             return self.Get_size()             # <<<<<<<<<<<<<<
 * 
 *     def Get_rank(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":41
 *     property size:
 *         """number of processes in group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Group.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":44
 *             return self.Get_size()
 * 
 *     def Get_rank(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the rank of this process in a group
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_11Get_rank(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_10Get_rank[] = "Group.Get_rank(self)\n\n        Return the rank of this process in a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_11Get_rank(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_rank (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_rank", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_rank", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_10Get_rank(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_10Get_rank(struct PyMPIGroupObject *__pyx_v_self) {
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_rank", 0);

  /* "mpi4py/MPI/Group.pyx":48
 *         Return the rank of this process in a group
 *         """
 *         cdef int rank = -1             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_rank(self.ob_mpi, &rank) )
 *         return rank
 */
  __pyx_v_rank = -1;

  /* "mpi4py/MPI/Group.pyx":49
 *         """
 *         cdef int rank = -1
 *         CHKERR( MPI_Group_rank(self.ob_mpi, &rank) )             # <<<<<<<<<<<<<<
 *         return rank
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_rank(__pyx_v_self->ob_mpi, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 49, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":50
 *         cdef int rank = -1
 *         CHKERR( MPI_Group_rank(self.ob_mpi, &rank) )
 *         return rank             # <<<<<<<<<<<<<<
 * 
 *     property rank:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":44
 *             return self.Get_size()
 * 
 *     def Get_rank(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the rank of this process in a group
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Get_rank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":54
 *     property rank:
 *         """rank of this process in group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_rank()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_4rank_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_4rank_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_4rank___get__(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_4rank___get__(struct PyMPIGroupObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Group.pyx":55
 *         """rank of this process in group"""
 *         def __get__(self):
 *             return self.Get_rank()             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":54
 *     property rank:
 *         """rank of this process in group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_rank()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Group.rank.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":58
 * 
 *     @classmethod
 *     def Translate_ranks(cls, Group group1, ranks1, Group group2=None):             # <<<<<<<<<<<<<<
 *         """
 *         Translate the ranks of processes in
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_13Translate_ranks(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_12Translate_ranks[] = "Group.Translate_ranks(type cls, Group group1, ranks1, Group group2=None)\n\n        Translate the ranks of processes in\n        one group to those in another group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_13Translate_ranks(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group1 = 0;
  PyObject *__pyx_v_ranks1 = 0;
  struct PyMPIGroupObject *__pyx_v_group2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Translate_ranks (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group1,&__pyx_n_s_ranks1,&__pyx_n_s_group2,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)((struct PyMPIGroupObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ranks1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Translate_ranks", 0, 2, 3, 1); __PYX_ERR(29, 58, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group2);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Translate_ranks") < 0)) __PYX_ERR(29, 58, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_group1 = ((struct PyMPIGroupObject *)values[0]);
    __pyx_v_ranks1 = values[1];
    __pyx_v_group2 = ((struct PyMPIGroupObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Translate_ranks", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 58, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Translate_ranks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group1), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group1", 0))) __PYX_ERR(29, 58, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group2), __pyx_ptype_6mpi4py_3MPI_Group, 1, "group2", 0))) __PYX_ERR(29, 58, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_12Translate_ranks(((PyTypeObject*)__pyx_v_cls), __pyx_v_group1, __pyx_v_ranks1, __pyx_v_group2);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_12Translate_ranks(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, PyObject *__pyx_v_ranks1, struct PyMPIGroupObject *__pyx_v_group2) {
  MPI_Group __pyx_v_grp1;
  MPI_Group __pyx_v_grp2;
  int __pyx_v_i;
  int __pyx_v_n;
  int *__pyx_v_iranks1;
  int *__pyx_v_iranks2;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  PyObject *__pyx_v_ranks2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  MPI_Group __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  __Pyx_RefNannySetupContext("Translate_ranks", 0);

  /* "mpi4py/MPI/Group.pyx":63
 *         one group to those in another group
 *         """
 *         cdef MPI_Group grp1 = MPI_GROUP_NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Group grp2 = MPI_GROUP_NULL
 *         cdef int i = 0, n = 0, *iranks1 = NULL, *iranks2 = NULL
 */
  __pyx_v_grp1 = MPI_GROUP_NULL;

  /* "mpi4py/MPI/Group.pyx":64
 *         """
 *         cdef MPI_Group grp1 = MPI_GROUP_NULL
 *         cdef MPI_Group grp2 = MPI_GROUP_NULL             # <<<<<<<<<<<<<<
 *         cdef int i = 0, n = 0, *iranks1 = NULL, *iranks2 = NULL
 *         cdef tmp1 = getarray(ranks1, &n, &iranks1)
 */
  __pyx_v_grp2 = MPI_GROUP_NULL;

  /* "mpi4py/MPI/Group.pyx":65
 *         cdef MPI_Group grp1 = MPI_GROUP_NULL
 *         cdef MPI_Group grp2 = MPI_GROUP_NULL
 *         cdef int i = 0, n = 0, *iranks1 = NULL, *iranks2 = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp1 = getarray(ranks1, &n, &iranks1)
 *         cdef tmp2 = newarray(n, &iranks2)
 */
  __pyx_v_i = 0;
  __pyx_v_n = 0;
  __pyx_v_iranks1 = NULL;
  __pyx_v_iranks2 = NULL;

  /* "mpi4py/MPI/Group.pyx":66
 *         cdef MPI_Group grp2 = MPI_GROUP_NULL
 *         cdef int i = 0, n = 0, *iranks1 = NULL, *iranks2 = NULL
 *         cdef tmp1 = getarray(ranks1, &n, &iranks1)             # <<<<<<<<<<<<<<
 *         cdef tmp2 = newarray(n, &iranks2)
 *         #
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_ranks1, (&__pyx_v_n), (&__pyx_v_iranks1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp1 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":67
 *         cdef int i = 0, n = 0, *iranks1 = NULL, *iranks2 = NULL
 *         cdef tmp1 = getarray(ranks1, &n, &iranks1)
 *         cdef tmp2 = newarray(n, &iranks2)             # <<<<<<<<<<<<<<
 *         #
 *         grp1 = group1.ob_mpi
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_n, (&__pyx_v_iranks2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tmp2 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":69
 *         cdef tmp2 = newarray(n, &iranks2)
 *         #
 *         grp1 = group1.ob_mpi             # <<<<<<<<<<<<<<
 *         if group2 is not None:
 *             grp2 = group2.ob_mpi
 */
  __pyx_t_2 = __pyx_v_group1->ob_mpi;
  __pyx_v_grp1 = __pyx_t_2;

  /* "mpi4py/MPI/Group.pyx":70
 *         #
 *         grp1 = group1.ob_mpi
 *         if group2 is not None:             # <<<<<<<<<<<<<<
 *             grp2 = group2.ob_mpi
 *         else:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_group2) != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/Group.pyx":71
 *         grp1 = group1.ob_mpi
 *         if group2 is not None:
 *             grp2 = group2.ob_mpi             # <<<<<<<<<<<<<<
 *         else:
 *             CHKERR( MPI_Comm_group(MPI_COMM_WORLD, &grp2) )
 */
    __pyx_t_2 = __pyx_v_group2->ob_mpi;
    __pyx_v_grp2 = __pyx_t_2;

    /* "mpi4py/MPI/Group.pyx":70
 *         #
 *         grp1 = group1.ob_mpi
 *         if group2 is not None:             # <<<<<<<<<<<<<<
 *             grp2 = group2.ob_mpi
 *         else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Group.pyx":73
 *             grp2 = group2.ob_mpi
 *         else:
 *             CHKERR( MPI_Comm_group(MPI_COMM_WORLD, &grp2) )             # <<<<<<<<<<<<<<
 *         try:
 *             CHKERR( MPI_Group_translate_ranks(grp1, n, iranks1,
 */
  /*else*/ {
    __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_group(MPI_COMM_WORLD, (&__pyx_v_grp2))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 73, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Group.pyx":74
 *         else:
 *             CHKERR( MPI_Comm_group(MPI_COMM_WORLD, &grp2) )
 *         try:             # <<<<<<<<<<<<<<
 *             CHKERR( MPI_Group_translate_ranks(grp1, n, iranks1,
 *                                               grp2, iranks2) )
 */
  /*try:*/ {

    /* "mpi4py/MPI/Group.pyx":75
 *             CHKERR( MPI_Comm_group(MPI_COMM_WORLD, &grp2) )
 *         try:
 *             CHKERR( MPI_Group_translate_ranks(grp1, n, iranks1,             # <<<<<<<<<<<<<<
 *                                               grp2, iranks2) )
 *         finally:
 */
    __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_translate_ranks(__pyx_v_grp1, __pyx_v_n, __pyx_v_iranks1, __pyx_v_grp2, __pyx_v_iranks2)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 75, __pyx_L5_error)
  }

  /* "mpi4py/MPI/Group.pyx":78
 *                                               grp2, iranks2) )
 *         finally:
 *             if group2 is None:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Group_free(&grp2) )
 *         #
 */
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_4 = (((PyObject *)__pyx_v_group2) == Py_None);
      __pyx_t_3 = (__pyx_t_4 != 0);
      if (__pyx_t_3) {

        /* "mpi4py/MPI/Group.pyx":79
 *         finally:
 *             if group2 is None:
 *                 CHKERR( MPI_Group_free(&grp2) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef object ranks2 = [iranks2[i] for i from 0 <= i < n]
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_free((&__pyx_v_grp2))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 79, __pyx_L1_error)

        /* "mpi4py/MPI/Group.pyx":78
 *                                               grp2, iranks2) )
 *         finally:
 *             if group2 is None:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Group_free(&grp2) )
 *         #
 */
      }
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_10);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
      {
        __pyx_t_3 = (((PyObject *)__pyx_v_group2) == Py_None);
        __pyx_t_4 = (__pyx_t_3 != 0);
        if (__pyx_t_4) {

          /* "mpi4py/MPI/Group.pyx":79
 *         finally:
 *             if group2 is None:
 *                 CHKERR( MPI_Group_free(&grp2) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef object ranks2 = [iranks2[i] for i from 0 <= i < n]
 */
          __pyx_t_14 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_free((&__pyx_v_grp2))); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(29, 79, __pyx_L9_error)

          /* "mpi4py/MPI/Group.pyx":78
 *                                               grp2, iranks2) )
 *         finally:
 *             if group2 is None:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Group_free(&grp2) )
 *         #
 */
        }
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
      goto __pyx_L1_error;
      __pyx_L9_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "mpi4py/MPI/Group.pyx":81
 *                 CHKERR( MPI_Group_free(&grp2) )
 *         #
 *         cdef object ranks2 = [iranks2[i] for i from 0 <= i < n]             # <<<<<<<<<<<<<<
 *         return ranks2
 * 
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
    __pyx_t_15 = __Pyx_PyInt_From_int((__pyx_v_iranks2[__pyx_v_i])); if (unlikely(!__pyx_t_15)) __PYX_ERR(29, 81, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_15))) __PYX_ERR(29, 81, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __pyx_v_ranks2 = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":82
 *         #
 *         cdef object ranks2 = [iranks2[i] for i from 0 <= i < n]
 *         return ranks2             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ranks2);
  __pyx_r = __pyx_v_ranks2;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":58
 * 
 *     @classmethod
 *     def Translate_ranks(cls, Group group1, ranks1, Group group2=None):             # <<<<<<<<<<<<<<
 *         """
 *         Translate the ranks of processes in
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Translate_ranks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_ranks2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":85
 * 
 *     @classmethod
 *     def Compare(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Compare two groups
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_15Compare(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_14Compare[] = "Group.Compare(type cls, Group group1, Group group2)\n\n        Compare two groups\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_15Compare(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group1 = 0;
  struct PyMPIGroupObject *__pyx_v_group2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Compare (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group1,&__pyx_n_s_group2,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Compare", 1, 2, 2, 1); __PYX_ERR(29, 85, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Compare") < 0)) __PYX_ERR(29, 85, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_group1 = ((struct PyMPIGroupObject *)values[0]);
    __pyx_v_group2 = ((struct PyMPIGroupObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Compare", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 85, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Compare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group1), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group1", 0))) __PYX_ERR(29, 85, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group2), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group2", 0))) __PYX_ERR(29, 85, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_14Compare(((PyTypeObject*)__pyx_v_cls), __pyx_v_group1, __pyx_v_group2);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_14Compare(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Compare", 0);

  /* "mpi4py/MPI/Group.pyx":89
 *         Compare two groups
 *         """
 *         cdef int flag = MPI_UNEQUAL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_compare(group1.ob_mpi, group2.ob_mpi, &flag) )
 *         return flag
 */
  __pyx_v_flag = MPI_UNEQUAL;

  /* "mpi4py/MPI/Group.pyx":90
 *         """
 *         cdef int flag = MPI_UNEQUAL
 *         CHKERR( MPI_Group_compare(group1.ob_mpi, group2.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_compare(__pyx_v_group1->ob_mpi, __pyx_v_group2->ob_mpi, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 90, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":91
 *         cdef int flag = MPI_UNEQUAL
 *         CHKERR( MPI_Group_compare(group1.ob_mpi, group2.ob_mpi, &flag) )
 *         return flag             # <<<<<<<<<<<<<<
 * 
 *     # Group Constructors
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":85
 * 
 *     @classmethod
 *     def Compare(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Compare two groups
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Compare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":96
 *     # ------------------
 * 
 *     def Dup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate a group
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_17Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_16Dup[] = "Group.Dup(self)\n\n        Duplicate a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_17Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dup (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Dup", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Dup", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_16Dup(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_16Dup(struct PyMPIGroupObject *__pyx_v_self) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Dup", 0);

  /* "mpi4py/MPI/Group.pyx":100
 *         Duplicate a group
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_union(self.ob_mpi, MPI_GROUP_EMPTY, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 100, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":101
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_union(self.ob_mpi, MPI_GROUP_EMPTY, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_union(__pyx_v_self->ob_mpi, MPI_GROUP_EMPTY, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 101, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":102
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_union(self.ob_mpi, MPI_GROUP_EMPTY, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":96
 *     # ------------------
 * 
 *     def Dup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate a group
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Dup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":105
 * 
 *     @classmethod
 *     def Union(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by combining
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_19Union(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_18Union[] = "Group.Union(type cls, Group group1, Group group2)\n\n        Produce a group by combining\n        two existing groups\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_19Union(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group1 = 0;
  struct PyMPIGroupObject *__pyx_v_group2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Union (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group1,&__pyx_n_s_group2,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Union", 1, 2, 2, 1); __PYX_ERR(29, 105, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Union") < 0)) __PYX_ERR(29, 105, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_group1 = ((struct PyMPIGroupObject *)values[0]);
    __pyx_v_group2 = ((struct PyMPIGroupObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Union", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 105, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Union", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group1), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group1", 0))) __PYX_ERR(29, 105, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group2), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group2", 0))) __PYX_ERR(29, 105, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_18Union(((PyTypeObject*)__pyx_v_cls), __pyx_v_group1, __pyx_v_group2);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_18Union(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Union", 0);

  /* "mpi4py/MPI/Group.pyx":110
 *         two existing groups
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_union(
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 110, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":111
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_union(             # <<<<<<<<<<<<<<
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_union(__pyx_v_group1->ob_mpi, __pyx_v_group2->ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 111, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":113
 *         CHKERR( MPI_Group_union(
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":105
 * 
 *     @classmethod
 *     def Union(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by combining
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Union", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":116
 * 
 *     @classmethod
 *     def Intersection(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group as the intersection
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_21Intersection(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_20Intersection[] = "Group.Intersection(type cls, Group group1, Group group2)\n\n        Produce a group as the intersection\n        of two existing groups\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_21Intersection(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group1 = 0;
  struct PyMPIGroupObject *__pyx_v_group2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Intersection (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group1,&__pyx_n_s_group2,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Intersection", 1, 2, 2, 1); __PYX_ERR(29, 116, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Intersection") < 0)) __PYX_ERR(29, 116, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_group1 = ((struct PyMPIGroupObject *)values[0]);
    __pyx_v_group2 = ((struct PyMPIGroupObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Intersection", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 116, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Intersection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group1), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group1", 0))) __PYX_ERR(29, 116, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group2), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group2", 0))) __PYX_ERR(29, 116, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_20Intersection(((PyTypeObject*)__pyx_v_cls), __pyx_v_group1, __pyx_v_group2);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_20Intersection(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Intersection", 0);

  /* "mpi4py/MPI/Group.pyx":121
 *         of two existing groups
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_intersection(
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 121, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":122
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_intersection(             # <<<<<<<<<<<<<<
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_intersection(__pyx_v_group1->ob_mpi, __pyx_v_group2->ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 122, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":124
 *         CHKERR( MPI_Group_intersection(
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     Intersect = Intersection
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":116
 * 
 *     @classmethod
 *     def Intersection(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group as the intersection
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Intersection", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":129
 * 
 *     @classmethod
 *     def Difference(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group from the difference
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_23Difference(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_22Difference[] = "Group.Difference(type cls, Group group1, Group group2)\n\n        Produce a group from the difference\n        of two existing groups\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_23Difference(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group1 = 0;
  struct PyMPIGroupObject *__pyx_v_group2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Difference (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group1,&__pyx_n_s_group2,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Difference", 1, 2, 2, 1); __PYX_ERR(29, 129, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Difference") < 0)) __PYX_ERR(29, 129, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_group1 = ((struct PyMPIGroupObject *)values[0]);
    __pyx_v_group2 = ((struct PyMPIGroupObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Difference", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 129, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Difference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group1), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group1", 0))) __PYX_ERR(29, 129, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group2), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group2", 0))) __PYX_ERR(29, 129, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_22Difference(((PyTypeObject*)__pyx_v_cls), __pyx_v_group1, __pyx_v_group2);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_22Difference(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIGroupObject *__pyx_v_group1, struct PyMPIGroupObject *__pyx_v_group2) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Difference", 0);

  /* "mpi4py/MPI/Group.pyx":134
 *         of two existing groups
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_difference(
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 134, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":135
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_difference(             # <<<<<<<<<<<<<<
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_difference(__pyx_v_group1->ob_mpi, __pyx_v_group2->ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 135, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":137
 *         CHKERR( MPI_Group_difference(
 *                 group1.ob_mpi, group2.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     def Incl(self, ranks):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":129
 * 
 *     @classmethod
 *     def Difference(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group from the difference
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Difference", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":139
 *         return group
 * 
 *     def Incl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by reordering an existing
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_25Incl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_24Incl[] = "Group.Incl(self, ranks)\n\n        Produce a group by reordering an existing\n        group and taking only listed members\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_25Incl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ranks = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Incl (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ranks,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ranks)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Incl") < 0)) __PYX_ERR(29, 139, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_ranks = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Incl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 139, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Incl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_24Incl(((struct PyMPIGroupObject *)__pyx_v_self), __pyx_v_ranks);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_24Incl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks) {
  int __pyx_v_n;
  int *__pyx_v_iranks;
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Incl", 0);
  __Pyx_INCREF(__pyx_v_ranks);

  /* "mpi4py/MPI/Group.pyx":144
 *         group and taking only listed members
 *         """
 *         cdef int n = 0, *iranks = NULL             # <<<<<<<<<<<<<<
 *         ranks = getarray(ranks, &n, &iranks)
 *         cdef Group group = <Group>Group.__new__(Group)
 */
  __pyx_v_n = 0;
  __pyx_v_iranks = NULL;

  /* "mpi4py/MPI/Group.pyx":145
 *         """
 *         cdef int n = 0, *iranks = NULL
 *         ranks = getarray(ranks, &n, &iranks)             # <<<<<<<<<<<<<<
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_incl(self.ob_mpi, n, iranks, &group.ob_mpi) )
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_ranks, (&__pyx_v_n), (&__pyx_v_iranks)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_ranks, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":146
 *         cdef int n = 0, *iranks = NULL
 *         ranks = getarray(ranks, &n, &iranks)
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_incl(self.ob_mpi, n, iranks, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 146, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":147
 *         ranks = getarray(ranks, &n, &iranks)
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_incl(self.ob_mpi, n, iranks, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_incl(__pyx_v_self->ob_mpi, __pyx_v_n, __pyx_v_iranks, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 147, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":148
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_incl(self.ob_mpi, n, iranks, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     def Excl(self, ranks):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":139
 *         return group
 * 
 *     def Incl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by reordering an existing
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Incl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XDECREF(__pyx_v_ranks);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":150
 *         return group
 * 
 *     def Excl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by reordering an existing
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_27Excl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_26Excl[] = "Group.Excl(self, ranks)\n\n        Produce a group by reordering an existing\n        group and taking only unlisted members\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_27Excl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ranks = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Excl (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ranks,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ranks)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Excl") < 0)) __PYX_ERR(29, 150, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_ranks = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Excl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 150, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Excl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_26Excl(((struct PyMPIGroupObject *)__pyx_v_self), __pyx_v_ranks);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_26Excl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks) {
  int __pyx_v_n;
  int *__pyx_v_iranks;
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Excl", 0);
  __Pyx_INCREF(__pyx_v_ranks);

  /* "mpi4py/MPI/Group.pyx":155
 *         group and taking only unlisted members
 *         """
 *         cdef int n = 0, *iranks = NULL             # <<<<<<<<<<<<<<
 *         ranks = getarray(ranks, &n, &iranks)
 *         cdef Group group = <Group>Group.__new__(Group)
 */
  __pyx_v_n = 0;
  __pyx_v_iranks = NULL;

  /* "mpi4py/MPI/Group.pyx":156
 *         """
 *         cdef int n = 0, *iranks = NULL
 *         ranks = getarray(ranks, &n, &iranks)             # <<<<<<<<<<<<<<
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_excl(self.ob_mpi, n, iranks, &group.ob_mpi) )
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_ranks, (&__pyx_v_n), (&__pyx_v_iranks)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_ranks, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":157
 *         cdef int n = 0, *iranks = NULL
 *         ranks = getarray(ranks, &n, &iranks)
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_excl(self.ob_mpi, n, iranks, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 157, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":158
 *         ranks = getarray(ranks, &n, &iranks)
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_excl(self.ob_mpi, n, iranks, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_excl(__pyx_v_self->ob_mpi, __pyx_v_n, __pyx_v_iranks, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 158, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":159
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_excl(self.ob_mpi, n, iranks, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     def Range_incl(self, ranks):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":150
 *         return group
 * 
 *     def Excl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by reordering an existing
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Excl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XDECREF(__pyx_v_ranks);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":161
 *         return group
 * 
 *     def Range_incl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new group from ranges of
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_29Range_incl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_28Range_incl[] = "Group.Range_incl(self, ranks)\n\n        Create a new group from ranges of\n        of ranks in an existing group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_29Range_incl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ranks = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Range_incl (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ranks,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ranks)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Range_incl") < 0)) __PYX_ERR(29, 161, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_ranks = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Range_incl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 161, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Range_incl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_28Range_incl(((struct PyMPIGroupObject *)__pyx_v_self), __pyx_v_ranks);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_28Range_incl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks) {
  int *__pyx_v_p;
  int (*__pyx_v_ranges)[3];
  int __pyx_v_i;
  int __pyx_v_n;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *(*__pyx_t_8)(PyObject *);
  int __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("Range_incl", 0);

  /* "mpi4py/MPI/Group.pyx":166
 *         of ranks in an existing group
 *         """
 *         cdef int *p = NULL, (*ranges)[3]# = NULL ## XXX cython fails             # <<<<<<<<<<<<<<
 *         ranges = NULL
 *         cdef int i = 0, n = <int>len(ranks)
 */
  __pyx_v_p = NULL;

  /* "mpi4py/MPI/Group.pyx":167
 *         """
 *         cdef int *p = NULL, (*ranges)[3]# = NULL ## XXX cython fails
 *         ranges = NULL             # <<<<<<<<<<<<<<
 *         cdef int i = 0, n = <int>len(ranks)
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 */
  __pyx_v_ranges = NULL;

  /* "mpi4py/MPI/Group.pyx":168
 *         cdef int *p = NULL, (*ranges)[3]# = NULL ## XXX cython fails
 *         ranges = NULL
 *         cdef int i = 0, n = <int>len(ranks)             # <<<<<<<<<<<<<<
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 *         for i from 0 <= i < n:
 */
  __pyx_v_i = 0;
  __pyx_t_1 = PyObject_Length(__pyx_v_ranks); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(29, 168, __pyx_L1_error)
  __pyx_v_n = ((int)__pyx_t_1);

  /* "mpi4py/MPI/Group.pyx":169
 *         ranges = NULL
 *         cdef int i = 0, n = <int>len(ranks)
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < n:
 *             p = <int*> ranges[i]
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_n, (sizeof(int [3])), (&__pyx_v_ranges))); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":170
 *         cdef int i = 0, n = <int>len(ranks)
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
 *             p = <int*> ranges[i]
 *             p[0], p[1], p[2] = ranks[i]
 */
  __pyx_t_3 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {

    /* "mpi4py/MPI/Group.pyx":171
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 *         for i from 0 <= i < n:
 *             p = <int*> ranges[i]             # <<<<<<<<<<<<<<
 *             p[0], p[1], p[2] = ranks[i]
 *         cdef Group group = <Group>Group.__new__(Group)
 */
    __pyx_v_p = ((int *)(__pyx_v_ranges[__pyx_v_i]));

    /* "mpi4py/MPI/Group.pyx":172
 *         for i from 0 <= i < n:
 *             p = <int*> ranges[i]
 *             p[0], p[1], p[2] = ranks[i]             # <<<<<<<<<<<<<<
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_range_incl(self.ob_mpi, n, ranges, &group.ob_mpi) )
 */
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_ranks, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(29, 172, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(29, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(29, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(29, 172, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_unpacking_done;
      __pyx_L5_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(29, 172, __pyx_L1_error)
      __pyx_L6_unpacking_done:;
    }
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(29, 172, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(29, 172, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(29, 172, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    (__pyx_v_p[0]) = __pyx_t_9;
    (__pyx_v_p[1]) = __pyx_t_10;
    (__pyx_v_p[2]) = __pyx_t_11;
  }

  /* "mpi4py/MPI/Group.pyx":173
 *             p = <int*> ranges[i]
 *             p[0], p[1], p[2] = ranks[i]
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_range_incl(self.ob_mpi, n, ranges, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 173, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_6 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/Group.pyx":174
 *             p[0], p[1], p[2] = ranks[i]
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_range_incl(self.ob_mpi, n, ranges, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_range_incl(__pyx_v_self->ob_mpi, __pyx_v_n, __pyx_v_ranges, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 174, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":175
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_range_incl(self.ob_mpi, n, ranges, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     def Range_excl(self, ranks):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":161
 *         return group
 * 
 *     def Range_incl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new group from ranges of
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Range_incl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":177
 *         return group
 * 
 *     def Range_excl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new group by excluding ranges
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_31Range_excl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_30Range_excl[] = "Group.Range_excl(self, ranks)\n\n        Create a new group by excluding ranges\n        of processes from an existing group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_31Range_excl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ranks = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Range_excl (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ranks,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ranks)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Range_excl") < 0)) __PYX_ERR(29, 177, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_ranks = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Range_excl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 177, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Range_excl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_30Range_excl(((struct PyMPIGroupObject *)__pyx_v_self), __pyx_v_ranks);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_30Range_excl(struct PyMPIGroupObject *__pyx_v_self, PyObject *__pyx_v_ranks) {
  int *__pyx_v_p;
  int (*__pyx_v_ranges)[3];
  int __pyx_v_i;
  int __pyx_v_n;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *(*__pyx_t_8)(PyObject *);
  int __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  __Pyx_RefNannySetupContext("Range_excl", 0);

  /* "mpi4py/MPI/Group.pyx":182
 *         of processes from an existing group
 *         """
 *         cdef int *p = NULL, (*ranges)[3]# = NULL ## XXX cython fails             # <<<<<<<<<<<<<<
 *         ranges = NULL
 *         cdef int i = 0, n = <int>len(ranks)
 */
  __pyx_v_p = NULL;

  /* "mpi4py/MPI/Group.pyx":183
 *         """
 *         cdef int *p = NULL, (*ranges)[3]# = NULL ## XXX cython fails
 *         ranges = NULL             # <<<<<<<<<<<<<<
 *         cdef int i = 0, n = <int>len(ranks)
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 */
  __pyx_v_ranges = NULL;

  /* "mpi4py/MPI/Group.pyx":184
 *         cdef int *p = NULL, (*ranges)[3]# = NULL ## XXX cython fails
 *         ranges = NULL
 *         cdef int i = 0, n = <int>len(ranks)             # <<<<<<<<<<<<<<
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 *         for i from 0 <= i < n:
 */
  __pyx_v_i = 0;
  __pyx_t_1 = PyObject_Length(__pyx_v_ranks); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(29, 184, __pyx_L1_error)
  __pyx_v_n = ((int)__pyx_t_1);

  /* "mpi4py/MPI/Group.pyx":185
 *         ranges = NULL
 *         cdef int i = 0, n = <int>len(ranks)
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < n:
 *             p = <int*> ranges[i]
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_allocate(__pyx_v_n, (sizeof(int [3])), (&__pyx_v_ranges))); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":186
 *         cdef int i = 0, n = <int>len(ranks)
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
 *             p = <int*> ranges[i]
 *             p[0], p[1], p[2] = ranks[i]
 */
  __pyx_t_3 = __pyx_v_n;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {

    /* "mpi4py/MPI/Group.pyx":187
 *         cdef tmp1 = allocate(n, sizeof(int[3]), &ranges)
 *         for i from 0 <= i < n:
 *             p = <int*> ranges[i]             # <<<<<<<<<<<<<<
 *             p[0], p[1], p[2] = ranks[i]
 *         cdef Group group = <Group>Group.__new__(Group)
 */
    __pyx_v_p = ((int *)(__pyx_v_ranges[__pyx_v_i]));

    /* "mpi4py/MPI/Group.pyx":188
 *         for i from 0 <= i < n:
 *             p = <int*> ranges[i]
 *             p[0], p[1], p[2] = ranks[i]             # <<<<<<<<<<<<<<
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_range_excl(self.ob_mpi, n, ranges, &group.ob_mpi) )
 */
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_ranks, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
      PyObject* sequence = __pyx_t_2;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 3)) {
        if (size > 3) __Pyx_RaiseTooManyValuesError(3);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(29, 188, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 188, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(29, 188, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(29, 188, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 188, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(29, 188, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_unpacking_done;
      __pyx_L5_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(29, 188, __pyx_L1_error)
      __pyx_L6_unpacking_done:;
    }
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(29, 188, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(29, 188, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(29, 188, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    (__pyx_v_p[0]) = __pyx_t_9;
    (__pyx_v_p[1]) = __pyx_t_10;
    (__pyx_v_p[2]) = __pyx_t_11;
  }

  /* "mpi4py/MPI/Group.pyx":189
 *             p = <int*> ranges[i]
 *             p[0], p[1], p[2] = ranks[i]
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Group_range_excl(self.ob_mpi, n, ranges, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 189, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_6 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/Group.pyx":190
 *             p[0], p[1], p[2] = ranks[i]
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_range_excl(self.ob_mpi, n, ranges, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_range_excl(__pyx_v_self->ob_mpi, __pyx_v_n, __pyx_v_ranges, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(29, 190, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":191
 *         cdef Group group = <Group>Group.__new__(Group)
 *         CHKERR( MPI_Group_range_excl(self.ob_mpi, n, ranges, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     # Group Destructor
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":177
 *         return group
 * 
 *     def Range_excl(self, ranks):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new group by excluding ranges
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("mpi4py.MPI.Group.Range_excl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":196
 *     # ----------------
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a group
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_33Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_32Free[] = "Group.Free(self)\n\n        Free a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_33Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_32Free(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_32Free(struct PyMPIGroupObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Group.pyx":200
 *         Free a group
 *         """
 *         CHKERR( MPI_Group_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         if self is __GROUP_EMPTY__: self.ob_mpi = MPI_GROUP_EMPTY
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Group_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 200, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":201
 *         """
 *         CHKERR( MPI_Group_free(&self.ob_mpi) )
 *         if self is __GROUP_EMPTY__: self.ob_mpi = MPI_GROUP_EMPTY             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_2 = (__pyx_v_self == __pyx_v_6mpi4py_3MPI___GROUP_EMPTY__);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_GROUP_EMPTY;
  }

  /* "mpi4py/MPI/Group.pyx":196
 *     # ----------------
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a group
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":206
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_35py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_34py2f[] = "Group.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_35py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_34py2f(((struct PyMPIGroupObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_34py2f(struct PyMPIGroupObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Group.pyx":209
 *         """
 *         """
 *         return MPI_Group_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Group_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":206
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Group.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Group.pyx":212
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_37f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_5Group_36f2py[] = "Group.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_5Group_37f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(29, 212, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 212, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Group.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_5Group_36f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_5Group_36f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Group.pyx":215
 *         """
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         group.ob_mpi = MPI_Group_f2c(arg)
 *         return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 215, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Group.pyx":216
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         group.ob_mpi = MPI_Group_f2c(arg)             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(29, 216, __pyx_L1_error)
  __pyx_v_group->ob_mpi = MPI_Group_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Group.pyx":217
 *         cdef Group group = <Group>Group.__new__(Group)
 *         group.ob_mpi = MPI_Group_f2c(arg)
 *         return group             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Group.pyx":212
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Group.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":37
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_COMM_NULL
 *         if comm is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Comm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Comm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 37, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 37, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 37, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm___cinit__(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Comm___cinit__(struct PyMPICommObject *__pyx_v_self, struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Comm __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":38
 * 
 *     def __cinit__(self, Comm comm=None):
 *         self.ob_mpi = MPI_COMM_NULL             # <<<<<<<<<<<<<<
 *         if comm is None: return
 *         self.ob_mpi = comm.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_COMM_NULL;

  /* "mpi4py/MPI/Comm.pyx":39
 *     def __cinit__(self, Comm comm=None):
 *         self.ob_mpi = MPI_COMM_NULL
 *         if comm is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = comm.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_comm) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":40
 *         self.ob_mpi = MPI_COMM_NULL
 *         if comm is None: return
 *         self.ob_mpi = comm.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_3 = __pyx_v_comm->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Comm.pyx":37
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_COMM_NULL
 *         if comm is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":42
 *         self.ob_mpi = comm.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Comm(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_4Comm_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_4Comm_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_4Comm_2__dealloc__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_4Comm_2__dealloc__(struct PyMPICommObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Comm.pyx":43
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Comm(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":44
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Comm(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Comm((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 44, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":42
 *         self.ob_mpi = comm.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Comm(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Comm.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Comm.pyx":46
 *         CHKERR( del_Comm(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Comm): return NotImplemented
 *         cdef Comm s = <Comm>self, o = <Comm>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4__richcmp__(((struct PyMPICommObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4__richcmp__(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPICommObject *__pyx_v_s = 0;
  struct PyMPICommObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Comm.pyx":47
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Comm): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Comm s = <Comm>self, o = <Comm>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Comm); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":48
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Comm): return NotImplemented
 *         cdef Comm s = <Comm>self, o = <Comm>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPICommObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPICommObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":49
 *         if not isinstance(other, Comm): return NotImplemented
 *         cdef Comm s = <Comm>self, o = <Comm>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 49, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":50
 *         cdef Comm s = <Comm>self, o = <Comm>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 50, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":51
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":52
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":53
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(7, 53, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":46
 *         CHKERR( del_Comm(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Comm): return NotImplemented
 *         cdef Comm s = <Comm>self, o = <Comm>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":55
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_COMM_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Comm_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Comm_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_6__bool__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Comm_6__bool__(struct PyMPICommObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Comm.pyx":56
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_COMM_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Group
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_COMM_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":55
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_COMM_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":61
 *     # -----
 * 
 *     def Get_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Access the group associated with a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_9Get_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_8Get_group[] = "Comm.Get_group(self)\n\n        Access the group associated with a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_9Get_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_group (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_group", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_group", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_8Get_group(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8Get_group(struct PyMPICommObject *__pyx_v_self) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_group", 0);

  /* "mpi4py/MPI/Comm.pyx":65
 *         Access the group associated with a communicator
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_group(self.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 65, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":66
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_Comm_group(self.ob_mpi, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_group(__pyx_v_self->ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 66, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":67
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_Comm_group(self.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     property group:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":61
 *     # -----
 * 
 *     def Get_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Access the group associated with a communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":71
 *     property group:
 *         """communicator group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_group()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_5group_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_5group___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_5group___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":72
 *         """communicator group"""
 *         def __get__(self):
 *             return self.Get_group()             # <<<<<<<<<<<<<<
 * 
 *     # Communicator Accessors
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":71
 *     property group:
 *         """communicator group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_group()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.group.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":77
 *     # ----------------------
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of processes in a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_11Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_10Get_size[] = "Comm.Get_size(self)\n\n        Return the number of processes in a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_11Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_size (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_size", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_size", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_10Get_size(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_10Get_size(struct PyMPICommObject *__pyx_v_self) {
  int __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_size", 0);

  /* "mpi4py/MPI/Comm.pyx":81
 *         Return the number of processes in a communicator
 *         """
 *         cdef int size = -1             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_size(self.ob_mpi, &size) )
 *         return size
 */
  __pyx_v_size = -1;

  /* "mpi4py/MPI/Comm.pyx":82
 *         """
 *         cdef int size = -1
 *         CHKERR( MPI_Comm_size(self.ob_mpi, &size) )             # <<<<<<<<<<<<<<
 *         return size
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_size(__pyx_v_self->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 82, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":83
 *         cdef int size = -1
 *         CHKERR( MPI_Comm_size(self.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     property size:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":77
 *     # ----------------------
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of processes in a communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":87
 *     property size:
 *         """number of processes in communicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4size___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4size___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":88
 *         """number of processes in communicator"""
 *         def __get__(self):
 *             return self.Get_size()             # <<<<<<<<<<<<<<
 * 
 *     def Get_rank(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":87
 *     property size:
 *         """number of processes in communicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":90
 *             return self.Get_size()
 * 
 *     def Get_rank(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the rank of this process in a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_13Get_rank(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_12Get_rank[] = "Comm.Get_rank(self)\n\n        Return the rank of this process in a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_13Get_rank(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_rank (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_rank", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_rank", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_12Get_rank(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_12Get_rank(struct PyMPICommObject *__pyx_v_self) {
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_rank", 0);

  /* "mpi4py/MPI/Comm.pyx":94
 *         Return the rank of this process in a communicator
 *         """
 *         cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         return rank
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/Comm.pyx":95
 *         """
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )             # <<<<<<<<<<<<<<
 *         return rank
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_self->ob_mpi, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 95, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":96
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         return rank             # <<<<<<<<<<<<<<
 * 
 *     property rank:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":90
 *             return self.Get_size()
 * 
 *     def Get_rank(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the rank of this process in a communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_rank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":100
 *     property rank:
 *         """rank of this process in communicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_rank()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4rank_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4rank_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4rank___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4rank___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":101
 *         """rank of this process in communicator"""
 *         def __get__(self):
 *             return self.Get_rank()             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":100
 *     property rank:
 *         """rank of this process in communicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_rank()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.rank.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":104
 * 
 *     @classmethod
 *     def Compare(cls, Comm comm1, Comm comm2):             # <<<<<<<<<<<<<<
 *         """
 *         Compare two communicators
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_15Compare(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_14Compare[] = "Comm.Compare(type cls, Comm comm1, Comm comm2)\n\n        Compare two communicators\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_15Compare(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPICommObject *__pyx_v_comm1 = 0;
  struct PyMPICommObject *__pyx_v_comm2 = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Compare (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm1,&__pyx_n_s_comm2,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Compare", 1, 2, 2, 1); __PYX_ERR(7, 104, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Compare") < 0)) __PYX_ERR(7, 104, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_comm1 = ((struct PyMPICommObject *)values[0]);
    __pyx_v_comm2 = ((struct PyMPICommObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Compare", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 104, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Compare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm1), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm1", 0))) __PYX_ERR(7, 104, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm2), __pyx_ptype_6mpi4py_3MPI_Comm, 0, "comm2", 0))) __PYX_ERR(7, 104, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_14Compare(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm1, __pyx_v_comm2);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_14Compare(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPICommObject *__pyx_v_comm1, struct PyMPICommObject *__pyx_v_comm2) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Compare", 0);

  /* "mpi4py/MPI/Comm.pyx":108
 *         Compare two communicators
 *         """
 *         cdef int flag = MPI_UNEQUAL             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_compare(
 *             comm1.ob_mpi, comm2.ob_mpi, &flag) )
 */
  __pyx_v_flag = MPI_UNEQUAL;

  /* "mpi4py/MPI/Comm.pyx":109
 *         """
 *         cdef int flag = MPI_UNEQUAL
 *         with nogil: CHKERR( MPI_Comm_compare(             # <<<<<<<<<<<<<<
 *             comm1.ob_mpi, comm2.ob_mpi, &flag) )
 *         return flag
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":110
 *         cdef int flag = MPI_UNEQUAL
 *         with nogil: CHKERR( MPI_Comm_compare(
 *             comm1.ob_mpi, comm2.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return flag
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_compare(__pyx_v_comm1->ob_mpi, __pyx_v_comm2->ob_mpi, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 109, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":109
 *         """
 *         cdef int flag = MPI_UNEQUAL
 *         with nogil: CHKERR( MPI_Comm_compare(             # <<<<<<<<<<<<<<
 *             comm1.ob_mpi, comm2.ob_mpi, &flag) )
 *         return flag
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":111
 *         with nogil: CHKERR( MPI_Comm_compare(
 *             comm1.ob_mpi, comm2.ob_mpi, &flag) )
 *         return flag             # <<<<<<<<<<<<<<
 * 
 *     # Communicator Constructors
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":104
 * 
 *     @classmethod
 *     def Compare(cls, Comm comm1, Comm comm2):             # <<<<<<<<<<<<<<
 *         """
 *         Compare two communicators
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Compare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":116
 *     # -------------------------
 * 
 *     def Clone(self):             # <<<<<<<<<<<<<<
 *         """
 *         Clone an existing communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_17Clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_16Clone[] = "Comm.Clone(self)\n\n        Clone an existing communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_17Clone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Clone (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Clone", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Clone", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_16Clone(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_16Clone(struct PyMPICommObject *__pyx_v_self) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Clone", 0);

  /* "mpi4py/MPI/Comm.pyx":120
 *         Clone an existing communicator
 *         """
 *         cdef type comm_type = type(self)             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup(self.ob_mpi, &comm.ob_mpi) )
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_comm_type = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));

  /* "mpi4py/MPI/Comm.pyx":121
 *         """
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_dup(self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":122
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup(self.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_dup(__pyx_v_self->ob_mpi, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 122, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":123
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup(self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 123, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":124
 *         with nogil: CHKERR( MPI_Comm_dup(self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Dup(self, Info info=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":116
 *     # -------------------------
 * 
 *     def Clone(self):             # <<<<<<<<<<<<<<
 *         """
 *         Clone an existing communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Clone", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":126
 *         return comm
 * 
 *     def Dup(self, Info info=None):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate an existing communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_19Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_18Dup[] = "Comm.Dup(self, Info info=None)\n\n        Duplicate an existing communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_19Dup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dup (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIInfoObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Dup") < 0)) __PYX_ERR(7, 126, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Dup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 126, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Dup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 1, "info", 0))) __PYX_ERR(7, 126, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_18Dup(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_18Dup(struct PyMPICommObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info) {
  MPI_Info __pyx_v_cinfo;
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Dup", 0);

  /* "mpi4py/MPI/Comm.pyx":130
 *         Duplicate an existing communicator
 *         """
 *         cdef MPI_Info cinfo = arg_Info(info)             # <<<<<<<<<<<<<<
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 */
  __pyx_v_cinfo = __pyx_f_6mpi4py_3MPI_arg_Info(((PyObject *)__pyx_v_info));

  /* "mpi4py/MPI/Comm.pyx":131
 *         """
 *         cdef MPI_Info cinfo = arg_Info(info)
 *         cdef type comm_type = type(self)             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         if info is None:
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_comm_type = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));

  /* "mpi4py/MPI/Comm.pyx":132
 *         cdef MPI_Info cinfo = arg_Info(info)
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         if info is None:
 *             with nogil: CHKERR( MPI_Comm_dup(
 */
  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":133
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         if info is None:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Comm_dup(
 *                 self.ob_mpi, &comm.ob_mpi) )
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_info) == Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/Comm.pyx":134
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         if info is None:
 *             with nogil: CHKERR( MPI_Comm_dup(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, &comm.ob_mpi) )
 *         else:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Comm.pyx":135
 *         if info is None:
 *             with nogil: CHKERR( MPI_Comm_dup(
 *                 self.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         else:
 *             with nogil: CHKERR( MPI_Comm_dup_with_info(
 */
          __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_dup(__pyx_v_self->ob_mpi, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 134, __pyx_L5_error)
        }

        /* "mpi4py/MPI/Comm.pyx":134
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         if info is None:
 *             with nogil: CHKERR( MPI_Comm_dup(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, &comm.ob_mpi) )
 *         else:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L6;
          }
          __pyx_L5_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L1_error;
          }
          __pyx_L6:;
        }
    }

    /* "mpi4py/MPI/Comm.pyx":133
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         if info is None:             # <<<<<<<<<<<<<<
 *             with nogil: CHKERR( MPI_Comm_dup(
 *                 self.ob_mpi, &comm.ob_mpi) )
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Comm.pyx":137
 *                 self.ob_mpi, &comm.ob_mpi) )
 *         else:
 *             with nogil: CHKERR( MPI_Comm_dup_with_info(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, cinfo, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  /*else*/ {
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "mpi4py/MPI/Comm.pyx":138
 *         else:
 *             with nogil: CHKERR( MPI_Comm_dup_with_info(
 *                 self.ob_mpi, cinfo, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
          __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_dup_with_info(__pyx_v_self->ob_mpi, __pyx_v_cinfo, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 137, __pyx_L8_error)
        }

        /* "mpi4py/MPI/Comm.pyx":137
 *                 self.ob_mpi, &comm.ob_mpi) )
 *         else:
 *             with nogil: CHKERR( MPI_Comm_dup_with_info(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, cinfo, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L9;
          }
          __pyx_L8_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L1_error;
          }
          __pyx_L9:;
        }
    }
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Comm.pyx":139
 *             with nogil: CHKERR( MPI_Comm_dup_with_info(
 *                 self.ob_mpi, cinfo, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 139, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":140
 *                 self.ob_mpi, cinfo, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Dup_with_info(self, Info info):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":126
 *         return comm
 * 
 *     def Dup(self, Info info=None):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate an existing communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Dup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":142
 *         return comm
 * 
 *     def Dup_with_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate an existing communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_21Dup_with_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_20Dup_with_info[] = "Comm.Dup_with_info(self, Info info)\n\n        Duplicate an existing communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_21Dup_with_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dup_with_info (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Dup_with_info") < 0)) __PYX_ERR(7, 142, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Dup_with_info", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 142, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Dup_with_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 142, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_20Dup_with_info(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_20Dup_with_info(struct PyMPICommObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Dup_with_info", 0);

  /* "mpi4py/MPI/Comm.pyx":146
 *         Duplicate an existing communicator
 *         """
 *         cdef type comm_type = type(self)             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup_with_info(
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_comm_type = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));

  /* "mpi4py/MPI/Comm.pyx":147
 *         """
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_dup_with_info(
 *             self.ob_mpi, info.ob_mpi, &comm.ob_mpi) )
 */
  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":148
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup_with_info(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":149
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup_with_info(
 *             self.ob_mpi, info.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_dup_with_info(__pyx_v_self->ob_mpi, __pyx_v_info->ob_mpi, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 148, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":148
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_dup_with_info(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":150
 *         with nogil: CHKERR( MPI_Comm_dup_with_info(
 *             self.ob_mpi, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 150, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":151
 *             self.ob_mpi, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Idup(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":142
 *         return comm
 * 
 *     def Dup_with_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Duplicate an existing communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Dup_with_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":153
 *         return comm
 * 
 *     def Idup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking duplicate an existing communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_23Idup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_22Idup[] = "Comm.Idup(self)\n\n        Nonblocking duplicate an existing communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_23Idup(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Idup (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Idup", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Idup", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_22Idup(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_22Idup(struct PyMPICommObject *__pyx_v_self) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Idup", 0);

  /* "mpi4py/MPI/Comm.pyx":157
 *         Nonblocking duplicate an existing communicator
 *         """
 *         cdef type comm_type = type(self)             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
  __pyx_v_comm_type = ((PyTypeObject*)((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));

  /* "mpi4py/MPI/Comm.pyx":158
 *         """
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Comm_idup(
 */
  __pyx_t_1 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":159
 *         cdef type comm_type = type(self)
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_idup(
 *             self.ob_mpi, &comm.ob_mpi, &request.ob_mpi) )
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 159, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_1 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":160
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Comm_idup(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &comm.ob_mpi, &request.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":161
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Comm_idup(
 *             self.ob_mpi, &comm.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return (comm, request)
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_idup(__pyx_v_self->ob_mpi, (&__pyx_v_comm->ob_mpi), (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 160, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":160
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Comm_idup(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &comm.ob_mpi, &request.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":162
 *         with nogil: CHKERR( MPI_Comm_idup(
 *             self.ob_mpi, &comm.ob_mpi, &request.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return (comm, request)
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 162, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":163
 *             self.ob_mpi, &comm.ob_mpi, &request.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return (comm, request)             # <<<<<<<<<<<<<<
 * 
 *     def Create(self, Group group):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_comm));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_comm));
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_request));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_request));
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":153
 *         return comm
 * 
 *     def Idup(self):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking duplicate an existing communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Idup", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":165
 *         return (comm, request)
 * 
 *     def Create(self, Group group):             # <<<<<<<<<<<<<<
 *         """
 *         Create communicator from group
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_25Create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_24Create[] = "Comm.Create(self, Group group)\n\n        Create communicator from group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_25Create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create") < 0)) __PYX_ERR(7, 165, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_group = ((struct PyMPIGroupObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 165, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group", 0))) __PYX_ERR(7, 165, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_24Create(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_group);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_24Create(struct PyMPICommObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Create", 0);

  /* "mpi4py/MPI/Comm.pyx":169
 *         Create communicator from group
 *         """
 *         cdef type comm_type = Comm             # <<<<<<<<<<<<<<
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 */
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm));
  __pyx_v_comm_type = __pyx_ptype_6mpi4py_3MPI_Comm;

  /* "mpi4py/MPI/Comm.pyx":170
 *         """
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm             # <<<<<<<<<<<<<<
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intracomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intracomm);
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Comm.pyx":171
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create(
 */
  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intercomm); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intercomm);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Comm.pyx":172
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_create(
 *             self.ob_mpi, group.ob_mpi, &comm.ob_mpi) )
 */
  if (unlikely(((PyObject *)__pyx_v_comm_type) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
    __PYX_ERR(7, 172, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":173
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, group.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":174
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create(
 *             self.ob_mpi, group.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_create(__pyx_v_self->ob_mpi, __pyx_v_group->ob_mpi, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 173, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Comm.pyx":173
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, group.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":175
 *         with nogil: CHKERR( MPI_Comm_create(
 *             self.ob_mpi, group.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 175, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":176
 *             self.ob_mpi, group.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Create_group(self, Group group, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":165
 *         return (comm, request)
 * 
 *     def Create(self, Group group):             # <<<<<<<<<<<<<<
 *         """
 *         Create communicator from group
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":178
 *         return comm
 * 
 *     def Create_group(self, Group group, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Create communicator from group
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_27Create_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_26Create_group[] = "Comm.Create_group(self, Group group, int tag=0)\n\n        Create communicator from group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_27Create_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_group (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_tag,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_group") < 0)) __PYX_ERR(7, 178, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_group = ((struct PyMPIGroupObject *)values[0]);
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 178, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_group", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 178, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Create_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group", 0))) __PYX_ERR(7, 178, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_26Create_group(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_group, __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_26Create_group(struct PyMPICommObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group, int __pyx_v_tag) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Create_group", 0);

  /* "mpi4py/MPI/Comm.pyx":182
 *         Create communicator from group
 *         """
 *         cdef type comm_type = Comm             # <<<<<<<<<<<<<<
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 */
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm));
  __pyx_v_comm_type = __pyx_ptype_6mpi4py_3MPI_Comm;

  /* "mpi4py/MPI/Comm.pyx":183
 *         """
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm             # <<<<<<<<<<<<<<
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intracomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intracomm);
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Comm.pyx":184
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create_group(
 */
  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intercomm); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intercomm);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Comm.pyx":185
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_create_group(
 *             self.ob_mpi, group.ob_mpi, tag, &comm.ob_mpi) )
 */
  if (unlikely(((PyObject *)__pyx_v_comm_type) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
    __PYX_ERR(7, 185, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":186
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create_group(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, group.ob_mpi, tag, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":187
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create_group(
 *             self.ob_mpi, group.ob_mpi, tag, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_create_group(__pyx_v_self->ob_mpi, __pyx_v_group->ob_mpi, __pyx_v_tag, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 186, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Comm.pyx":186
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_create_group(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, group.ob_mpi, tag, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":188
 *         with nogil: CHKERR( MPI_Comm_create_group(
 *             self.ob_mpi, group.ob_mpi, tag, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 188, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":189
 *             self.ob_mpi, group.ob_mpi, tag, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Split(self, int color=0, int key=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":178
 *         return comm
 * 
 *     def Create_group(self, Group group, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Create communicator from group
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Create_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":191
 *         return comm
 * 
 *     def Split(self, int color=0, int key=0):             # <<<<<<<<<<<<<<
 *         """
 *         Split communicator by color and key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_29Split(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_28Split[] = "Comm.Split(self, int color=0, int key=0)\n\n        Split communicator by color and key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_29Split(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_color;
  int __pyx_v_key;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Split (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_color,&__pyx_n_s_key,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_color);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Split") < 0)) __PYX_ERR(7, 191, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_color = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_color == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 191, __pyx_L3_error)
    } else {
      __pyx_v_color = ((int)0);
    }
    if (values[1]) {
      __pyx_v_key = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_key == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 191, __pyx_L3_error)
    } else {
      __pyx_v_key = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Split", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 191, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Split", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_28Split(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_color, __pyx_v_key);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_28Split(struct PyMPICommObject *__pyx_v_self, int __pyx_v_color, int __pyx_v_key) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Split", 0);

  /* "mpi4py/MPI/Comm.pyx":195
 *         Split communicator by color and key
 *         """
 *         cdef type comm_type = Comm             # <<<<<<<<<<<<<<
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 */
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm));
  __pyx_v_comm_type = __pyx_ptype_6mpi4py_3MPI_Comm;

  /* "mpi4py/MPI/Comm.pyx":196
 *         """
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm             # <<<<<<<<<<<<<<
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intracomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intracomm);
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Comm.pyx":197
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split(
 */
  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intercomm); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intercomm);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Comm.pyx":198
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_split(
 *             self.ob_mpi, color, key, &comm.ob_mpi) )
 */
  if (unlikely(((PyObject *)__pyx_v_comm_type) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
    __PYX_ERR(7, 198, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":199
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, color, key, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":200
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split(
 *             self.ob_mpi, color, key, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_split(__pyx_v_self->ob_mpi, __pyx_v_color, __pyx_v_key, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 199, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Comm.pyx":199
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, color, key, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":201
 *         with nogil: CHKERR( MPI_Comm_split(
 *             self.ob_mpi, color, key, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 201, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":202
 *             self.ob_mpi, color, key, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Split_type(self, int split_type, int key=0,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":191
 *         return comm
 * 
 *     def Split(self, int color=0, int key=0):             # <<<<<<<<<<<<<<
 *         """
 *         Split communicator by color and key
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Split", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":204
 *         return comm
 * 
 *     def Split_type(self, int split_type, int key=0,             # <<<<<<<<<<<<<<
 *                    Info info=INFO_NULL):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_31Split_type(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_30Split_type[] = "Comm.Split_type(self, int split_type, int key=0, Info info=INFO_NULL)\n\n        Split communicator by color and key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_31Split_type(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_split_type;
  int __pyx_v_key;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Split_type (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_split_type,&__pyx_n_s_key,&__pyx_n_s_info,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__38;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_split_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_key);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Split_type") < 0)) __PYX_ERR(7, 204, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_split_type = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_split_type == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 204, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_key = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_key == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 204, __pyx_L3_error)
    } else {
      __pyx_v_key = ((int)0);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Split_type", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 204, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Split_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 205, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_30Split_type(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_split_type, __pyx_v_key, __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_30Split_type(struct PyMPICommObject *__pyx_v_self, int __pyx_v_split_type, int __pyx_v_key, struct PyMPIInfoObject *__pyx_v_info) {
  PyTypeObject *__pyx_v_comm_type = 0;
  struct PyMPICommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Split_type", 0);

  /* "mpi4py/MPI/Comm.pyx":209
 *         Split communicator by color and key
 *         """
 *         cdef type comm_type = Comm             # <<<<<<<<<<<<<<
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 */
  __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm));
  __pyx_v_comm_type = __pyx_ptype_6mpi4py_3MPI_Comm;

  /* "mpi4py/MPI/Comm.pyx":210
 *         """
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm             # <<<<<<<<<<<<<<
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intracomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intracomm);
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Comm.pyx":211
 *         cdef type comm_type = Comm
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm             # <<<<<<<<<<<<<<
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split_type(
 */
  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Intercomm); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __Pyx_INCREF(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm));
    __Pyx_DECREF_SET(__pyx_v_comm_type, __pyx_ptype_6mpi4py_3MPI_Intercomm);
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Comm.pyx":212
 *         if   isinstance(self, Intracomm): comm_type = Intracomm
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_split_type(
 *             self.ob_mpi, split_type, key, info.ob_mpi, &comm.ob_mpi) )
 */
  if (unlikely(((PyObject *)__pyx_v_comm_type) == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object.__new__(X): X is not a type object (NoneType)");
    __PYX_ERR(7, 212, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_tp_new(((PyObject *)__pyx_v_comm_type), __pyx_empty_tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPICommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":213
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split_type(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, split_type, key, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":214
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split_type(
 *             self.ob_mpi, split_type, key, info.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_split_type(__pyx_v_self->ob_mpi, __pyx_v_split_type, __pyx_v_key, __pyx_v_info->ob_mpi, (&__pyx_v_comm->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 213, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Comm.pyx":213
 *         elif isinstance(self, Intercomm): comm_type = Intercomm
 *         cdef Comm comm = <Comm>comm_type.__new__(comm_type)
 *         with nogil: CHKERR( MPI_Comm_split_type(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, split_type, key, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":215
 *         with nogil: CHKERR( MPI_Comm_split_type(
 *             self.ob_mpi, split_type, key, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 215, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":216
 *             self.ob_mpi, split_type, key, info.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     # Communicator Destructor
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":204
 *         return comm
 * 
 *     def Split_type(self, int split_type, int key=0,             # <<<<<<<<<<<<<<
 *                    Info info=INFO_NULL):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Split_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_comm_type);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":221
 *     # -----------------------
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_33Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_32Free[] = "Comm.Free(self)\n\n        Free a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_33Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_32Free(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_32Free(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Comm.pyx":225
 *         Free a communicator
 *         """
 *         with nogil: CHKERR( MPI_Comm_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         if self is __COMM_SELF__:  self.ob_mpi = MPI_COMM_SELF
 *         if self is __COMM_WORLD__: self.ob_mpi = MPI_COMM_WORLD
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 225, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":226
 *         """
 *         with nogil: CHKERR( MPI_Comm_free(&self.ob_mpi) )
 *         if self is __COMM_SELF__:  self.ob_mpi = MPI_COMM_SELF             # <<<<<<<<<<<<<<
 *         if self is __COMM_WORLD__: self.ob_mpi = MPI_COMM_WORLD
 * 
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_self) == ((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_SELF__));
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __pyx_v_self->ob_mpi = MPI_COMM_SELF;
  }

  /* "mpi4py/MPI/Comm.pyx":227
 *         with nogil: CHKERR( MPI_Comm_free(&self.ob_mpi) )
 *         if self is __COMM_SELF__:  self.ob_mpi = MPI_COMM_SELF
 *         if self is __COMM_WORLD__: self.ob_mpi = MPI_COMM_WORLD             # <<<<<<<<<<<<<<
 * 
 *     # Communicator Info
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_self) == ((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_WORLD__));
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_v_self->ob_mpi = MPI_COMM_WORLD;
  }

  /* "mpi4py/MPI/Comm.pyx":221
 *     # -----------------------
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a communicator
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":232
 *     # -----------------
 * 
 *     def Set_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Set new values for the hints
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_35Set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_34Set_info[] = "Comm.Set_info(self, Info info)\n\n        Set new values for the hints\n        associated with a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_35Set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_info (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_info") < 0)) __PYX_ERR(7, 232, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_info", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 232, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 232, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_34Set_info(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_34Set_info(struct PyMPICommObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_info", 0);

  /* "mpi4py/MPI/Comm.pyx":237
 *         associated with a communicator
 *         """
 *         with nogil: CHKERR( MPI_Comm_set_info(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, info.ob_mpi) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":238
 *         """
 *         with nogil: CHKERR( MPI_Comm_set_info(
 *             self.ob_mpi, info.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_info(self):
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_info(__pyx_v_self->ob_mpi, __pyx_v_info->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 237, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":237
 *         associated with a communicator
 *         """
 *         with nogil: CHKERR( MPI_Comm_set_info(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, info.ob_mpi) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":232
 *     # -----------------
 * 
 *     def Set_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Set new values for the hints
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":240
 *             self.ob_mpi, info.ob_mpi) )
 * 
 *     def Get_info(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the hints for a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_37Get_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_36Get_info[] = "Comm.Get_info(self)\n\n        Return the hints for a communicator\n        that are currently in use\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_37Get_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_info (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_info", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_info", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_36Get_info(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_36Get_info(struct PyMPICommObject *__pyx_v_self) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_info", 0);

  /* "mpi4py/MPI/Comm.pyx":245
 *         that are currently in use
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_get_info(
 *             self.ob_mpi, &info.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 245, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":246
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_Comm_get_info(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &info.ob_mpi) )
 *         return info
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":247
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_Comm_get_info(
 *             self.ob_mpi, &info.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return info
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_get_info(__pyx_v_self->ob_mpi, (&__pyx_v_info->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 246, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":246
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_Comm_get_info(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &info.ob_mpi) )
 *         return info
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":248
 *         with nogil: CHKERR( MPI_Comm_get_info(
 *             self.ob_mpi, &info.ob_mpi) )
 *         return info             # <<<<<<<<<<<<<<
 * 
 *     property info:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = ((PyObject *)__pyx_v_info);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":240
 *             self.ob_mpi, info.ob_mpi) )
 * 
 *     def Get_info(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the hints for a communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":252
 *     property info:
 *         """communicator info"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_info()
 *         def __set__(self, info):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4info_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4info_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4info___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4info___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":253
 *         """communicator info"""
 *         def __get__(self):
 *             return self.Get_info()             # <<<<<<<<<<<<<<
 *         def __set__(self, info):
 *             self.Set_info(info)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":252
 *     property info:
 *         """communicator info"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_info()
 *         def __set__(self, info):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.info.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":254
 *         def __get__(self):
 *             return self.Get_info()
 *         def __set__(self, info):             # <<<<<<<<<<<<<<
 *             self.Set_info(info)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Comm_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_info); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Comm_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4info_2__set__(((struct PyMPICommObject *)__pyx_v_self), ((PyObject *)__pyx_v_info));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Comm_4info_2__set__(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Comm.pyx":255
 *             return self.Get_info()
 *         def __set__(self, info):
 *             self.Set_info(info)             # <<<<<<<<<<<<<<
 * 
 *     # Point to Point communication
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_info) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_info);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":254
 *         def __get__(self):
 *             return self.Get_info()
 *         def __set__(self, info):             # <<<<<<<<<<<<<<
 *             self.Set_info(info)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.info.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":263
 *     # ------------------------------------
 * 
 *     def Send(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_39Send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_38Send[] = "Comm.Send(self, buf, int dest, int tag=0)\n\n        Blocking send\n\n        .. note:: This function may block until the message is\n           received. Whether or not `Send` blocks depends on\n           several factors and is implementation dependent\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_39Send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Send (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Send", 0, 2, 3, 1); __PYX_ERR(7, 263, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Send") < 0)) __PYX_ERR(7, 263, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 263, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 263, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Send", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 263, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_38Send(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_38Send(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Send", 0);

  /* "mpi4py/MPI/Comm.pyx":271
 *            several factors and is implementation dependent
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Send(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":272
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Send(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":274
 *         with nogil: CHKERR( MPI_Send(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Send(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 272, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":272
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Send(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":263
 *     # ------------------------------------
 * 
 *     def Send(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":276
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_41Recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_40Recv[] = "Comm.Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Blocking receive\n\n        .. note:: This function blocks until the message is received\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_41Recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Recv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Comm.pyx":277
 * 
 *     def Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG,
 *              Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking receive
 */
    values[3] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Recv") < 0)) __PYX_ERR(7, 276, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 276, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__39;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 276, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__40;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Recv", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 276, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 277, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_40Recv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":276
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_40Recv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Recv", 0);

  /* "mpi4py/MPI/Comm.pyx":283
 *         .. note:: This function blocks until the message is received
 *         """
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Recv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_buf, __pyx_v_source)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":284
 *         """
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Recv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":285
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Recv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, statusp) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":287
 *         with nogil: CHKERR( MPI_Recv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     # Send-Receive
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Recv(__pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, __pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 285, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":285
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Recv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, statusp) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":276
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":292
 *     # ------------
 * 
 *     def Sendrecv(self, sendbuf, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_43Sendrecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_42Sendrecv[] = "Comm.Sendrecv(self, sendbuf, int dest, int sendtag=0, recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG, Status status=None)\n\n        Send and receive a message\n\n        .. note:: This function is guaranteed not to deadlock in\n           situations where pairs of blocking sends and receives may\n           deadlock.\n\n        .. caution:: A common mistake when using this function is to\n           mismatch the tags with the source and destination ranks,\n           which can result in deadlock.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_43Sendrecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  int __pyx_v_dest;
  int __pyx_v_sendtag;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_source;
  int __pyx_v_recvtag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sendrecv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_dest,&__pyx_n_s_sendtag,&__pyx_n_s_recvbuf,&__pyx_n_s_source,&__pyx_n_s_recvtag,&__pyx_n_s_status,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};

    /* "mpi4py/MPI/Comm.pyx":293
 * 
 *     def Sendrecv(self, sendbuf, int dest, int sendtag=0,
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                  Status status=None):
 *         """
 */
    values[3] = ((PyObject *)Py_None);

    /* "mpi4py/MPI/Comm.pyx":294
 *     def Sendrecv(self, sendbuf, int dest, int sendtag=0,
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Send and receive a message
 */
    values[6] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Sendrecv", 0, 2, 7, 1); __PYX_ERR(7, 292, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendtag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvtag);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Sendrecv") < 0)) __PYX_ERR(7, 292, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_sendtag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sendtag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L3_error)
    } else {
      __pyx_v_sendtag = ((int)0);
    }
    __pyx_v_recvbuf = values[3];
    if (values[4]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 293, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__41;
    }
    if (values[5]) {
      __pyx_v_recvtag = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_recvtag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 293, __pyx_L3_error)
    } else {
      __pyx_v_recvtag = __pyx_k__42;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[6]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Sendrecv", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 292, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Sendrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 294, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_42Sendrecv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_recvbuf, __pyx_v_source, __pyx_v_recvtag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":292
 *     # ------------
 * 
 *     def Sendrecv(self, sendbuf, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_42Sendrecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, int __pyx_v_dest, int __pyx_v_sendtag, PyObject *__pyx_v_recvbuf, int __pyx_v_source, int __pyx_v_recvtag, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Sendrecv", 0);

  /* "mpi4py/MPI/Comm.pyx":306
 *            which can result in deadlock.
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(sendbuf, dest)             # <<<<<<<<<<<<<<
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(recvbuf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_sendbuf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":307
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(sendbuf, dest)
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(recvbuf, source)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Sendrecv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_recvbuf, __pyx_v_source)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":308
 *         cdef _p_msg_p2p smsg = message_p2p_send(sendbuf, dest)
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(recvbuf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Sendrecv(
 *             smsg.buf, smsg.count, smsg.dtype, dest,   sendtag,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":309
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(recvbuf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Sendrecv(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype, dest,   sendtag,
 *             rmsg.buf, rmsg.count, rmsg.dtype, source, recvtag,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":312
 *             smsg.buf, smsg.count, smsg.dtype, dest,   sendtag,
 *             rmsg.buf, rmsg.count, rmsg.dtype, source, recvtag,
 *             self.ob_mpi, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Sendrecv_replace(self, buf, int dest, int sendtag=0,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Sendrecv(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, __pyx_v_source, __pyx_v_recvtag, __pyx_v_self->ob_mpi, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 309, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":309
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(recvbuf, source)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Sendrecv(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype, dest,   sendtag,
 *             rmsg.buf, rmsg.count, rmsg.dtype, source, recvtag,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":292
 *     # ------------
 * 
 *     def Sendrecv(self, sendbuf, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Sendrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":314
 *             self.ob_mpi, statusp) )
 * 
 *     def Sendrecv_replace(self, buf, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                          int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                          Status status=None):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_45Sendrecv_replace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_44Sendrecv_replace[] = "Comm.Sendrecv_replace(self, buf, int dest, int sendtag=0, int source=ANY_SOURCE, int recvtag=ANY_TAG, Status status=None)\n\n        Send and receive a message\n\n        .. note:: This function is guaranteed not to deadlock in\n           situations where pairs of blocking sends and receives may\n           deadlock.\n\n        .. caution:: A common mistake when using this function is to\n           mismatch the tags with the source and destination ranks,\n           which can result in deadlock.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_45Sendrecv_replace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_sendtag;
  int __pyx_v_source;
  int __pyx_v_recvtag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sendrecv_replace (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_sendtag,&__pyx_n_s_source,&__pyx_n_s_recvtag,&__pyx_n_s_status,0};
    PyObject* values[6] = {0,0,0,0,0,0};

    /* "mpi4py/MPI/Comm.pyx":316
 *     def Sendrecv_replace(self, buf, int dest, int sendtag=0,
 *                          int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                          Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Send and receive a message
 */
    values[5] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Sendrecv_replace", 0, 2, 6, 1); __PYX_ERR(7, 314, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendtag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvtag);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Sendrecv_replace") < 0)) __PYX_ERR(7, 314, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 314, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_sendtag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sendtag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 314, __pyx_L3_error)
    } else {
      __pyx_v_sendtag = ((int)0);
    }
    if (values[3]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 315, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__43;
    }
    if (values[4]) {
      __pyx_v_recvtag = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_recvtag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 315, __pyx_L3_error)
    } else {
      __pyx_v_recvtag = __pyx_k__44;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[5]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Sendrecv_replace", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 314, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Sendrecv_replace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 316, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_44Sendrecv_replace(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_source, __pyx_v_recvtag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":314
 *             self.ob_mpi, statusp) )
 * 
 *     def Sendrecv_replace(self, buf, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                          int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                          Status status=None):
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_44Sendrecv_replace(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_sendtag, int __pyx_v_source, int __pyx_v_recvtag, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_rank;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Sendrecv_replace", 0);

  /* "mpi4py/MPI/Comm.pyx":328
 *            which can result in deadlock.
 *         """
 *         cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         if dest   != MPI_PROC_NULL: rank = dest
 *         if source != MPI_PROC_NULL: rank = source
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/Comm.pyx":329
 *         """
 *         cdef int rank = MPI_PROC_NULL
 *         if dest   != MPI_PROC_NULL: rank = dest             # <<<<<<<<<<<<<<
 *         if source != MPI_PROC_NULL: rank = source
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, rank)
 */
  __pyx_t_1 = ((__pyx_v_dest != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_v_rank = __pyx_v_dest;
  }

  /* "mpi4py/MPI/Comm.pyx":330
 *         cdef int rank = MPI_PROC_NULL
 *         if dest   != MPI_PROC_NULL: rank = dest
 *         if source != MPI_PROC_NULL: rank = source             # <<<<<<<<<<<<<<
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, rank)
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_t_1 = ((__pyx_v_source != MPI_PROC_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_v_rank = __pyx_v_source;
  }

  /* "mpi4py/MPI/Comm.pyx":331
 *         if dest   != MPI_PROC_NULL: rank = dest
 *         if source != MPI_PROC_NULL: rank = source
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, rank)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Sendrecv_replace(
 */
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_buf, __pyx_v_rank)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":332
 *         if source != MPI_PROC_NULL: rank = source
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, rank)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Sendrecv_replace(
 *                 rmsg.buf, rmsg.count, rmsg.dtype,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":333
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, rank)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Sendrecv_replace(             # <<<<<<<<<<<<<<
 *                 rmsg.buf, rmsg.count, rmsg.dtype,
 *                 dest, sendtag, source, recvtag,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":336
 *                 rmsg.buf, rmsg.count, rmsg.dtype,
 *                 dest, sendtag, source, recvtag,
 *                 self.ob_mpi, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     # Nonblocking Communications
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Sendrecv_replace(__pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_source, __pyx_v_recvtag, __pyx_v_self->ob_mpi, __pyx_v_statusp)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 333, __pyx_L6_error)
      }

      /* "mpi4py/MPI/Comm.pyx":333
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, rank)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Sendrecv_replace(             # <<<<<<<<<<<<<<
 *                 rmsg.buf, rmsg.count, rmsg.dtype,
 *                 dest, sendtag, source, recvtag,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":314
 *             self.ob_mpi, statusp) )
 * 
 *     def Sendrecv_replace(self, buf, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                          int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                          Status status=None):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Sendrecv_replace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":341
 *     # --------------------------
 * 
 *     def Isend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_47Isend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_46Isend[] = "Comm.Isend(self, buf, int dest, int tag=0)\n\n        Nonblocking send\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_47Isend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Isend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Isend", 0, 2, 3, 1); __PYX_ERR(7, 341, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Isend") < 0)) __PYX_ERR(7, 341, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 341, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 341, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Isend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 341, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Isend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_46Isend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_46Isend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Isend", 0);

  /* "mpi4py/MPI/Comm.pyx":345
 *         Nonblocking send
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Isend(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":346
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Isend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 346, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":347
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Isend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":349
 *         with nogil: CHKERR( MPI_Isend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Isend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 347, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":347
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Isend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":350
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":351
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Irecv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":341
 *     # --------------------------
 * 
 *     def Isend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Isend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":353
 *         return request
 * 
 *     def Irecv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking receive
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_49Irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_48Irecv[] = "Comm.Irecv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG)\n\n        Nonblocking receive\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_49Irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Irecv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_source,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Irecv") < 0)) __PYX_ERR(7, 353, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 353, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__45;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 353, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__46;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Irecv", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 353, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_48Irecv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_source, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_48Irecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Irecv", 0);

  /* "mpi4py/MPI/Comm.pyx":357
 *         Nonblocking receive
 *         """
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Irecv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_buf, __pyx_v_source)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":358
 *         """
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Irecv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 358, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":359
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Irecv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":361
 *         with nogil: CHKERR( MPI_Irecv(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = rmsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Irecv(__pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, __pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 359, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":359
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Irecv(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":362
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = rmsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_rmsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_rmsg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_rmsg);

  /* "mpi4py/MPI/Comm.pyx":363
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = rmsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Probe
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":353
 *         return request
 * 
 *     def Irecv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking receive
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":368
 *     # -----
 * 
 *     def Probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_51Probe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_50Probe[] = "Comm.Probe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Blocking test for a message\n\n        .. note:: This function blocks until the message arrives.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_51Probe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Probe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":369
 * 
 *     def Probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *               Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking test for a message
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Probe") < 0)) __PYX_ERR(7, 368, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 368, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__47;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 368, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__48;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Probe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 368, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 369, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_50Probe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":368
 *     # -----
 * 
 *     def Probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_50Probe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Probe", 0);

  /* "mpi4py/MPI/Comm.pyx":375
 *         .. note:: This function blocks until the message arrives.
 *         """
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Probe(
 *             source, tag, self.ob_mpi, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":376
 *         """
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Probe(             # <<<<<<<<<<<<<<
 *             source, tag, self.ob_mpi, statusp) )
 *         return True
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":377
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Probe(
 *             source, tag, self.ob_mpi, statusp) )             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Probe(__pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 376, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":376
 *         """
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Probe(             # <<<<<<<<<<<<<<
 *             source, tag, self.ob_mpi, statusp) )
 *         return True
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":378
 *         with nogil: CHKERR( MPI_Probe(
 *             source, tag, self.ob_mpi, statusp) )
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     def Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":368
 *     # -----
 * 
 *     def Probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":380
 *         return True
 * 
 *     def Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_53Iprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_52Iprobe[] = "Comm.Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Nonblocking test for a message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_53Iprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iprobe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":381
 * 
 *     def Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *                Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking test for a message
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iprobe") < 0)) __PYX_ERR(7, 380, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 380, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__49;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 380, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__50;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iprobe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 380, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 381, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_52Iprobe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":380
 *         return True
 * 
 *     def Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_52Iprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Iprobe", 0);

  /* "mpi4py/MPI/Comm.pyx":385
 *         Nonblocking test for a message
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Iprobe(
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Comm.pyx":386
 *         """
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iprobe(
 *             source, tag, self.ob_mpi, &flag, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":387
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Iprobe(             # <<<<<<<<<<<<<<
 *             source, tag, self.ob_mpi, &flag, statusp) )
 *         return <bint>flag
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":388
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Iprobe(
 *             source, tag, self.ob_mpi, &flag, statusp) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_flag), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 387, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":387
 *         cdef int flag = 0
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Iprobe(             # <<<<<<<<<<<<<<
 *             source, tag, self.ob_mpi, &flag, statusp) )
 *         return <bint>flag
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":389
 *         with nogil: CHKERR( MPI_Iprobe(
 *             source, tag, self.ob_mpi, &flag, statusp) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     # Matching Probe
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":380
 *         return True
 * 
 *     def Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":394
 *     # --------------
 * 
 *     def Mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_55Mprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_54Mprobe[] = "Comm.Mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Blocking test for a matched message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_55Mprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Mprobe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":395
 * 
 *     def Mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *                Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking test for a matched message
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Mprobe") < 0)) __PYX_ERR(7, 394, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 394, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__51;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 394, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__52;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Mprobe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 394, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Mprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 395, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_54Mprobe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":394
 *     # --------------
 * 
 *     def Mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_54Mprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Message __pyx_v_cmessage;
  MPI_Status *__pyx_v_statusp;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Mprobe", 0);

  /* "mpi4py/MPI/Comm.pyx":399
 *         Blocking test for a matched message
 *         """
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(
 */
  __pyx_v_cmessage = MPI_MESSAGE_NULL;

  /* "mpi4py/MPI/Comm.pyx":400
 *         """
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Mprobe(
 *             source, tag, self.ob_mpi, &cmessage, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":401
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(             # <<<<<<<<<<<<<<
 *             source, tag, self.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(Message)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":402
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(
 *             source, tag, self.ob_mpi, &cmessage, statusp) )             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = cmessage
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Mprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_cmessage), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 401, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":401
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Mprobe(             # <<<<<<<<<<<<<<
 *             source, tag, self.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(Message)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":403
 *         with nogil: CHKERR( MPI_Mprobe(
 *             source, tag, self.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *         message.ob_mpi = cmessage
 *         return message
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 403, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":404
 *             source, tag, self.ob_mpi, &cmessage, statusp) )
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = cmessage             # <<<<<<<<<<<<<<
 *         return message
 * 
 */
  __pyx_v_message->ob_mpi = __pyx_v_cmessage;

  /* "mpi4py/MPI/Comm.pyx":405
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = cmessage
 *         return message             # <<<<<<<<<<<<<<
 * 
 *     def Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":394
 *     # --------------
 * 
 *     def Mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Mprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":407
 *         return message
 * 
 *     def Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_57Improbe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_56Improbe[] = "Comm.Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\n\n        Nonblocking test for a matched message\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_57Improbe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Improbe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":408
 * 
 *     def Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *                 Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking test for a matched message
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Improbe") < 0)) __PYX_ERR(7, 407, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 407, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__53;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 407, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__54;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Improbe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 407, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Improbe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 408, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_56Improbe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":407
 *         return message
 * 
 *     def Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_56Improbe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  MPI_Message __pyx_v_cmessage;
  MPI_Status *__pyx_v_statusp;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Improbe", 0);

  /* "mpi4py/MPI/Comm.pyx":412
 *         Nonblocking test for a matched message
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Comm.pyx":413
 *         """
 *         cdef int flag = 0
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(
 */
  __pyx_v_cmessage = MPI_MESSAGE_NULL;

  /* "mpi4py/MPI/Comm.pyx":414
 *         cdef int flag = 0
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Improbe(
 *              source, tag, self.ob_mpi, &flag, &cmessage, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":415
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(             # <<<<<<<<<<<<<<
 *              source, tag, self.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":416
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(
 *              source, tag, self.ob_mpi, &flag, &cmessage, statusp) )             # <<<<<<<<<<<<<<
 *         if flag == 0: return None
 *         cdef Message message = <Message>Message.__new__(Message)
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Improbe(__pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_flag), (&__pyx_v_cmessage), __pyx_v_statusp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 415, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":415
 *         cdef MPI_Message cmessage = MPI_MESSAGE_NULL
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_Improbe(             # <<<<<<<<<<<<<<
 *              source, tag, self.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":417
 *         with nogil: CHKERR( MPI_Improbe(
 *              source, tag, self.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = cmessage
 */
  __pyx_t_2 = ((__pyx_v_flag == 0) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":418
 *              source, tag, self.ob_mpi, &flag, &cmessage, statusp) )
 *         if flag == 0: return None
 *         cdef Message message = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *         message.ob_mpi = cmessage
 *         return message
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 418, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":419
 *         if flag == 0: return None
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = cmessage             # <<<<<<<<<<<<<<
 *         return message
 * 
 */
  __pyx_v_message->ob_mpi = __pyx_v_cmessage;

  /* "mpi4py/MPI/Comm.pyx":420
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_mpi = cmessage
 *         return message             # <<<<<<<<<<<<<<
 * 
 *     # Persistent Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":407
 *         return message
 * 
 *     def Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Improbe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":425
 *     # ------------------------
 * 
 *     def Send_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Create a persistent request for a standard send
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_59Send_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_58Send_init[] = "Comm.Send_init(self, buf, int dest, int tag=0)\n\n        Create a persistent request for a standard send\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_59Send_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Send_init (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Send_init", 0, 2, 3, 1); __PYX_ERR(7, 425, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Send_init") < 0)) __PYX_ERR(7, 425, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 425, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 425, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Send_init", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 425, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Send_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_58Send_init(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_58Send_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIPrequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Send_init", 0);

  /* "mpi4py/MPI/Comm.pyx":429
 *         Create a persistent request for a standard send
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Send_init(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":430
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Send_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Prequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Prequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 430, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIPrequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":431
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Send_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":433
 *         with nogil: CHKERR( MPI_Send_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Send_init(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 431, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":431
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Send_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":434
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->__pyx_base.ob_buf);
  __Pyx_DECREF(__pyx_v_request->__pyx_base.ob_buf);
  __pyx_v_request->__pyx_base.ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":435
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Recv_init(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":425
 *     # ------------------------
 * 
 *     def Send_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Create a persistent request for a standard send
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Send_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":437
 *         return request
 * 
 *     def Recv_init(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """
 *         Create a persistent request for a receive
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_61Recv_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_60Recv_init[] = "Comm.Recv_init(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG)\n\n        Create a persistent request for a receive\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_61Recv_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Recv_init (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_source,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Recv_init") < 0)) __PYX_ERR(7, 437, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 437, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__55;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 437, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__56;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Recv_init", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 437, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Recv_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_60Recv_init(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_source, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_60Recv_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_rmsg = 0;
  struct PyMPIPrequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Recv_init", 0);

  /* "mpi4py/MPI/Comm.pyx":441
 *         Create a persistent request for a receive
 *         """
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)             # <<<<<<<<<<<<<<
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Recv_init(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_recv(__pyx_v_buf, __pyx_v_source)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rmsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":442
 *         """
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Recv_init(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Prequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Prequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 442, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIPrequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":443
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Recv_init(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":445
 *         with nogil: CHKERR( MPI_Recv_init(
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = rmsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Recv_init(__pyx_v_rmsg->buf, __pyx_v_rmsg->count, __pyx_v_rmsg->dtype, __pyx_v_source, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 443, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":443
 *         cdef _p_msg_p2p rmsg = message_p2p_recv(buf, source)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Recv_init(             # <<<<<<<<<<<<<<
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":446
 *             rmsg.buf, rmsg.count, rmsg.dtype,
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = rmsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_rmsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_rmsg));
  __Pyx_GOTREF(__pyx_v_request->__pyx_base.ob_buf);
  __Pyx_DECREF(__pyx_v_request->__pyx_base.ob_buf);
  __pyx_v_request->__pyx_base.ob_buf = ((PyObject *)__pyx_v_rmsg);

  /* "mpi4py/MPI/Comm.pyx":447
 *             source, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = rmsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Communication Modes
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":437
 *         return request
 * 
 *     def Recv_init(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """
 *         Create a persistent request for a receive
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Recv_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_rmsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":454
 *     # Blocking calls
 * 
 *     def Bsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send in buffered mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_63Bsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_62Bsend[] = "Comm.Bsend(self, buf, int dest, int tag=0)\n\n        Blocking send in buffered mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_63Bsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Bsend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Bsend", 0, 2, 3, 1); __PYX_ERR(7, 454, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Bsend") < 0)) __PYX_ERR(7, 454, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 454, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 454, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Bsend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 454, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Bsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_62Bsend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_62Bsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Bsend", 0);

  /* "mpi4py/MPI/Comm.pyx":458
 *         Blocking send in buffered mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":459
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Bsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":461
 *         with nogil: CHKERR( MPI_Bsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Ssend(self, buf, int dest, int tag=0):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bsend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 459, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":459
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Bsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":454
 *     # Blocking calls
 * 
 *     def Bsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send in buffered mode
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Bsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":463
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Ssend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send in synchronous mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_65Ssend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_64Ssend[] = "Comm.Ssend(self, buf, int dest, int tag=0)\n\n        Blocking send in synchronous mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_65Ssend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ssend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ssend", 0, 2, 3, 1); __PYX_ERR(7, 463, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ssend") < 0)) __PYX_ERR(7, 463, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 463, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 463, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ssend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 463, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ssend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_64Ssend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_64Ssend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Ssend", 0);

  /* "mpi4py/MPI/Comm.pyx":467
 *         Blocking send in synchronous mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ssend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":468
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Ssend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":470
 *         with nogil: CHKERR( MPI_Ssend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Rsend(self, buf, int dest, int tag=0):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ssend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 468, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":468
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Ssend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":463
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Ssend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send in synchronous mode
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ssend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":472
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Rsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send in ready mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_67Rsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_66Rsend[] = "Comm.Rsend(self, buf, int dest, int tag=0)\n\n        Blocking send in ready mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_67Rsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rsend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Rsend", 0, 2, 3, 1); __PYX_ERR(7, 472, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Rsend") < 0)) __PYX_ERR(7, 472, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 472, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 472, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Rsend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 472, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Rsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_66Rsend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_66Rsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Rsend", 0);

  /* "mpi4py/MPI/Comm.pyx":476
 *         Blocking send in ready mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Rsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":477
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Rsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":479
 *         with nogil: CHKERR( MPI_Rsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Nonblocking calls
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Rsend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 477, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":477
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         with nogil: CHKERR( MPI_Rsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":472
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Rsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking send in ready mode
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Rsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":483
 *     # Nonblocking calls
 * 
 *     def Ibsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send in buffered mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_69Ibsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_68Ibsend[] = "Comm.Ibsend(self, buf, int dest, int tag=0)\n\n        Nonblocking send in buffered mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_69Ibsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ibsend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ibsend", 0, 2, 3, 1); __PYX_ERR(7, 483, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ibsend") < 0)) __PYX_ERR(7, 483, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 483, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 483, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ibsend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 483, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ibsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_68Ibsend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_68Ibsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Ibsend", 0);

  /* "mpi4py/MPI/Comm.pyx":487
 *         Nonblocking send in buffered mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibsend(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":488
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ibsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 488, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":489
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":491
 *         with nogil: CHKERR( MPI_Ibsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ibsend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 489, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":489
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":492
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":493
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Issend(self, buf, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":483
 *     # Nonblocking calls
 * 
 *     def Ibsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send in buffered mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ibsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":495
 *         return request
 * 
 *     def Issend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send in synchronous mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_71Issend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_70Issend[] = "Comm.Issend(self, buf, int dest, int tag=0)\n\n        Nonblocking send in synchronous mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_71Issend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Issend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Issend", 0, 2, 3, 1); __PYX_ERR(7, 495, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Issend") < 0)) __PYX_ERR(7, 495, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 495, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 495, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Issend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 495, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Issend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_70Issend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_70Issend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Issend", 0);

  /* "mpi4py/MPI/Comm.pyx":499
 *         Nonblocking send in synchronous mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Issend(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":500
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Issend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 500, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":501
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Issend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":503
 *         with nogil: CHKERR( MPI_Issend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Issend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 501, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":501
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Issend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":504
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":505
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Irsend(self, buf, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":495
 *         return request
 * 
 *     def Issend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send in synchronous mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Issend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":507
 *         return request
 * 
 *     def Irsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send in ready mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_73Irsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_72Irsend[] = "Comm.Irsend(self, buf, int dest, int tag=0)\n\n        Nonblocking send in ready mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_73Irsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Irsend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Irsend", 0, 2, 3, 1); __PYX_ERR(7, 507, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Irsend") < 0)) __PYX_ERR(7, 507, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 507, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 507, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Irsend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 507, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Irsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_72Irsend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_72Irsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Irsend", 0);

  /* "mpi4py/MPI/Comm.pyx":511
 *         Nonblocking send in ready mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Irsend(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":512
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Irsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 512, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":513
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Irsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":515
 *         with nogil: CHKERR( MPI_Irsend(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Irsend(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 513, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":513
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Irsend(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":516
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":517
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Persistent Requests
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":507
 *         return request
 * 
 *     def Irsend(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking send in ready mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Irsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":521
 *     # Persistent Requests
 * 
 *     def Bsend_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Persistent request for a send in buffered mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_75Bsend_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_74Bsend_init[] = "Comm.Bsend_init(self, buf, int dest, int tag=0)\n\n        Persistent request for a send in buffered mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_75Bsend_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Bsend_init (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Bsend_init", 0, 2, 3, 1); __PYX_ERR(7, 521, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Bsend_init") < 0)) __PYX_ERR(7, 521, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 521, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 521, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Bsend_init", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 521, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Bsend_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_74Bsend_init(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_74Bsend_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIPrequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Bsend_init", 0);

  /* "mpi4py/MPI/Comm.pyx":525
 *         Persistent request for a send in buffered mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Bsend_init(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":526
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bsend_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Prequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Prequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 526, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIPrequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":527
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Bsend_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":529
 *         with nogil: CHKERR( MPI_Bsend_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bsend_init(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 527, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":527
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Bsend_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":530
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->__pyx_base.ob_buf);
  __Pyx_DECREF(__pyx_v_request->__pyx_base.ob_buf);
  __pyx_v_request->__pyx_base.ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":531
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ssend_init(self, buf, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":521
 *     # Persistent Requests
 * 
 *     def Bsend_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Persistent request for a send in buffered mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Bsend_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":533
 *         return request
 * 
 *     def Ssend_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Persistent request for a send in synchronous mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_77Ssend_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_76Ssend_init[] = "Comm.Ssend_init(self, buf, int dest, int tag=0)\n\n        Persistent request for a send in synchronous mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_77Ssend_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ssend_init (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ssend_init", 0, 2, 3, 1); __PYX_ERR(7, 533, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ssend_init") < 0)) __PYX_ERR(7, 533, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 533, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 533, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ssend_init", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 533, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ssend_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_76Ssend_init(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_76Ssend_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIPrequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Ssend_init", 0);

  /* "mpi4py/MPI/Comm.pyx":537
 *         Persistent request for a send in synchronous mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Ssend_init(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":538
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ssend_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Prequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Prequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 538, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIPrequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":539
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Ssend_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":541
 *         with nogil: CHKERR( MPI_Ssend_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ssend_init(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 539, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":539
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Ssend_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":542
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->__pyx_base.ob_buf);
  __Pyx_DECREF(__pyx_v_request->__pyx_base.ob_buf);
  __pyx_v_request->__pyx_base.ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":543
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Rsend_init(self, buf, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":533
 *         return request
 * 
 *     def Ssend_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Persistent request for a send in synchronous mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ssend_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":545
 *         return request
 * 
 *     def Rsend_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Persistent request for a send in ready mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_79Rsend_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_78Rsend_init[] = "Comm.Rsend_init(self, buf, int dest, int tag=0)\n\n        Persistent request for a send in ready mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_79Rsend_init(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rsend_init (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Rsend_init", 0, 2, 3, 1); __PYX_ERR(7, 545, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Rsend_init") < 0)) __PYX_ERR(7, 545, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 545, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 545, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Rsend_init", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 545, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Rsend_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_78Rsend_init(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_78Rsend_init(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_dest, int __pyx_v_tag) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *__pyx_v_smsg = 0;
  struct PyMPIPrequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Rsend_init", 0);

  /* "mpi4py/MPI/Comm.pyx":549
 *         Persistent request for a send in ready mode
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)             # <<<<<<<<<<<<<<
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Rsend_init(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_p2p_send(__pyx_v_buf, __pyx_v_dest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_smsg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":550
 *         """
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Rsend_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Prequest(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Prequest), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 550, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIPrequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":551
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Rsend_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":553
 *         with nogil: CHKERR( MPI_Rsend_init(
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = smsg
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Rsend_init(__pyx_v_smsg->buf, __pyx_v_smsg->count, __pyx_v_smsg->dtype, __pyx_v_dest, __pyx_v_tag, __pyx_v_self->ob_mpi, (&__pyx_v_request->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 551, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":551
 *         cdef _p_msg_p2p smsg = message_p2p_send(buf, dest)
 *         cdef Prequest request = <Prequest>Prequest.__new__(Prequest)
 *         with nogil: CHKERR( MPI_Rsend_init(             # <<<<<<<<<<<<<<
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":554
 *             smsg.buf, smsg.count, smsg.dtype,
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_smsg));
  __Pyx_GOTREF(__pyx_v_request->__pyx_base.ob_buf);
  __Pyx_DECREF(__pyx_v_request->__pyx_base.ob_buf);
  __pyx_v_request->__pyx_base.ob_buf = ((PyObject *)__pyx_v_smsg);

  /* "mpi4py/MPI/Comm.pyx":555
 *             dest, tag, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = smsg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Collective Communications
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":545
 *         return request
 * 
 *     def Rsend_init(self, buf, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """
 *         Persistent request for a send in ready mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Rsend_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_smsg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":563
 *     # -----------------------
 * 
 *     def Barrier(self):             # <<<<<<<<<<<<<<
 *         """
 *         Barrier synchronization
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_81Barrier(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_80Barrier[] = "Comm.Barrier(self)\n\n        Barrier synchronization\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_81Barrier(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Barrier (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Barrier", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Barrier", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_80Barrier(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_80Barrier(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Barrier", 0);

  /* "mpi4py/MPI/Comm.pyx":567
 *         Barrier synchronization
 *         """
 *         with nogil: CHKERR( MPI_Barrier(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Global Communication Functions
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Barrier(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 567, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":563
 *     # -----------------------
 * 
 *     def Barrier(self):             # <<<<<<<<<<<<<<
 *         """
 *         Barrier synchronization
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Barrier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":572
 *     # ------------------------------
 * 
 *     def Bcast(self, buf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Broadcast a message from one process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_83Bcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_82Bcast[] = "Comm.Bcast(self, buf, int root=0)\n\n        Broadcast a message from one process\n        to all other processes in a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_83Bcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Bcast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_root,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Bcast") < 0)) __PYX_ERR(7, 572, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 572, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Bcast", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 572, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_82Bcast(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_82Bcast(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Bcast", 0);

  /* "mpi4py/MPI/Comm.pyx":577
 *         to all other processes in a group
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Bcast(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":578
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_bcast(buf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Bcast(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_bcast(__pyx_v_m, __pyx_v_buf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 578, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":579
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Bcast(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":581
 *         with nogil: CHKERR( MPI_Bcast(
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Gather(self, sendbuf, recvbuf, int root=0):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Bcast(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_root, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 579, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":579
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Bcast(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":572
 *     # ------------------------------
 * 
 *     def Bcast(self, buf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Broadcast a message from one process
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":583
 *             root, self.ob_mpi) )
 * 
 *     def Gather(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Gather together values from a group of processes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_85Gather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_84Gather[] = "Comm.Gather(self, sendbuf, recvbuf, int root=0)\n\n        Gather together values from a group of processes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_85Gather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Gather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Gather", 0, 2, 3, 1); __PYX_ERR(7, 583, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Gather") < 0)) __PYX_ERR(7, 583, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 583, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Gather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 583, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_84Gather(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_84Gather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Gather", 0);

  /* "mpi4py/MPI/Comm.pyx":587
 *         Gather together values from a group of processes
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Gather(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":588
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Gather(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 588, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":589
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Gather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":592
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             root, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Gatherv(self, sendbuf, recvbuf, int root=0):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Gather(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 589, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":589
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Gather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":583
 *             root, self.ob_mpi) )
 * 
 *     def Gather(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Gather together values from a group of processes
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":594
 *             root, self.ob_mpi) )
 * 
 *     def Gatherv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Gather Vector, gather data to one process from all other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_87Gatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_86Gatherv[] = "Comm.Gatherv(self, sendbuf, recvbuf, int root=0)\n\n        Gather Vector, gather data to one process from all other\n        processes in a group providing different amount of data and\n        displacements at the receiving sides\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_87Gatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Gatherv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Gatherv", 0, 2, 3, 1); __PYX_ERR(7, 594, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Gatherv") < 0)) __PYX_ERR(7, 594, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 594, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Gatherv", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 594, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Gatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_86Gatherv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_86Gatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Gatherv", 0);

  /* "mpi4py/MPI/Comm.pyx":600
 *         displacements at the receiving sides
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Gatherv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":601
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Gatherv(
 *             m.sbuf, m.scount,             m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 601, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":602
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Gatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":605
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             root, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Scatter(self, sendbuf, recvbuf, int root=0):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Gatherv(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 602, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":602
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Gatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":594
 *             root, self.ob_mpi) )
 * 
 *     def Gatherv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Gather Vector, gather data to one process from all other
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Gatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":607
 *             root, self.ob_mpi) )
 * 
 *     def Scatter(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Scatter data from one process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_89Scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_88Scatter[] = "Comm.Scatter(self, sendbuf, recvbuf, int root=0)\n\n        Scatter data from one process\n        to all other processes in a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_89Scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Scatter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Scatter", 0, 2, 3, 1); __PYX_ERR(7, 607, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Scatter") < 0)) __PYX_ERR(7, 607, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 607, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Scatter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 607, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_88Scatter(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_88Scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Scatter", 0);

  /* "mpi4py/MPI/Comm.pyx":612
 *         to all other processes in a group
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scatter(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":613
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Scatter(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 613, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":614
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":617
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             root, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Scatterv(self, sendbuf, recvbuf, int root=0):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Scatter(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 614, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":614
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":607
 *             root, self.ob_mpi) )
 * 
 *     def Scatter(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Scatter data from one process
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":619
 *             root, self.ob_mpi) )
 * 
 *     def Scatterv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Scatter Vector, scatter data from one process to all other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_91Scatterv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_90Scatterv[] = "Comm.Scatterv(self, sendbuf, recvbuf, int root=0)\n\n        Scatter Vector, scatter data from one process to all other\n        processes in a group providing different amount of data and\n        displacements at the sending side\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_91Scatterv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Scatterv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Scatterv", 0, 2, 3, 1); __PYX_ERR(7, 619, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Scatterv") < 0)) __PYX_ERR(7, 619, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 619, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Scatterv", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 619, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Scatterv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_90Scatterv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_90Scatterv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Scatterv", 0);

  /* "mpi4py/MPI/Comm.pyx":625
 *         displacements at the sending side
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scatterv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":626
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Scatterv(
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 626, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":627
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scatterv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcount,             m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":630
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcount,             m.rtype,
 *             root, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Allgather(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Scatterv(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 627, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":627
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scatterv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcount,             m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":619
 *             root, self.ob_mpi) )
 * 
 *     def Scatterv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Scatter Vector, scatter data from one process to all other
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Scatterv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":632
 *             root, self.ob_mpi) )
 * 
 *     def Allgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Gather to All, gather data from all processes and
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_93Allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_92Allgather[] = "Comm.Allgather(self, sendbuf, recvbuf)\n\n        Gather to All, gather data from all processes and\n        distribute it to all other processes in a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_93Allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Allgather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Allgather", 1, 2, 2, 1); __PYX_ERR(7, 632, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Allgather") < 0)) __PYX_ERR(7, 632, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Allgather", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 632, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_92Allgather(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_92Allgather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Allgather", 0);

  /* "mpi4py/MPI/Comm.pyx":637
 *         distribute it to all other processes in a group
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allgather(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":638
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Allgather(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 638, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":639
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":642
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Allgatherv(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Allgather(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 639, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":639
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":632
 *             root, self.ob_mpi) )
 * 
 *     def Allgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Gather to All, gather data from all processes and
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":644
 *             self.ob_mpi) )
 * 
 *     def Allgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Gather to All Vector, gather data from all processes and
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_95Allgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_94Allgatherv[] = "Comm.Allgatherv(self, sendbuf, recvbuf)\n\n        Gather to All Vector, gather data from all processes and\n        distribute it to all other processes in a group providing\n        different amount of data and displacements\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_95Allgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Allgatherv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Allgatherv", 1, 2, 2, 1); __PYX_ERR(7, 644, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Allgatherv") < 0)) __PYX_ERR(7, 644, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Allgatherv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 644, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Allgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_94Allgatherv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_94Allgatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Allgatherv", 0);

  /* "mpi4py/MPI/Comm.pyx":650
 *         different amount of data and displacements
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allgatherv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":651
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Allgatherv(
 *             m.sbuf, m.scount,             m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 651, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":652
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":655
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Alltoall(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Allgatherv(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 652, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":652
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":644
 *             self.ob_mpi) )
 * 
 *     def Allgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Gather to All Vector, gather data from all processes and
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Allgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":657
 *             self.ob_mpi) )
 * 
 *     def Alltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         All to All Scatter/Gather, send data from all to all
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_97Alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_96Alltoall[] = "Comm.Alltoall(self, sendbuf, recvbuf)\n\n        All to All Scatter/Gather, send data from all to all\n        processes in a group\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_97Alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Alltoall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Alltoall", 1, 2, 2, 1); __PYX_ERR(7, 657, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Alltoall") < 0)) __PYX_ERR(7, 657, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Alltoall", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 657, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_96Alltoall(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_96Alltoall(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Alltoall", 0);

  /* "mpi4py/MPI/Comm.pyx":662
 *         processes in a group
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoall(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":663
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Alltoall(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 663, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":664
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":667
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Alltoallv(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Alltoall(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 664, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":664
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":657
 *             self.ob_mpi) )
 * 
 *     def Alltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         All to All Scatter/Gather, send data from all to all
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":669
 *             self.ob_mpi) )
 * 
 *     def Alltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         All to All Scatter/Gather Vector, send data from all to all
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_99Alltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_98Alltoallv[] = "Comm.Alltoallv(self, sendbuf, recvbuf)\n\n        All to All Scatter/Gather Vector, send data from all to all\n        processes in a group providing different amount of data and\n        displacements\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_99Alltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Alltoallv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Alltoallv", 1, 2, 2, 1); __PYX_ERR(7, 669, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Alltoallv") < 0)) __PYX_ERR(7, 669, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Alltoallv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 669, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Alltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_98Alltoallv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_98Alltoallv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Alltoallv", 0);

  /* "mpi4py/MPI/Comm.pyx":675
 *         displacements
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoallv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":676
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Alltoallv(
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 676, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":677
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":680
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Alltoallw(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Alltoallv(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 677, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":677
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":669
 *             self.ob_mpi) )
 * 
 *     def Alltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         All to All Scatter/Gather Vector, send data from all to all
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Alltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":682
 *             self.ob_mpi) )
 * 
 *     def Alltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Generalized All-to-All communication allowing different
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_101Alltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_100Alltoallw[] = "Comm.Alltoallw(self, sendbuf, recvbuf)\n\n        Generalized All-to-All communication allowing different\n        counts, displacements and datatypes for each partner\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_101Alltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Alltoallw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Alltoallw", 1, 2, 2, 1); __PYX_ERR(7, 682, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Alltoallw") < 0)) __PYX_ERR(7, 682, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Alltoallw", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 682, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_100Alltoallw(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_100Alltoallw(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Alltoallw", 0);

  /* "mpi4py/MPI/Comm.pyx":687
 *         counts, displacements and datatypes for each partner
 *         """
 *         cdef _p_msg_ccow m = message_ccow()             # <<<<<<<<<<<<<<
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoallw(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_ccow()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":688
 *         """
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Alltoallw(
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_alltoallw(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 688, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":689
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":692
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Alltoallw(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stypes, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtypes, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 689, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":689
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Alltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":682
 *             self.ob_mpi) )
 * 
 *     def Alltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Generalized All-to-All communication allowing different
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":698
 *     # ---------------------------
 * 
 *     def Reduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_103Reduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_102Reduce[] = "Comm.Reduce(self, sendbuf, recvbuf, Op op=SUM, int root=0)\n\n        Reduce\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_103Reduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Reduce (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,&__pyx_n_s_root,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = (PyObject *)__pyx_k__57;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Reduce", 0, 2, 4, 1); __PYX_ERR(7, 698, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Reduce") < 0)) __PYX_ERR(7, 698, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
    if (values[3]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 698, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Reduce", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 698, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 698, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_102Reduce(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op, __pyx_v_root);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_102Reduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Reduce", 0);

  /* "mpi4py/MPI/Comm.pyx":702
 *         Reduce
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":703
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Reduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 703, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":704
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":706
 *         with nogil: CHKERR( MPI_Reduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Allreduce(self, sendbuf, recvbuf, Op op=SUM):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Reduce(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_root, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 704, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":704
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":698
 *     # ---------------------------
 * 
 *     def Reduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":708
 *             op.ob_mpi, root, self.ob_mpi) )
 * 
 *     def Allreduce(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         All Reduce
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_105Allreduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_104Allreduce[] = "Comm.Allreduce(self, sendbuf, recvbuf, Op op=SUM)\n\n        All Reduce\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_105Allreduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Allreduce (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__58;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Allreduce", 0, 2, 3, 1); __PYX_ERR(7, 708, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Allreduce") < 0)) __PYX_ERR(7, 708, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Allreduce", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 708, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Allreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 708, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_104Allreduce(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_104Allreduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Allreduce", 0);

  /* "mpi4py/MPI/Comm.pyx":712
 *         All Reduce
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allreduce(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":713
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Allreduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allreduce(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 713, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":714
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allreduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":716
 *         with nogil: CHKERR( MPI_Allreduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Reduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Allreduce(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 714, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":714
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Allreduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":708
 *             op.ob_mpi, root, self.ob_mpi) )
 * 
 *     def Allreduce(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         All Reduce
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Allreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":718
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Reduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce-Scatter Block (regular, non-vector version)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_107Reduce_scatter_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_106Reduce_scatter_block[] = "Comm.Reduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM)\n\n        Reduce-Scatter Block (regular, non-vector version)\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_107Reduce_scatter_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Reduce_scatter_block (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__59;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Reduce_scatter_block", 0, 2, 3, 1); __PYX_ERR(7, 718, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Reduce_scatter_block") < 0)) __PYX_ERR(7, 718, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Reduce_scatter_block", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 718, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Reduce_scatter_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 718, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_106Reduce_scatter_block(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_106Reduce_scatter_block(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Reduce_scatter_block", 0);

  /* "mpi4py/MPI/Comm.pyx":722
 *         Reduce-Scatter Block (regular, non-vector version)
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce_scatter_block(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":723
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Reduce_scatter_block(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter_block(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 723, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":724
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce_scatter_block(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":726
 *         with nogil: CHKERR( MPI_Reduce_scatter_block(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Reduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Reduce_scatter_block(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 724, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":724
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce_scatter_block(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":718
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Reduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce-Scatter Block (regular, non-vector version)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Reduce_scatter_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":728
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Reduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce-Scatter (vector version)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_109Reduce_scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_108Reduce_scatter[] = "Comm.Reduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM)\n\n        Reduce-Scatter (vector version)\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_109Reduce_scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_v_recvcounts = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Reduce_scatter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_recvcounts,&__pyx_n_s_op,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = (PyObject *)__pyx_k__60;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Reduce_scatter", 0, 2, 4, 1); __PYX_ERR(7, 728, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvcounts);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Reduce_scatter") < 0)) __PYX_ERR(7, 728, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_recvcounts = values[2];
    __pyx_v_op = ((struct PyMPIOpObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Reduce_scatter", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 728, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Reduce_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 728, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_108Reduce_scatter(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_recvcounts, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_108Reduce_scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, PyObject *__pyx_v_recvcounts, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Reduce_scatter", 0);

  /* "mpi4py/MPI/Comm.pyx":732
 *         Reduce-Scatter (vector version)
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_reduce_scatter(sendbuf, recvbuf,
 *                              recvcounts, self.ob_mpi)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":733
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter(sendbuf, recvbuf,             # <<<<<<<<<<<<<<
 *                              recvcounts, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce_scatter(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_recvcounts, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 733, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":735
 *         m.for_reduce_scatter(sendbuf, recvbuf,
 *                              recvcounts, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce_scatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":737
 *         with nogil: CHKERR( MPI_Reduce_scatter(
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Nonblocking Collectives
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Reduce_scatter(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 735, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":735
 *         m.for_reduce_scatter(sendbuf, recvbuf,
 *                              recvcounts, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Reduce_scatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":728
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Reduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce-Scatter (vector version)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Reduce_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":742
 *     # -----------------------
 * 
 *     def Ibarrier(self):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Barrier
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_111Ibarrier(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_110Ibarrier[] = "Comm.Ibarrier(self)\n\n        Nonblocking Barrier\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_111Ibarrier(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ibarrier (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Ibarrier", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Ibarrier", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_110Ibarrier(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_110Ibarrier(struct PyMPICommObject *__pyx_v_self) {
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Ibarrier", 0);

  /* "mpi4py/MPI/Comm.pyx":746
 *         Nonblocking Barrier
 *         """
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ibarrier(self.ob_mpi, &request.ob_mpi) )
 *         return request
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 746, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":747
 *         """
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibarrier(self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ibarrier(__pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 747, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":748
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibarrier(self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ibcast(self, buf, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":742
 *     # -----------------------
 * 
 *     def Ibarrier(self):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Barrier
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ibarrier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":750
 *         return request
 * 
 *     def Ibcast(self, buf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Broadcast
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_113Ibcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_112Ibcast[] = "Comm.Ibcast(self, buf, int root=0)\n\n        Nonblocking Broadcast\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_113Ibcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ibcast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_root,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ibcast") < 0)) __PYX_ERR(7, 750, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 750, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ibcast", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 750, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ibcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_112Ibcast(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_112Ibcast(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ibcast", 0);

  /* "mpi4py/MPI/Comm.pyx":754
 *         Nonblocking Broadcast
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":755
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_bcast(buf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibcast(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_bcast(__pyx_v_m, __pyx_v_buf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 755, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":756
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ibcast(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 756, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":757
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibcast(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":759
 *         with nogil: CHKERR( MPI_Ibcast(
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ibcast(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_root, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 757, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":757
 *         m.for_bcast(buf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ibcast(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":760
 *             m.sbuf, m.scount, m.stype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":761
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Igather(self, sendbuf, recvbuf, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":750
 *         return request
 * 
 *     def Ibcast(self, buf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Broadcast
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ibcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":763
 *         return request
 * 
 *     def Igather(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_115Igather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_114Igather[] = "Comm.Igather(self, sendbuf, recvbuf, int root=0)\n\n        Nonblocking Gather\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_115Igather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Igather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Igather", 0, 2, 3, 1); __PYX_ERR(7, 763, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Igather") < 0)) __PYX_ERR(7, 763, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 763, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Igather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 763, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Igather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_114Igather(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_114Igather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Igather", 0);

  /* "mpi4py/MPI/Comm.pyx":767
 *         Nonblocking Gather
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":768
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Igather(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 768, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":769
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Igather(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 769, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":770
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Igather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":773
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Igather(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 770, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":770
 *         m.for_gather(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Igather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":774
 *             m.rbuf, m.rcount, m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":775
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Igatherv(self, sendbuf, recvbuf, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":763
 *         return request
 * 
 *     def Igather(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Igather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":777
 *         return request
 * 
 *     def Igatherv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_117Igatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_116Igatherv[] = "Comm.Igatherv(self, sendbuf, recvbuf, int root=0)\n\n        Nonblocking Gather Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_117Igatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Igatherv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Igatherv", 0, 2, 3, 1); __PYX_ERR(7, 777, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Igatherv") < 0)) __PYX_ERR(7, 777, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 777, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Igatherv", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 777, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Igatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_116Igatherv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_116Igatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Igatherv", 0);

  /* "mpi4py/MPI/Comm.pyx":781
 *         Nonblocking Gather Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":782
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Igatherv(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 782, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":783
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Igatherv(
 *             m.sbuf, m.scount,             m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 783, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":784
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Igatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":787
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Igatherv(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 784, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":784
 *         m.for_gather(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Igatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":788
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":789
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iscatter(self, sendbuf, recvbuf, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":777
 *         return request
 * 
 *     def Igatherv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather Vector
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Igatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":791
 *         return request
 * 
 *     def Iscatter(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Scatter
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_119Iscatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_118Iscatter[] = "Comm.Iscatter(self, sendbuf, recvbuf, int root=0)\n\n        Nonblocking Scatter\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_119Iscatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iscatter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iscatter", 0, 2, 3, 1); __PYX_ERR(7, 791, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iscatter") < 0)) __PYX_ERR(7, 791, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 791, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iscatter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 791, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iscatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_118Iscatter(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_118Iscatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iscatter", 0);

  /* "mpi4py/MPI/Comm.pyx":795
 *         Nonblocking Scatter
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":796
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscatter(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 796, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":797
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iscatter(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 797, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":798
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":801
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iscatter(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 798, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":798
 *         m.for_scatter(0, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":802
 *             m.rbuf, m.rcount, m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":803
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iscatterv(self, sendbuf, recvbuf, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":791
 *         return request
 * 
 *     def Iscatter(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Scatter
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iscatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":805
 *         return request
 * 
 *     def Iscatterv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Scatter Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_121Iscatterv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_120Iscatterv[] = "Comm.Iscatterv(self, sendbuf, recvbuf, int root=0)\n\n        Nonblocking Scatter Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_121Iscatterv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iscatterv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iscatterv", 0, 2, 3, 1); __PYX_ERR(7, 805, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iscatterv") < 0)) __PYX_ERR(7, 805, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 805, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iscatterv", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 805, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iscatterv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_120Iscatterv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_120Iscatterv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iscatterv", 0);

  /* "mpi4py/MPI/Comm.pyx":809
 *         Nonblocking Scatter Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":810
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscatterv(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 810, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":811
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iscatterv(
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 811, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":812
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscatterv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcount,             m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":815
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcount,             m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iscatterv(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_root, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 812, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":812
 *         m.for_scatter(1, sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscatterv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcount,             m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":816
 *             m.rbuf, m.rcount,             m.rtype,
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":817
 *             root, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iallgather(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":805
 *         return request
 * 
 *     def Iscatterv(self, sendbuf, recvbuf, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Scatter Vector
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iscatterv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":819
 *         return request
 * 
 *     def Iallgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather to All
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_123Iallgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_122Iallgather[] = "Comm.Iallgather(self, sendbuf, recvbuf)\n\n        Nonblocking Gather to All\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_123Iallgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iallgather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iallgather", 1, 2, 2, 1); __PYX_ERR(7, 819, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iallgather") < 0)) __PYX_ERR(7, 819, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iallgather", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 819, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iallgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_122Iallgather(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_122Iallgather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iallgather", 0);

  /* "mpi4py/MPI/Comm.pyx":823
 *         Nonblocking Gather to All
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 823, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":824
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallgather(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 824, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":825
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iallgather(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 825, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":826
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":829
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iallgather(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 826, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":826
 *         m.for_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":830
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":831
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iallgatherv(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":819
 *         return request
 * 
 *     def Iallgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather to All
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iallgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":833
 *         return request
 * 
 *     def Iallgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather to All Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_125Iallgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_124Iallgatherv[] = "Comm.Iallgatherv(self, sendbuf, recvbuf)\n\n        Nonblocking Gather to All Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_125Iallgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iallgatherv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iallgatherv", 1, 2, 2, 1); __PYX_ERR(7, 833, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iallgatherv") < 0)) __PYX_ERR(7, 833, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iallgatherv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 833, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iallgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_124Iallgatherv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_124Iallgatherv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iallgatherv", 0);

  /* "mpi4py/MPI/Comm.pyx":837
 *         Nonblocking Gather to All Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 837, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":838
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallgatherv(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 838, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":839
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iallgatherv(
 *             m.sbuf, m.scount,             m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 839, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":840
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":843
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iallgatherv(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 840, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":840
 *         m.for_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount,             m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":844
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ialltoall(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":833
 *         return request
 * 
 *     def Iallgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Gather to All Vector
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iallgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":846
 *         return request
 * 
 *     def Ialltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All to All Scatter/Gather
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_127Ialltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_126Ialltoall[] = "Comm.Ialltoall(self, sendbuf, recvbuf)\n\n        Nonblocking All to All Scatter/Gather\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_127Ialltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ialltoall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ialltoall", 1, 2, 2, 1); __PYX_ERR(7, 846, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ialltoall") < 0)) __PYX_ERR(7, 846, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ialltoall", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 846, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ialltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_126Ialltoall(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_126Ialltoall(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ialltoall", 0);

  /* "mpi4py/MPI/Comm.pyx":850
 *         Nonblocking All to All Scatter/Gather
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":851
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoall(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 851, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":852
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ialltoall(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 852, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":853
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":856
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ialltoall(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 853, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":853
 *         m.for_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":857
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":858
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ialltoallv(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":846
 *         return request
 * 
 *     def Ialltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All to All Scatter/Gather
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ialltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":860
 *         return request
 * 
 *     def Ialltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All to All Scatter/Gather Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_129Ialltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_128Ialltoallv[] = "Comm.Ialltoallv(self, sendbuf, recvbuf)\n\n        Nonblocking All to All Scatter/Gather Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_129Ialltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ialltoallv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ialltoallv", 1, 2, 2, 1); __PYX_ERR(7, 860, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ialltoallv") < 0)) __PYX_ERR(7, 860, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ialltoallv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 860, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ialltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_128Ialltoallv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_128Ialltoallv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ialltoallv", 0);

  /* "mpi4py/MPI/Comm.pyx":864
 *         Nonblocking All to All Scatter/Gather Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":865
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoallv(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 865, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":866
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ialltoallv(
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 866, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":867
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":870
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ialltoallv(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 867, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":867
 *         m.for_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":871
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":872
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ialltoallw(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":860
 *         return request
 * 
 *     def Ialltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All to All Scatter/Gather Vector
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ialltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":874
 *         return request
 * 
 *     def Ialltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Generalized All-to-All
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_131Ialltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_130Ialltoallw[] = "Comm.Ialltoallw(self, sendbuf, recvbuf)\n\n        Nonblocking Generalized All-to-All\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_131Ialltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ialltoallw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ialltoallw", 1, 2, 2, 1); __PYX_ERR(7, 874, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ialltoallw") < 0)) __PYX_ERR(7, 874, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ialltoallw", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 874, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ialltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_130Ialltoallw(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_130Ialltoallw(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ialltoallw", 0);

  /* "mpi4py/MPI/Comm.pyx":878
 *         Nonblocking Generalized All-to-All
 *         """
 *         cdef _p_msg_ccow m = message_ccow()             # <<<<<<<<<<<<<<
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_ccow()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":879
 *         """
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoallw(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_alltoallw(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 879, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":880
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ialltoallw(
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 880, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":881
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":884
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ialltoallw(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stypes, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtypes, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 881, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":881
 *         m.for_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ialltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stypes,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":885
 *             m.rbuf, m.rcounts, m.rdispls, m.rtypes,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":886
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ireduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":874
 *         return request
 * 
 *     def Ialltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Generalized All-to-All
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ialltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":888
 *         return request
 * 
 *     def Ireduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_133Ireduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_132Ireduce[] = "Comm.Ireduce(self, sendbuf, recvbuf, Op op=SUM, int root=0)\n\n        Nonblocking Reduce\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_133Ireduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ireduce (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,&__pyx_n_s_root,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = (PyObject *)__pyx_k__61;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ireduce", 0, 2, 4, 1); __PYX_ERR(7, 888, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ireduce") < 0)) __PYX_ERR(7, 888, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
    if (values[3]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 888, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ireduce", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 888, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ireduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 888, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_132Ireduce(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op, __pyx_v_root);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_132Ireduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op, int __pyx_v_root) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ireduce", 0);

  /* "mpi4py/MPI/Comm.pyx":892
 *         Nonblocking Reduce
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":893
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_root, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 893, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":894
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ireduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 894, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":895
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":897
 *         with nogil: CHKERR( MPI_Ireduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ireduce(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_root, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 895, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":895
 *         m.for_reduce(sendbuf, recvbuf, root, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":898
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, root, self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iallreduce(self, sendbuf, recvbuf, Op op=SUM):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":888
 *         return request
 * 
 *     def Ireduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ireduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":900
 *         return request
 * 
 *     def Iallreduce(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All Reduce
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_135Iallreduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_134Iallreduce[] = "Comm.Iallreduce(self, sendbuf, recvbuf, Op op=SUM)\n\n        Nonblocking All Reduce\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_135Iallreduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iallreduce (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__62;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iallreduce", 0, 2, 3, 1); __PYX_ERR(7, 900, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iallreduce") < 0)) __PYX_ERR(7, 900, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iallreduce", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 900, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iallreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 900, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_134Iallreduce(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_134Iallreduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iallreduce", 0);

  /* "mpi4py/MPI/Comm.pyx":904
 *         Nonblocking All Reduce
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":905
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallreduce(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allreduce(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 905, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":906
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iallreduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 906, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":907
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallreduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":909
 *         with nogil: CHKERR( MPI_Iallreduce(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iallreduce(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 907, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":907
 *         m.for_allreduce(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iallreduce(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":910
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ireduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":900
 *         return request
 * 
 *     def Iallreduce(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All Reduce
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Iallreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":912
 *         return request
 * 
 *     def Ireduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce-Scatter Block (regular, non-vector version)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_137Ireduce_scatter_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_136Ireduce_scatter_block[] = "Comm.Ireduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM)\n\n        Nonblocking Reduce-Scatter Block (regular, non-vector version)\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_137Ireduce_scatter_block(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ireduce_scatter_block (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__63;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ireduce_scatter_block", 0, 2, 3, 1); __PYX_ERR(7, 912, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ireduce_scatter_block") < 0)) __PYX_ERR(7, 912, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ireduce_scatter_block", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 912, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ireduce_scatter_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 912, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_136Ireduce_scatter_block(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_136Ireduce_scatter_block(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ireduce_scatter_block", 0);

  /* "mpi4py/MPI/Comm.pyx":916
 *         Nonblocking Reduce-Scatter Block (regular, non-vector version)
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":917
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce_scatter_block(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter_block(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 917, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":918
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ireduce_scatter_block(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 918, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":919
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce_scatter_block(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":921
 *         with nogil: CHKERR( MPI_Ireduce_scatter_block(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ireduce_scatter_block(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 919, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":919
 *         m.for_reduce_scatter_block(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce_scatter_block(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":922
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ireduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":912
 *         return request
 * 
 *     def Ireduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce-Scatter Block (regular, non-vector version)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ireduce_scatter_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":924
 *         return request
 * 
 *     def Ireduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce-Scatter (vector version)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_139Ireduce_scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_138Ireduce_scatter[] = "Comm.Ireduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM)\n\n        Nonblocking Reduce-Scatter (vector version)\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_139Ireduce_scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_v_recvcounts = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ireduce_scatter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_recvcounts,&__pyx_n_s_op,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = (PyObject *)__pyx_k__64;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ireduce_scatter", 0, 2, 4, 1); __PYX_ERR(7, 924, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvcounts);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ireduce_scatter") < 0)) __PYX_ERR(7, 924, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_recvcounts = values[2];
    __pyx_v_op = ((struct PyMPIOpObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ireduce_scatter", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 924, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ireduce_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 924, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_138Ireduce_scatter(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_recvcounts, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_138Ireduce_scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, PyObject *__pyx_v_recvcounts, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ireduce_scatter", 0);

  /* "mpi4py/MPI/Comm.pyx":928
 *         Nonblocking Reduce-Scatter (vector version)
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_reduce_scatter(sendbuf, recvbuf,
 *                              recvcounts, self.ob_mpi)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":929
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_reduce_scatter(sendbuf, recvbuf,             # <<<<<<<<<<<<<<
 *                              recvcounts, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_recvcounts, __pyx_v_self->ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 929, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":931
 *         m.for_reduce_scatter(sendbuf, recvbuf,
 *                              recvcounts, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ireduce_scatter(
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 931, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":932
 *                              recvcounts, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce_scatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":934
 *         with nogil: CHKERR( MPI_Ireduce_scatter(
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ireduce_scatter(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 932, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":932
 *                              recvcounts, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ireduce_scatter(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":935
 *             m.sbuf, m.rbuf, m.rcounts, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Tests
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":924
 *         return request
 * 
 *     def Ireduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce-Scatter (vector version)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Ireduce_scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":940
 *     # -----
 * 
 *     def Is_inter(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test to see if a comm is an intercommunicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_141Is_inter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_140Is_inter[] = "Comm.Is_inter(self)\n\n        Test to see if a comm is an intercommunicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_141Is_inter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_inter (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_inter", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_inter", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_140Is_inter(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_140Is_inter(struct PyMPICommObject *__pyx_v_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Is_inter", 0);

  /* "mpi4py/MPI/Comm.pyx":944
 *         Test to see if a comm is an intercommunicator
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &flag) )
 *         return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Comm.pyx":945
 *         """
 *         cdef int flag = 0
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_self->ob_mpi, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 945, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":946
 *         cdef int flag = 0
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &flag) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     property is_inter:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 946, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":940
 *     # -----
 * 
 *     def Is_inter(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test to see if a comm is an intercommunicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Is_inter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":950
 *     property is_inter:
 *         """is intercommunicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_inter()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_8is_inter_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_8is_inter_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_8is_inter___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8is_inter___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":951
 *         """is intercommunicator"""
 *         def __get__(self):
 *             return self.Is_inter()             # <<<<<<<<<<<<<<
 * 
 *     def Is_intra(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Is_inter); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":950
 *     property is_inter:
 *         """is intercommunicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_inter()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.is_inter.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":953
 *             return self.Is_inter()
 * 
 *     def Is_intra(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test to see if a comm is an intracommunicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_143Is_intra(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_142Is_intra[] = "Comm.Is_intra(self)\n\n        Test to see if a comm is an intracommunicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_143Is_intra(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_intra (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_intra", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_intra", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_142Is_intra(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_142Is_intra(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("Is_intra", 0);

  /* "mpi4py/MPI/Comm.pyx":957
 *         Test to see if a comm is an intracommunicator
 *         """
 *         return not self.Is_inter()             # <<<<<<<<<<<<<<
 * 
 *     property is_intra:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Is_inter); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(7, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBool_FromLong((!__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":953
 *             return self.Is_inter()
 * 
 *     def Is_intra(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test to see if a comm is an intracommunicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Is_intra", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":961
 *     property is_intra:
 *         """is intracommunicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_intra()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_8is_intra_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_8is_intra_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_8is_intra___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8is_intra___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":962
 *         """is intracommunicator"""
 *         def __get__(self):
 *             return self.Is_intra()             # <<<<<<<<<<<<<<
 * 
 *     def Get_topology(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Is_intra); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":961
 *     property is_intra:
 *         """is intracommunicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Is_intra()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.is_intra.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":964
 *             return self.Is_intra()
 * 
 *     def Get_topology(self):             # <<<<<<<<<<<<<<
 *         """
 *         Determine the type of topology (if any)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_145Get_topology(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_144Get_topology[] = "Comm.Get_topology(self)\n\n        Determine the type of topology (if any)\n        associated with a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_145Get_topology(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_topology (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_topology", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_topology", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_144Get_topology(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_144Get_topology(struct PyMPICommObject *__pyx_v_self) {
  int __pyx_v_topo;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_topology", 0);

  /* "mpi4py/MPI/Comm.pyx":969
 *         associated with a communicator
 *         """
 *         cdef int topo = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         return topo
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":970
 *         """
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )             # <<<<<<<<<<<<<<
 *         return topo
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_self->ob_mpi, (&__pyx_v_topo))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 970, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":971
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         return topo             # <<<<<<<<<<<<<<
 * 
 *     property topology:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":964
 *             return self.Is_intra()
 * 
 *     def Get_topology(self):             # <<<<<<<<<<<<<<
 *         """
 *         Determine the type of topology (if any)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_topology", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":975
 *     property topology:
 *         """communicator topology type"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topology()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_8topology_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_8topology_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_8topology___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_8topology___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":976
 *         """communicator topology type"""
 *         def __get__(self):
 *             return self.Get_topology()             # <<<<<<<<<<<<<<
 * 
 *     property is_topo:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topology); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":975
 *     property topology:
 *         """communicator topology type"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topology()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.topology.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":980
 *     property is_topo:
 *         """is a topology communicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topology() != MPI_UNDEFINED
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_7is_topo_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_7is_topo_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_7is_topo___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_7is_topo___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":981
 *         """is a topology communicator"""
 *         def __get__(self):
 *             return self.Get_topology() != MPI_UNDEFINED             # <<<<<<<<<<<<<<
 * 
 *     # Process Creation and Management
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topology); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(MPI_UNDEFINED); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 981, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":980
 *     property is_topo:
 *         """is a topology communicator"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topology() != MPI_UNDEFINED
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.is_topo.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":987
 * 
 *     @classmethod
 *     def Get_parent(cls):             # <<<<<<<<<<<<<<
 *         """
 *         Return the parent intercommunicator for this process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_147Get_parent(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_146Get_parent[] = "Comm.Get_parent(type cls)\n\n        Return the parent intercommunicator for this process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_147Get_parent(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_parent (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_parent", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_parent", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_146Get_parent(((PyTypeObject*)__pyx_v_cls));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_146Get_parent(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Get_parent", 0);

  /* "mpi4py/MPI/Comm.pyx":991
 *         Return the parent intercommunicator for this process
 *         """
 *         cdef Intercomm comm = __COMM_PARENT__             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_get_parent(&comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_PARENT__));
  __pyx_v_comm = __pyx_v_6mpi4py_3MPI___COMM_PARENT__;

  /* "mpi4py/MPI/Comm.pyx":992
 *         """
 *         cdef Intercomm comm = __COMM_PARENT__
 *         with nogil: CHKERR( MPI_Comm_get_parent(&comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_get_parent((&__pyx_v_comm->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 992, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":993
 *         cdef Intercomm comm = __COMM_PARENT__
 *         with nogil: CHKERR( MPI_Comm_get_parent(&comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 993, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":994
 *         with nogil: CHKERR( MPI_Comm_get_parent(&comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Disconnect(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":987
 * 
 *     @classmethod
 *     def Get_parent(cls):             # <<<<<<<<<<<<<<
 *         """
 *         Return the parent intercommunicator for this process
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_parent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":996
 *         return comm
 * 
 *     def Disconnect(self):             # <<<<<<<<<<<<<<
 *         """
 *         Disconnect from a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_149Disconnect(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_148Disconnect[] = "Comm.Disconnect(self)\n\n        Disconnect from a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_149Disconnect(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Disconnect (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Disconnect", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Disconnect", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_148Disconnect(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_148Disconnect(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Disconnect", 0);

  /* "mpi4py/MPI/Comm.pyx":1000
 *         Disconnect from a communicator
 *         """
 *         with nogil: CHKERR( MPI_Comm_disconnect(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_disconnect((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1000, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":996
 *         return comm
 * 
 *     def Disconnect(self):             # <<<<<<<<<<<<<<
 *         """
 *         Disconnect from a communicator
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Disconnect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1003
 * 
 *     @classmethod
 *     def Join(cls, int fd):             # <<<<<<<<<<<<<<
 *         """
 *         Create a intercommunicator by joining
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_151Join(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_150Join[] = "Comm.Join(type cls, int fd)\n\n        Create a intercommunicator by joining\n        two processes connected by a socket\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_151Join(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_fd;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Join (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fd,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fd)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Join") < 0)) __PYX_ERR(7, 1003, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_fd = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_fd == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1003, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Join", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1003, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Join", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_150Join(((PyTypeObject*)__pyx_v_cls), __pyx_v_fd);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_150Join(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_fd) {
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Join", 0);

  /* "mpi4py/MPI/Comm.pyx":1008
 *         two processes connected by a socket
 *         """
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_join(fd, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1008, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1009
 *         """
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_join(fd, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_join(__pyx_v_fd, (&__pyx_v_comm->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1009, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1010
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_join(fd, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1010, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1011
 *         with nogil: CHKERR( MPI_Comm_join(fd, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     # Attributes
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1003
 * 
 *     @classmethod
 *     def Join(cls, int fd):             # <<<<<<<<<<<<<<
 *         """
 *         Create a intercommunicator by joining
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Join", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1016
 *     # ----------
 * 
 *     def Get_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve attribute value by key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_153Get_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_152Get_attr[] = "Comm.Get_attr(self, int keyval)\n\n        Retrieve attribute value by key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_153Get_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_attr") < 0)) __PYX_ERR(7, 1016, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1016, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_attr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1016, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_152Get_attr(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_152Get_attr(struct PyMPICommObject *__pyx_v_self, int __pyx_v_keyval) {
  void *__pyx_v_attrval;
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Get_attr", 0);

  /* "mpi4py/MPI/Comm.pyx":1020
 *         Retrieve attribute value by key
 *         """
 *         cdef void *attrval = NULL             # <<<<<<<<<<<<<<
 *         cdef int  flag = 0
 *         CHKERR( MPI_Comm_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 */
  __pyx_v_attrval = NULL;

  /* "mpi4py/MPI/Comm.pyx":1021
 *         """
 *         cdef void *attrval = NULL
 *         cdef int  flag = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if not flag: return None
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Comm.pyx":1022
 *         cdef void *attrval = NULL
 *         cdef int  flag = 0
 *         CHKERR( MPI_Comm_get_attr(self.ob_mpi, keyval, &attrval, &flag) )             # <<<<<<<<<<<<<<
 *         if not flag: return None
 *         if attrval == NULL: return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_get_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval, (&__pyx_v_attrval), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1022, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1023
 *         cdef int  flag = 0
 *         CHKERR( MPI_Comm_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if not flag: return None             # <<<<<<<<<<<<<<
 *         if attrval == NULL: return 0
 *         # MPI-1 predefined attribute keyvals
 */
  __pyx_t_2 = ((!(__pyx_v_flag != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1024
 *         CHKERR( MPI_Comm_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if not flag: return None
 *         if attrval == NULL: return 0             # <<<<<<<<<<<<<<
 *         # MPI-1 predefined attribute keyvals
 *         if (keyval == MPI_TAG_UB or
 */
  __pyx_t_2 = ((__pyx_v_attrval == NULL) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_0);
    __pyx_r = __pyx_int_0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1026
 *         if attrval == NULL: return 0
 *         # MPI-1 predefined attribute keyvals
 *         if (keyval == MPI_TAG_UB or             # <<<<<<<<<<<<<<
 *             keyval == MPI_HOST or
 *             keyval == MPI_IO or
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_TAG_UB) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }

  /* "mpi4py/MPI/Comm.pyx":1027
 *         # MPI-1 predefined attribute keyvals
 *         if (keyval == MPI_TAG_UB or
 *             keyval == MPI_HOST or             # <<<<<<<<<<<<<<
 *             keyval == MPI_IO or
 *             keyval == MPI_WTIME_IS_GLOBAL):
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_HOST) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }

  /* "mpi4py/MPI/Comm.pyx":1028
 *         if (keyval == MPI_TAG_UB or
 *             keyval == MPI_HOST or
 *             keyval == MPI_IO or             # <<<<<<<<<<<<<<
 *             keyval == MPI_WTIME_IS_GLOBAL):
 *             return (<int*>attrval)[0]
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_IO) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }

  /* "mpi4py/MPI/Comm.pyx":1029
 *             keyval == MPI_HOST or
 *             keyval == MPI_IO or
 *             keyval == MPI_WTIME_IS_GLOBAL):             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         # MPI-2 predefined attribute keyvals
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_WTIME_IS_GLOBAL) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L6_bool_binop_done:;

  /* "mpi4py/MPI/Comm.pyx":1026
 *         if attrval == NULL: return 0
 *         # MPI-1 predefined attribute keyvals
 *         if (keyval == MPI_TAG_UB or             # <<<<<<<<<<<<<<
 *             keyval == MPI_HOST or
 *             keyval == MPI_IO or
 */
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1030
 *             keyval == MPI_IO or
 *             keyval == MPI_WTIME_IS_GLOBAL):
 *             return (<int*>attrval)[0]             # <<<<<<<<<<<<<<
 *         # MPI-2 predefined attribute keyvals
 *         elif (keyval == MPI_UNIVERSE_SIZE or
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyInt_From_int((((int *)__pyx_v_attrval)[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1026
 *         if attrval == NULL: return 0
 *         # MPI-1 predefined attribute keyvals
 *         if (keyval == MPI_TAG_UB or             # <<<<<<<<<<<<<<
 *             keyval == MPI_HOST or
 *             keyval == MPI_IO or
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1032
 *             return (<int*>attrval)[0]
 *         # MPI-2 predefined attribute keyvals
 *         elif (keyval == MPI_UNIVERSE_SIZE or             # <<<<<<<<<<<<<<
 *               keyval == MPI_APPNUM or
 *               keyval == MPI_LASTUSEDCODE):
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_UNIVERSE_SIZE) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L10_bool_binop_done;
  }

  /* "mpi4py/MPI/Comm.pyx":1033
 *         # MPI-2 predefined attribute keyvals
 *         elif (keyval == MPI_UNIVERSE_SIZE or
 *               keyval == MPI_APPNUM or             # <<<<<<<<<<<<<<
 *               keyval == MPI_LASTUSEDCODE):
 *             return (<int*>attrval)[0]
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_APPNUM) != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L10_bool_binop_done;
  }

  /* "mpi4py/MPI/Comm.pyx":1034
 *         elif (keyval == MPI_UNIVERSE_SIZE or
 *               keyval == MPI_APPNUM or
 *               keyval == MPI_LASTUSEDCODE):             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         # user-defined attribute keyval
 */
  __pyx_t_3 = ((__pyx_v_keyval == MPI_LASTUSEDCODE) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L10_bool_binop_done:;

  /* "mpi4py/MPI/Comm.pyx":1032
 *             return (<int*>attrval)[0]
 *         # MPI-2 predefined attribute keyvals
 *         elif (keyval == MPI_UNIVERSE_SIZE or             # <<<<<<<<<<<<<<
 *               keyval == MPI_APPNUM or
 *               keyval == MPI_LASTUSEDCODE):
 */
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1035
 *               keyval == MPI_APPNUM or
 *               keyval == MPI_LASTUSEDCODE):
 *             return (<int*>attrval)[0]             # <<<<<<<<<<<<<<
 *         # user-defined attribute keyval
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyInt_From_int((((int *)__pyx_v_attrval)[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1032
 *             return (<int*>attrval)[0]
 *         # MPI-2 predefined attribute keyvals
 *         elif (keyval == MPI_UNIVERSE_SIZE or             # <<<<<<<<<<<<<<
 *               keyval == MPI_APPNUM or
 *               keyval == MPI_LASTUSEDCODE):
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1037
 *             return (<int*>attrval)[0]
 *         # user-defined attribute keyval
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)             # <<<<<<<<<<<<<<
 * 
 *     def Set_attr(self, int keyval, object attrval):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(__pyx_v_self->ob_mpi, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1016
 *     # ----------
 * 
 *     def Get_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve attribute value by key
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1039
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 * 
 *     def Set_attr(self, int keyval, object attrval):             # <<<<<<<<<<<<<<
 *         """
 *         Store attribute value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_155Set_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_154Set_attr[] = "Comm.Set_attr(self, int keyval, attrval)\n\n        Store attribute value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_155Set_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_v_attrval = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,&__pyx_n_s_attrval,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_attrval)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Set_attr", 1, 2, 2, 1); __PYX_ERR(7, 1039, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_attr") < 0)) __PYX_ERR(7, 1039, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1039, __pyx_L3_error)
    __pyx_v_attrval = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_attr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1039, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_154Set_attr(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_keyval, __pyx_v_attrval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_154Set_attr(struct PyMPICommObject *__pyx_v_self, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_attr", 0);

  /* "mpi4py/MPI/Comm.pyx":1043
 *         Store attribute value associated with a key
 *         """
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)             # <<<<<<<<<<<<<<
 * 
 *     def Delete_attr(self, int keyval):
 */
  __pyx_t_1 = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(__pyx_v_self->ob_mpi, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1043, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1039
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 * 
 *     def Set_attr(self, int keyval, object attrval):             # <<<<<<<<<<<<<<
 *         """
 *         Store attribute value associated with a key
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1045
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)
 * 
 *     def Delete_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Delete attribute value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_157Delete_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_156Delete_attr[] = "Comm.Delete_attr(self, int keyval)\n\n        Delete attribute value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_157Delete_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Delete_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Delete_attr") < 0)) __PYX_ERR(7, 1045, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1045, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Delete_attr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1045, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Delete_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_156Delete_attr(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_156Delete_attr(struct PyMPICommObject *__pyx_v_self, int __pyx_v_keyval) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Delete_attr", 0);

  /* "mpi4py/MPI/Comm.pyx":1049
 *         Delete attribute value associated with a key
 *         """
 *         CHKERR( MPI_Comm_delete_attr(self.ob_mpi, keyval) )             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_delete_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1049, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1045
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)
 * 
 *     def Delete_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Delete attribute value associated with a key
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Delete_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1052
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for communicators
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_159Create_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_158Create_keyval[] = "Comm.Create_keyval(type cls, copy_fn=None, delete_fn=None, nopython=False)\n\n        Create a new attribute key for communicators\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_159Create_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_copy_fn = 0;
  PyObject *__pyx_v_delete_fn = 0;
  PyObject *__pyx_v_nopython = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_keyval (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_copy_fn,&__pyx_n_s_delete_fn,&__pyx_n_s_nopython,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy_fn);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delete_fn);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nopython);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_keyval") < 0)) __PYX_ERR(7, 1052, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_copy_fn = values[0];
    __pyx_v_delete_fn = values[1];
    __pyx_v_nopython = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_keyval", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1052, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Create_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_158Create_keyval(((PyTypeObject*)__pyx_v_cls), __pyx_v_copy_fn, __pyx_v_delete_fn, __pyx_v_nopython);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_158Create_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython) {
  PyObject *__pyx_v_state = 0;
  int __pyx_v_keyval;
  MPI_Comm_copy_attr_function *__pyx_v__copy;
  MPI_Comm_delete_attr_function *__pyx_v__del;
  void *__pyx_v_extra_state;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_keyval", 0);

  /* "mpi4py/MPI/Comm.pyx":1056
 *         Create a new attribute key for communicators
 *         """
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)             # <<<<<<<<<<<<<<
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Comm_copy_attr_function *_copy = PyMPI_attr_copy_fn
 */
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_copy_fn);
  __Pyx_GIVEREF(__pyx_v_copy_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_copy_fn);
  __Pyx_INCREF(__pyx_v_delete_fn);
  __Pyx_GIVEREF(__pyx_v_delete_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_delete_fn);
  __Pyx_INCREF(__pyx_v_nopython);
  __Pyx_GIVEREF(__pyx_v_nopython);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_nopython);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6mpi4py_3MPI__p_keyval), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_state = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1057
 *         """
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)
 *         cdef int keyval = MPI_KEYVAL_INVALID             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Comm_delete_attr_function *_del = PyMPI_attr_delete_fn
 */
  __pyx_v_keyval = MPI_KEYVAL_INVALID;

  /* "mpi4py/MPI/Comm.pyx":1058
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Comm_copy_attr_function *_copy = PyMPI_attr_copy_fn             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state
 */
  __pyx_v__copy = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn;

  /* "mpi4py/MPI/Comm.pyx":1059
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Comm_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Comm_delete_attr_function *_del = PyMPI_attr_delete_fn             # <<<<<<<<<<<<<<
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Comm_create_keyval(_copy, _del, &keyval, extra_state) )
 */
  __pyx_v__del = __pyx_fuse_1__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn;

  /* "mpi4py/MPI/Comm.pyx":1060
 *         cdef MPI_Comm_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Comm_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_create_keyval(_copy, _del, &keyval, extra_state) )
 *         comm_keyval[keyval] = state
 */
  __pyx_v_extra_state = ((void *)__pyx_v_state);

  /* "mpi4py/MPI/Comm.pyx":1061
 *         cdef MPI_Comm_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Comm_create_keyval(_copy, _del, &keyval, extra_state) )             # <<<<<<<<<<<<<<
 *         comm_keyval[keyval] = state
 *         return keyval
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_create_keyval(__pyx_v__copy, __pyx_v__del, (&__pyx_v_keyval), __pyx_v_extra_state)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1061, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1062
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Comm_create_keyval(_copy, _del, &keyval, extra_state) )
 *         comm_keyval[keyval] = state             # <<<<<<<<<<<<<<
 *         return keyval
 * 
 */
  if (unlikely(__pyx_v_6mpi4py_3MPI_comm_keyval == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(7, 1062, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(PyDict_SetItem(__pyx_v_6mpi4py_3MPI_comm_keyval, __pyx_t_2, __pyx_v_state) < 0)) __PYX_ERR(7, 1062, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1063
 *         CHKERR( MPI_Comm_create_keyval(_copy, _del, &keyval, extra_state) )
 *         comm_keyval[keyval] = state
 *         return keyval             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1052
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for communicators
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Create_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1066
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for communicators
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_161Free_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_160Free_keyval[] = "Comm.Free_keyval(type cls, int keyval)\n\n        Free and attribute key for communicators\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_161Free_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free_keyval (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Free_keyval") < 0)) __PYX_ERR(7, 1066, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1066, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Free_keyval", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1066, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Free_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_160Free_keyval(((PyTypeObject*)__pyx_v_cls), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_160Free_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_keyval) {
  int __pyx_v_keyval_save;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Free_keyval", 0);

  /* "mpi4py/MPI/Comm.pyx":1070
 *         Free and attribute key for communicators
 *         """
 *         cdef int keyval_save = keyval             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_free_keyval(&keyval) )
 *         try: del comm_keyval[keyval_save]
 */
  __pyx_v_keyval_save = __pyx_v_keyval;

  /* "mpi4py/MPI/Comm.pyx":1071
 *         """
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Comm_free_keyval(&keyval) )             # <<<<<<<<<<<<<<
 *         try: del comm_keyval[keyval_save]
 *         except KeyError: pass
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_free_keyval((&__pyx_v_keyval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1071, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1072
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Comm_free_keyval(&keyval) )
 *         try: del comm_keyval[keyval_save]             # <<<<<<<<<<<<<<
 *         except KeyError: pass
 *         return keyval
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {
      if (unlikely(__pyx_v_6mpi4py_3MPI_comm_keyval == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(7, 1072, __pyx_L3_error)
      }
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_keyval_save); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1072, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(PyDict_DelItem(__pyx_v_6mpi4py_3MPI_comm_keyval, __pyx_t_5) < 0)) __PYX_ERR(7, 1072, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/Comm.pyx":1073
 *         CHKERR( MPI_Comm_free_keyval(&keyval) )
 *         try: del comm_keyval[keyval_save]
 *         except KeyError: pass             # <<<<<<<<<<<<<<
 *         return keyval
 * 
 */
    __pyx_t_1 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_1) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/Comm.pyx":1072
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Comm_free_keyval(&keyval) )
 *         try: del comm_keyval[keyval_save]             # <<<<<<<<<<<<<<
 *         except KeyError: pass
 *         return keyval
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/Comm.pyx":1074
 *         try: del comm_keyval[keyval_save]
 *         except KeyError: pass
 *         return keyval             # <<<<<<<<<<<<<<
 * 
 *     # Error handling
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1066
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for communicators
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Free_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1079
 *     # --------------
 * 
 *     def Get_errhandler(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the error handler for a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_163Get_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_162Get_errhandler[] = "Comm.Get_errhandler(self)\n\n        Get the error handler for a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_163Get_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_errhandler (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_errhandler", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_errhandler", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_162Get_errhandler(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_162Get_errhandler(struct PyMPICommObject *__pyx_v_self) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_errhandler", 0);

  /* "mpi4py/MPI/Comm.pyx":1083
 *         Get the error handler for a communicator
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )
 *         return errhandler
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Errhandler(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1083, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1084
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         CHKERR( MPI_Comm_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return errhandler
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_get_errhandler(__pyx_v_self->ob_mpi, (&__pyx_v_errhandler->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1084, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1085
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         CHKERR( MPI_Comm_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )
 *         return errhandler             # <<<<<<<<<<<<<<
 * 
 *     def Set_errhandler(self, Errhandler errhandler):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_errhandler));
  __pyx_r = ((PyObject *)__pyx_v_errhandler);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1079
 *     # --------------
 * 
 *     def Get_errhandler(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the error handler for a communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_errhandler);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1087
 *         return errhandler
 * 
 *     def Set_errhandler(self, Errhandler errhandler):             # <<<<<<<<<<<<<<
 *         """
 *         Set the error handler for a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_165Set_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_164Set_errhandler[] = "Comm.Set_errhandler(self, Errhandler errhandler)\n\n        Set the error handler for a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_165Set_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_errhandler (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errhandler,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errhandler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_errhandler") < 0)) __PYX_ERR(7, 1087, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_errhandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1087, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_errhandler), __pyx_ptype_6mpi4py_3MPI_Errhandler, 0, "errhandler", 0))) __PYX_ERR(7, 1087, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_164Set_errhandler(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_errhandler);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_164Set_errhandler(struct PyMPICommObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_errhandler", 0);

  /* "mpi4py/MPI/Comm.pyx":1091
 *         Set the error handler for a communicator
 *         """
 *         CHKERR( MPI_Comm_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Call_errhandler(self, int errorcode):
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_errhandler(__pyx_v_self->ob_mpi, __pyx_v_errhandler->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1091, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1087
 *         return errhandler
 * 
 *     def Set_errhandler(self, Errhandler errhandler):             # <<<<<<<<<<<<<<
 *         """
 *         Set the error handler for a communicator
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1093
 *         CHKERR( MPI_Comm_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )
 * 
 *     def Call_errhandler(self, int errorcode):             # <<<<<<<<<<<<<<
 *         """
 *         Call the error handler installed on a communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_167Call_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_166Call_errhandler[] = "Comm.Call_errhandler(self, int errorcode)\n\n        Call the error handler installed on a communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_167Call_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Call_errhandler (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Call_errhandler") < 0)) __PYX_ERR(7, 1093, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1093, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Call_errhandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1093, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Call_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_166Call_errhandler(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_errorcode);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_166Call_errhandler(struct PyMPICommObject *__pyx_v_self, int __pyx_v_errorcode) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Call_errhandler", 0);

  /* "mpi4py/MPI/Comm.pyx":1097
 *         Call the error handler installed on a communicator
 *         """
 *         CHKERR( MPI_Comm_call_errhandler(self.ob_mpi, errorcode) )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_call_errhandler(__pyx_v_self->ob_mpi, __pyx_v_errorcode)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1097, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1093
 *         CHKERR( MPI_Comm_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )
 * 
 *     def Call_errhandler(self, int errorcode):             # <<<<<<<<<<<<<<
 *         """
 *         Call the error handler installed on a communicator
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Call_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1100
 * 
 * 
 *     def Abort(self, int errorcode=0):             # <<<<<<<<<<<<<<
 *         """
 *         Terminate MPI execution environment
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_169Abort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_168Abort[] = "Comm.Abort(self, int errorcode=0)\n\n        Terminate MPI execution environment\n\n        .. warning:: This is a direct call, use it with care!!!.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_169Abort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Abort (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Abort") < 0)) __PYX_ERR(7, 1100, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1100, __pyx_L3_error)
    } else {
      __pyx_v_errorcode = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Abort", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1100, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Abort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_168Abort(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_errorcode);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_168Abort(struct PyMPICommObject *__pyx_v_self, int __pyx_v_errorcode) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Abort", 0);

  /* "mpi4py/MPI/Comm.pyx":1106
 *         .. warning:: This is a direct call, use it with care!!!.
 *         """
 *         CHKERR( MPI_Abort(self.ob_mpi, errorcode) )             # <<<<<<<<<<<<<<
 * 
 *     # Naming Objects
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Abort(__pyx_v_self->ob_mpi, __pyx_v_errorcode)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1106, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1100
 * 
 * 
 *     def Abort(self, int errorcode=0):             # <<<<<<<<<<<<<<
 *         """
 *         Terminate MPI execution environment
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Abort", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1111
 *     # --------------
 * 
 *     def Get_name(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the print name for this communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_171Get_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_170Get_name[] = "Comm.Get_name(self)\n\n        Get the print name for this communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_171Get_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_name (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_name", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_name", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_170Get_name(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_170Get_name(struct PyMPICommObject *__pyx_v_self) {
  char __pyx_v_name[(MPI_MAX_OBJECT_NAME + 1)];
  int __pyx_v_nlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_name", 0);

  /* "mpi4py/MPI/Comm.pyx":1116
 *         """
 *         cdef char name[MPI_MAX_OBJECT_NAME+1]
 *         cdef int nlen = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_get_name(self.ob_mpi, name, &nlen) )
 *         return tompistr(name, nlen)
 */
  __pyx_v_nlen = 0;

  /* "mpi4py/MPI/Comm.pyx":1117
 *         cdef char name[MPI_MAX_OBJECT_NAME+1]
 *         cdef int nlen = 0
 *         CHKERR( MPI_Comm_get_name(self.ob_mpi, name, &nlen) )             # <<<<<<<<<<<<<<
 *         return tompistr(name, nlen)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_get_name(__pyx_v_self->ob_mpi, __pyx_v_name, (&__pyx_v_nlen))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1117, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1118
 *         cdef int nlen = 0
 *         CHKERR( MPI_Comm_get_name(self.ob_mpi, name, &nlen) )
 *         return tompistr(name, nlen)             # <<<<<<<<<<<<<<
 * 
 *     def Set_name(self, name):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_name, __pyx_v_nlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1111
 *     # --------------
 * 
 *     def Get_name(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the print name for this communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Get_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1120
 *         return tompistr(name, nlen)
 * 
 *     def Set_name(self, name):             # <<<<<<<<<<<<<<
 *         """
 *         Set the print name for this communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_173Set_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_172Set_name[] = "Comm.Set_name(self, name)\n\n        Set the print name for this communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_173Set_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_name (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name_2,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name_2)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_name") < 0)) __PYX_ERR(7, 1120, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_name", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1120, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_172Set_name(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_172Set_name(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_name) {
  char *__pyx_v_cname;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Set_name", 0);
  __Pyx_INCREF(__pyx_v_name);

  /* "mpi4py/MPI/Comm.pyx":1124
 *         Set the print name for this communicator
 *         """
 *         cdef char *cname = NULL             # <<<<<<<<<<<<<<
 *         name = asmpistr(name, &cname)
 *         CHKERR( MPI_Comm_set_name(self.ob_mpi, cname) )
 */
  __pyx_v_cname = NULL;

  /* "mpi4py/MPI/Comm.pyx":1125
 *         """
 *         cdef char *cname = NULL
 *         name = asmpistr(name, &cname)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_set_name(self.ob_mpi, cname) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1126
 *         cdef char *cname = NULL
 *         name = asmpistr(name, &cname)
 *         CHKERR( MPI_Comm_set_name(self.ob_mpi, cname) )             # <<<<<<<<<<<<<<
 * 
 *     property name:
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_set_name(__pyx_v_self->ob_mpi, __pyx_v_cname)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1126, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1120
 *         return tompistr(name, nlen)
 * 
 *     def Set_name(self, name):             # <<<<<<<<<<<<<<
 *         """
 *         Set the print name for this communicator
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.Set_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1130
 *     property name:
 *         """communicator name"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_name()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4name___get__(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_4name___get__(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1131
 *         """communicator name"""
 *         def __get__(self):
 *             return self.Get_name()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_name(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1130
 *     property name:
 *         """communicator name"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_name()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1132
 *         def __get__(self):
 *             return self.Get_name()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_name(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4Comm_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4Comm_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_4name_2__set__(((struct PyMPICommObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4Comm_4name_2__set__(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Comm.pyx":1133
 *             return self.Get_name()
 *         def __set__(self, value):
 *             self.Set_name(value)             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1132
 *         def __get__(self):
 *             return self.Get_name()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_name(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1138
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_175py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_174py2f[] = "Comm.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_175py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_174py2f(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_174py2f(struct PyMPICommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Comm.pyx":1141
 *         """
 *         """
 *         return MPI_Comm_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Comm_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1138
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1144
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_177f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_176f2py[] = "Comm.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_177f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(7, 1144, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1144, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_176f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_176f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Fint __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Comm.pyx":1147
 *         """
 *         """
 *         cdef MPI_Comm comm = MPI_Comm_f2c(arg)             # <<<<<<<<<<<<<<
 *         return PyMPIComm_New(comm)
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_1 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(7, 1147, __pyx_L1_error)
  __pyx_v_comm = MPI_Comm_f2c(__pyx_t_1);

  /* "mpi4py/MPI/Comm.pyx":1148
 *         """
 *         cdef MPI_Comm comm = MPI_Comm_f2c(arg)
 *         return PyMPIComm_New(comm)             # <<<<<<<<<<<<<<
 * 
 *     # Python Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPIComm_New(__pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1144
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1153
 *     # --------------------
 *     #
 *     def send(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Send"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_179send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_178send[] = "Comm.send(self, obj, int dest, int tag=0)\nSend";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_179send(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("send (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("send", 0, 2, 3, 1); __PYX_ERR(7, 1153, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "send") < 0)) __PYX_ERR(7, 1153, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1153, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1153, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("send", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1153, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_178send(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_178send(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("send", 0);

  /* "mpi4py/MPI/Comm.pyx":1155
 *     def send(self, obj, int dest, int tag=0):
 *         """Send"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_send(obj, dest, tag, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1156
 *         """Send"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_send(obj, dest, tag, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def bsend(self, obj, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_send(__pyx_v_obj, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1153
 *     # --------------------
 *     #
 *     def send(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Send"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.send", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1158
 *         return PyMPI_send(obj, dest, tag, comm)
 *     #
 *     def bsend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_181bsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_180bsend[] = "Comm.bsend(self, obj, int dest, int tag=0)\nSend in buffered mode";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_181bsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bsend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bsend", 0, 2, 3, 1); __PYX_ERR(7, 1158, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bsend") < 0)) __PYX_ERR(7, 1158, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1158, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1158, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bsend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1158, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.bsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_180bsend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_180bsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("bsend", 0);

  /* "mpi4py/MPI/Comm.pyx":1160
 *     def bsend(self, obj, int dest, int tag=0):
 *         """Send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_bsend(obj, dest, tag, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1161
 *         """Send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_bsend(obj, dest, tag, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def ssend(self, obj, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_bsend(__pyx_v_obj, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1158
 *         return PyMPI_send(obj, dest, tag, comm)
 *     #
 *     def bsend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.bsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1163
 *         return PyMPI_bsend(obj, dest, tag, comm)
 *     #
 *     def ssend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_183ssend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_182ssend[] = "Comm.ssend(self, obj, int dest, int tag=0)\nSend in synchronous mode";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_183ssend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ssend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ssend", 0, 2, 3, 1); __PYX_ERR(7, 1163, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ssend") < 0)) __PYX_ERR(7, 1163, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1163, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1163, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ssend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1163, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.ssend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_182ssend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_182ssend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("ssend", 0);

  /* "mpi4py/MPI/Comm.pyx":1165
 *     def ssend(self, obj, int dest, int tag=0):
 *         """Send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_ssend(obj, dest, tag, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1166
 *         """Send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_ssend(obj, dest, tag, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_ssend(__pyx_v_obj, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1163
 *         return PyMPI_bsend(obj, dest, tag, comm)
 *     #
 *     def ssend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.ssend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1168
 *         return PyMPI_ssend(obj, dest, tag, comm)
 *     #
 *     def recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """Receive"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_185recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_184recv[] = "Comm.recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nReceive";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_185recv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("recv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[4] = {0,0,0,0};
    values[0] = ((PyObject *)Py_None);

    /* "mpi4py/MPI/Comm.pyx":1169
 *     #
 *     def recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG,
 *              Status status=None):             # <<<<<<<<<<<<<<
 *         """Receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */
    values[3] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "recv") < 0)) __PYX_ERR(7, 1168, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1168, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__65;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1168, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__66;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("recv", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1168, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 1169, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_184recv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":1168
 *         return PyMPI_ssend(obj, dest, tag, comm)
 *     #
 *     def recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """Receive"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_184recv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Comm __pyx_v_comm;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("recv", 0);

  /* "mpi4py/MPI/Comm.pyx":1171
 *              Status status=None):
 *         """Receive"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_recv(buf, source, tag, comm, statusp)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1172
 *         """Receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         return PyMPI_recv(buf, source, tag, comm, statusp)
 *     #
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":1173
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_recv(buf, source, tag, comm, statusp)             # <<<<<<<<<<<<<<
 *     #
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_recv(__pyx_v_buf, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_statusp); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1168
 *         return PyMPI_ssend(obj, dest, tag, comm)
 *     #
 *     def recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """Receive"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1175
 *         return PyMPI_recv(buf, source, tag, comm, statusp)
 *     #
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_187sendrecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_186sendrecv[] = "Comm.sendrecv(self, sendobj, int dest, int sendtag=0, recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG, Status status=None)\nSend and Receive";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_187sendrecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  int __pyx_v_dest;
  int __pyx_v_sendtag;
  PyObject *__pyx_v_recvbuf = 0;
  int __pyx_v_source;
  int __pyx_v_recvtag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sendrecv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_dest,&__pyx_n_s_sendtag,&__pyx_n_s_recvbuf,&__pyx_n_s_source,&__pyx_n_s_recvtag,&__pyx_n_s_status,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};

    /* "mpi4py/MPI/Comm.pyx":1176
 *     #
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                  Status status=None):
 *         """Send and Receive"""
 */
    values[3] = ((PyObject *)Py_None);

    /* "mpi4py/MPI/Comm.pyx":1177
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):             # <<<<<<<<<<<<<<
 *         """Send and Receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */
    values[6] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("sendrecv", 0, 2, 7, 1); __PYX_ERR(7, 1175, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendtag);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvtag);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sendrecv") < 0)) __PYX_ERR(7, 1175, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1175, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_sendtag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_sendtag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1175, __pyx_L3_error)
    } else {
      __pyx_v_sendtag = ((int)0);
    }
    __pyx_v_recvbuf = values[3];
    if (values[4]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1176, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__67;
    }
    if (values[5]) {
      __pyx_v_recvtag = __Pyx_PyInt_As_int(values[5]); if (unlikely((__pyx_v_recvtag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1176, __pyx_L3_error)
    } else {
      __pyx_v_recvtag = __pyx_k__68;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[6]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sendrecv", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1175, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.sendrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 1177, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_186sendrecv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_recvbuf, __pyx_v_source, __pyx_v_recvtag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":1175
 *         return PyMPI_recv(buf, source, tag, comm, statusp)
 *     #
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_186sendrecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, int __pyx_v_dest, int __pyx_v_sendtag, PyObject *__pyx_v_recvbuf, int __pyx_v_source, int __pyx_v_recvtag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Comm __pyx_v_comm;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("sendrecv", 0);

  /* "mpi4py/MPI/Comm.pyx":1179
 *                  Status status=None):
 *         """Send and Receive"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_sendrecv(sendobj, dest,   sendtag,
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1180
 *         """Send and Receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         return PyMPI_sendrecv(sendobj, dest,   sendtag,
 *                               recvbuf, source, recvtag,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":1181
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_sendrecv(sendobj, dest,   sendtag,             # <<<<<<<<<<<<<<
 *                               recvbuf, source, recvtag,
 *                               comm, statusp)
 */
  __Pyx_XDECREF(__pyx_r);

  /* "mpi4py/MPI/Comm.pyx":1183
 *         return PyMPI_sendrecv(sendobj, dest,   sendtag,
 *                               recvbuf, source, recvtag,
 *                               comm, statusp)             # <<<<<<<<<<<<<<
 *     #
 *     def isend(self, obj, int dest, int tag=0):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_sendrecv(__pyx_v_sendobj, __pyx_v_dest, __pyx_v_sendtag, __pyx_v_recvbuf, __pyx_v_source, __pyx_v_recvtag, __pyx_v_comm, __pyx_v_statusp); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1175
 *         return PyMPI_recv(buf, source, tag, comm, statusp)
 *     #
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,             # <<<<<<<<<<<<<<
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,
 *                  Status status=None):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.sendrecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1185
 *                               comm, statusp)
 *     #
 *     def isend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Nonblocking send"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_189isend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_188isend[] = "Comm.isend(self, obj, int dest, int tag=0)\nNonblocking send";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_189isend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("isend", 0, 2, 3, 1); __PYX_ERR(7, 1185, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isend") < 0)) __PYX_ERR(7, 1185, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1185, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1185, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("isend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1185, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.isend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_188isend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_188isend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("isend", 0);

  /* "mpi4py/MPI/Comm.pyx":1187
 *     def isend(self, obj, int dest, int tag=0):
 *         """Nonblocking send"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_isend(obj, dest, tag, comm, &request.ob_mpi)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1188
 *         """Nonblocking send"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         request.ob_buf = PyMPI_isend(obj, dest, tag, comm, &request.ob_mpi)
 *         return request
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1188, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1189
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_isend(obj, dest, tag, comm, &request.ob_mpi)             # <<<<<<<<<<<<<<
 *         return request
 *     #
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_isend(__pyx_v_obj, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_request->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1190
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_isend(obj, dest, tag, comm, &request.ob_mpi)
 *         return request             # <<<<<<<<<<<<<<
 *     #
 *     def ibsend(self, obj, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1185
 *                               comm, statusp)
 *     #
 *     def isend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Nonblocking send"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.isend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1192
 *         return request
 *     #
 *     def ibsend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Nonblocking send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_191ibsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_190ibsend[] = "Comm.ibsend(self, obj, int dest, int tag=0)\nNonblocking send in buffered mode";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_191ibsend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ibsend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ibsend", 0, 2, 3, 1); __PYX_ERR(7, 1192, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ibsend") < 0)) __PYX_ERR(7, 1192, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1192, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1192, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ibsend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1192, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.ibsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_190ibsend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_190ibsend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("ibsend", 0);

  /* "mpi4py/MPI/Comm.pyx":1194
 *     def ibsend(self, obj, int dest, int tag=0):
 *         """Nonblocking send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_ibsend(obj, dest, tag, comm, &request.ob_mpi)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1195
 *         """Nonblocking send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         request.ob_buf = PyMPI_ibsend(obj, dest, tag, comm, &request.ob_mpi)
 *         return request
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1195, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1196
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_ibsend(obj, dest, tag, comm, &request.ob_mpi)             # <<<<<<<<<<<<<<
 *         return request
 *     #
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_ibsend(__pyx_v_obj, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_request->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1197
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_ibsend(obj, dest, tag, comm, &request.ob_mpi)
 *         return request             # <<<<<<<<<<<<<<
 *     #
 *     def issend(self, obj, int dest, int tag=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1192
 *         return request
 *     #
 *     def ibsend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Nonblocking send in buffered mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.ibsend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1199
 *         return request
 *     #
 *     def issend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Nonblocking send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_193issend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_192issend[] = "Comm.issend(self, obj, int dest, int tag=0)\nNonblocking send in synchronous mode";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_193issend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_dest;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("issend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_dest,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("issend", 0, 2, 3, 1); __PYX_ERR(7, 1199, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "issend") < 0)) __PYX_ERR(7, 1199, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    __pyx_v_dest = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_dest == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1199, __pyx_L3_error)
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1199, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("issend", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1199, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.issend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_192issend(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_dest, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_192issend(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_dest, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("issend", 0);

  /* "mpi4py/MPI/Comm.pyx":1201
 *     def issend(self, obj, int dest, int tag=0):
 *         """Nonblocking send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_issend(obj, dest, tag, comm, &request.ob_mpi)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1202
 *         """Nonblocking send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         request.ob_buf = PyMPI_issend(obj, dest, tag, comm, &request.ob_mpi)
 *         return request
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1202, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1203
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_issend(obj, dest, tag, comm, &request.ob_mpi)             # <<<<<<<<<<<<<<
 *         return request
 *     #
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_issend(__pyx_v_obj, __pyx_v_dest, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_request->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1204
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_issend(obj, dest, tag, comm, &request.ob_mpi)
 *         return request             # <<<<<<<<<<<<<<
 *     #
 *     def irecv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1199
 *         return request
 *     #
 *     def issend(self, obj, int dest, int tag=0):             # <<<<<<<<<<<<<<
 *         """Nonblocking send in synchronous mode"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.issend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1206
 *         return request
 *     #
 *     def irecv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """Nonblocking receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_195irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_194irecv[] = "Comm.irecv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG)\nNonblocking receive";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_195irecv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  int __pyx_v_source;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("irecv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_source,&__pyx_n_s_tag,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "irecv") < 0)) __PYX_ERR(7, 1206, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    if (values[1]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1206, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__69;
    }
    if (values[2]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1206, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__70;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("irecv", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1206, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_194irecv(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_source, __pyx_v_tag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_194irecv(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_buf, int __pyx_v_source, int __pyx_v_tag) {
  MPI_Comm __pyx_v_comm;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("irecv", 0);

  /* "mpi4py/MPI/Comm.pyx":1208
 *     def irecv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG):
 *         """Nonblocking receive"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_irecv(buf, source, tag, comm, &request.ob_mpi)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1209
 *         """Nonblocking receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         request.ob_buf = PyMPI_irecv(buf, source, tag, comm, &request.ob_mpi)
 *         return request
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1209, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1210
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_irecv(buf, source, tag, comm, &request.ob_mpi)             # <<<<<<<<<<<<<<
 *         return request
 *     #
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_irecv(__pyx_v_buf, __pyx_v_source, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_request->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1211
 *         cdef Request request = <Request>Request.__new__(Request)
 *         request.ob_buf = PyMPI_irecv(buf, source, tag, comm, &request.ob_mpi)
 *         return request             # <<<<<<<<<<<<<<
 *     #
 *     def probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1206
 *         return request
 *     #
 *     def irecv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """Nonblocking receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.irecv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1213
 *         return request
 *     #
 *     def probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """Blocking test for a message"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_197probe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_196probe[] = "Comm.probe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nBlocking test for a message";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_197probe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("probe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":1214
 *     #
 *     def probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *               Status status=None):             # <<<<<<<<<<<<<<
 *         """Blocking test for a message"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "probe") < 0)) __PYX_ERR(7, 1213, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1213, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__71;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1213, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__72;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("probe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1213, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 1214, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_196probe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":1213
 *         return request
 *     #
 *     def probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """Blocking test for a message"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_196probe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Comm __pyx_v_comm;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("probe", 0);

  /* "mpi4py/MPI/Comm.pyx":1216
 *               Status status=None):
 *         """Blocking test for a message"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_probe(source, tag, comm, statusp)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1217
 *         """Blocking test for a message"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         return PyMPI_probe(source, tag, comm, statusp)
 *     #
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":1218
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_probe(source, tag, comm, statusp)             # <<<<<<<<<<<<<<
 *     #
 *     def iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_probe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_statusp); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1213
 *         return request
 *     #
 *     def probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """Blocking test for a message"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.probe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1220
 *         return PyMPI_probe(source, tag, comm, statusp)
 *     #
 *     def iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Nonblocking test for a message"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_199iprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_198iprobe[] = "Comm.iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nNonblocking test for a message";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_199iprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("iprobe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":1221
 *     #
 *     def iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *                Status status=None):             # <<<<<<<<<<<<<<
 *         """Nonblocking test for a message"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "iprobe") < 0)) __PYX_ERR(7, 1220, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1220, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__73;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1220, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__74;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("iprobe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1220, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 1221, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_198iprobe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":1220
 *         return PyMPI_probe(source, tag, comm, statusp)
 *     #
 *     def iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Nonblocking test for a message"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_198iprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Comm __pyx_v_comm;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("iprobe", 0);

  /* "mpi4py/MPI/Comm.pyx":1223
 *                Status status=None):
 *         """Nonblocking test for a message"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_iprobe(source, tag, comm, statusp)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1224
 *         """Nonblocking test for a message"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         return PyMPI_iprobe(source, tag, comm, statusp)
 *     #
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":1225
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         return PyMPI_iprobe(source, tag, comm, statusp)             # <<<<<<<<<<<<<<
 *     #
 *     def mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_iprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, __pyx_v_statusp); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1220
 *         return PyMPI_probe(source, tag, comm, statusp)
 *     #
 *     def iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Nonblocking test for a message"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.iprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1227
 *         return PyMPI_iprobe(source, tag, comm, statusp)
 *     #
 *     def mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Blocking test for a matched message"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_201mprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_200mprobe[] = "Comm.mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nBlocking test for a matched message";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_201mprobe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mprobe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":1228
 *     #
 *     def mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *                Status status=None):             # <<<<<<<<<<<<<<
 *         """Blocking test for a matched message"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mprobe") < 0)) __PYX_ERR(7, 1227, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1227, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__75;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1227, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__76;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("mprobe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1227, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.mprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 1228, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_200mprobe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":1227
 *         return PyMPI_iprobe(source, tag, comm, statusp)
 *     #
 *     def mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Blocking test for a matched message"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_200mprobe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  MPI_Comm __pyx_v_comm;
  MPI_Status *__pyx_v_statusp;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("mprobe", 0);

  /* "mpi4py/MPI/Comm.pyx":1230
 *                Status status=None):
 *         """Blocking test for a matched message"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         cdef Message message = <Message>Message.__new__(Message)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1231
 *         """Blocking test for a matched message"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":1232
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         cdef Message message = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm,
 *                                       &message.ob_mpi, statusp)
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1232, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1233
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm,             # <<<<<<<<<<<<<<
 *                                       &message.ob_mpi, statusp)
 *         return message
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_mprobe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_message->ob_mpi), __pyx_v_statusp); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_message->ob_buf);
  __Pyx_DECREF(__pyx_v_message->ob_buf);
  __pyx_v_message->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1235
 *         message.ob_buf = PyMPI_mprobe(source, tag, comm,
 *                                       &message.ob_mpi, statusp)
 *         return message             # <<<<<<<<<<<<<<
 *     #
 *     def improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1227
 *         return PyMPI_iprobe(source, tag, comm, statusp)
 *     #
 *     def mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Blocking test for a matched message"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.mprobe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1237
 *         return message
 *     #
 *     def improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """Nonblocking test for a matched message"""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_203improbe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_202improbe[] = "Comm.improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None)\nNonblocking test for a matched message";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_203improbe(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_source;
  int __pyx_v_tag;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("improbe (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_tag,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};

    /* "mpi4py/MPI/Comm.pyx":1238
 *     #
 *     def improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,
 *                 Status status=None):             # <<<<<<<<<<<<<<
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0
 */
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "improbe") < 0)) __PYX_ERR(7, 1237, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_source = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_source == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1237, __pyx_L3_error)
    } else {
      __pyx_v_source = __pyx_k__77;
    }
    if (values[1]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1237, __pyx_L3_error)
    } else {
      __pyx_v_tag = __pyx_k__78;
    }
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("improbe", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1237, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.improbe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(7, 1238, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_202improbe(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_source, __pyx_v_tag, __pyx_v_status);

  /* "mpi4py/MPI/Comm.pyx":1237
 *         return message
 *     #
 *     def improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """Nonblocking test for a matched message"""
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_202improbe(struct PyMPICommObject *__pyx_v_self, int __pyx_v_source, int __pyx_v_tag, struct PyMPIStatusObject *__pyx_v_status) {
  int __pyx_v_flag;
  MPI_Comm __pyx_v_comm;
  MPI_Status *__pyx_v_statusp;
  struct PyMPIMessageObject *__pyx_v_message = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("improbe", 0);

  /* "mpi4py/MPI/Comm.pyx":1240
 *                 Status status=None):
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Comm.pyx":1241
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         cdef Message message = <Message>Message.__new__(Message)
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1242
 *         cdef int flag = 0
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_buf = PyMPI_improbe(source, tag, comm, &flag,
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/Comm.pyx":1243
 *         cdef MPI_Comm comm = self.ob_mpi
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         cdef Message message = <Message>Message.__new__(Message)             # <<<<<<<<<<<<<<
 *         message.ob_buf = PyMPI_improbe(source, tag, comm, &flag,
 *                                        &message.ob_mpi, statusp)
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Message(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Message), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1243, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_message = ((struct PyMPIMessageObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1244
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         cdef Message message = <Message>Message.__new__(Message)
 *         message.ob_buf = PyMPI_improbe(source, tag, comm, &flag,             # <<<<<<<<<<<<<<
 *                                        &message.ob_mpi, statusp)
 *         if flag == 0: return None
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_improbe(__pyx_v_source, __pyx_v_tag, __pyx_v_comm, (&__pyx_v_flag), (&__pyx_v_message->ob_mpi), __pyx_v_statusp); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_message->ob_buf);
  __Pyx_DECREF(__pyx_v_message->ob_buf);
  __pyx_v_message->ob_buf = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1246
 *         message.ob_buf = PyMPI_improbe(source, tag, comm, &flag,
 *                                        &message.ob_mpi, statusp)
 *         if flag == 0: return None             # <<<<<<<<<<<<<<
 *         return message
 *     #
 */
  __pyx_t_4 = ((__pyx_v_flag == 0) != 0);
  if (__pyx_t_4) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1247
 *                                        &message.ob_mpi, statusp)
 *         if flag == 0: return None
 *         return message             # <<<<<<<<<<<<<<
 *     #
 *     def barrier(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_message));
  __pyx_r = ((PyObject *)__pyx_v_message);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1237
 *         return message
 *     #
 *     def improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """Nonblocking test for a matched message"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.improbe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1249
 *         return message
 *     #
 *     def barrier(self):             # <<<<<<<<<<<<<<
 *         """Barrier"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_205barrier(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_204barrier[] = "Comm.barrier(self)\nBarrier";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_205barrier(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("barrier (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("barrier", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "barrier", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_204barrier(((struct PyMPICommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_204barrier(struct PyMPICommObject *__pyx_v_self) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("barrier", 0);

  /* "mpi4py/MPI/Comm.pyx":1251
 *     def barrier(self):
 *         """Barrier"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_barrier(comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1252
 *         """Barrier"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_barrier(comm)             # <<<<<<<<<<<<<<
 *     #
 *     def bcast(self, obj, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_barrier(__pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1249
 *         return message
 *     #
 *     def barrier(self):             # <<<<<<<<<<<<<<
 *         """Barrier"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.barrier", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1254
 *         return PyMPI_barrier(comm)
 *     #
 *     def bcast(self, obj, int root=0):             # <<<<<<<<<<<<<<
 *         """Broadcast"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_207bcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_206bcast[] = "Comm.bcast(self, obj, int root=0)\nBroadcast";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_207bcast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_obj = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bcast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_root,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bcast") < 0)) __PYX_ERR(7, 1254, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_obj = values[0];
    if (values[1]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1254, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bcast", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1254, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_206bcast(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_obj, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_206bcast(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_root) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("bcast", 0);

  /* "mpi4py/MPI/Comm.pyx":1256
 *     def bcast(self, obj, int root=0):
 *         """Broadcast"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_bcast(obj, root, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1257
 *         """Broadcast"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_bcast(obj, root, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def gather(self, sendobj, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_bcast(__pyx_v_obj, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1254
 *         return PyMPI_barrier(comm)
 *     #
 *     def bcast(self, obj, int root=0):             # <<<<<<<<<<<<<<
 *         """Broadcast"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.bcast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1259
 *         return PyMPI_bcast(obj, root, comm)
 *     #
 *     def gather(self, sendobj, int root=0):             # <<<<<<<<<<<<<<
 *         """Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_209gather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_208gather[] = "Comm.gather(self, sendobj, int root=0)\nGather";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_209gather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_root,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gather") < 0)) __PYX_ERR(7, 1259, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    if (values[1]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1259, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("gather", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1259, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_208gather(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_208gather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, int __pyx_v_root) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("gather", 0);

  /* "mpi4py/MPI/Comm.pyx":1261
 *     def gather(self, sendobj, int root=0):
 *         """Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_gather(sendobj, root, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1262
 *         """Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_gather(sendobj, root, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def scatter(self, sendobj, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_gather(__pyx_v_sendobj, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1259
 *         return PyMPI_bcast(obj, root, comm)
 *     #
 *     def gather(self, sendobj, int root=0):             # <<<<<<<<<<<<<<
 *         """Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.gather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1264
 *         return PyMPI_gather(sendobj, root, comm)
 *     #
 *     def scatter(self, sendobj, int root=0):             # <<<<<<<<<<<<<<
 *         """Scatter"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_211scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_210scatter[] = "Comm.scatter(self, sendobj, int root=0)\nScatter";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_211scatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scatter (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_root,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) __PYX_ERR(7, 1264, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    if (values[1]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1264, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("scatter", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1264, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_210scatter(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_210scatter(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, int __pyx_v_root) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("scatter", 0);

  /* "mpi4py/MPI/Comm.pyx":1266
 *     def scatter(self, sendobj, int root=0):
 *         """Scatter"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_scatter(sendobj, root, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1267
 *         """Scatter"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_scatter(sendobj, root, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def allgather(self, sendobj):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_scatter(__pyx_v_sendobj, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1264
 *         return PyMPI_gather(sendobj, root, comm)
 *     #
 *     def scatter(self, sendobj, int root=0):             # <<<<<<<<<<<<<<
 *         """Scatter"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.scatter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1269
 *         return PyMPI_scatter(sendobj, root, comm)
 *     #
 *     def allgather(self, sendobj):             # <<<<<<<<<<<<<<
 *         """Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_213allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_212allgather[] = "Comm.allgather(self, sendobj)\nGather to All";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_213allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("allgather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allgather") < 0)) __PYX_ERR(7, 1269, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_sendobj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("allgather", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1269, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_212allgather(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_212allgather(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("allgather", 0);

  /* "mpi4py/MPI/Comm.pyx":1271
 *     def allgather(self, sendobj):
 *         """Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_allgather(sendobj, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1272
 *         """Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_allgather(sendobj, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def alltoall(self, sendobj):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_allgather(__pyx_v_sendobj, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1269
 *         return PyMPI_scatter(sendobj, root, comm)
 *     #
 *     def allgather(self, sendobj):             # <<<<<<<<<<<<<<
 *         """Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1274
 *         return PyMPI_allgather(sendobj, comm)
 *     #
 *     def alltoall(self, sendobj):             # <<<<<<<<<<<<<<
 *         """All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_215alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_214alltoall[] = "Comm.alltoall(self, sendobj)\nAll to All Scatter/Gather";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_215alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("alltoall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "alltoall") < 0)) __PYX_ERR(7, 1274, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_sendobj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("alltoall", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1274, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_214alltoall(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_214alltoall(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("alltoall", 0);

  /* "mpi4py/MPI/Comm.pyx":1276
 *     def alltoall(self, sendobj):
 *         """All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_alltoall(sendobj, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1277
 *         """All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_alltoall(sendobj, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def reduce(self, sendobj, op=SUM, int root=0):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_alltoall(__pyx_v_sendobj, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1274
 *         return PyMPI_allgather(sendobj, comm)
 *     #
 *     def alltoall(self, sendobj):             # <<<<<<<<<<<<<<
 *         """All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1279
 *         return PyMPI_alltoall(sendobj, comm)
 *     #
 *     def reduce(self, sendobj, op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """Reduce"""
 *         if op is None: op = SUM
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_217reduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_216reduce[] = "Comm.reduce(self, sendobj, op=SUM, int root=0)\nReduce";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_217reduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_v_op = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reduce (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_op,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    values[1] = __pyx_k__79;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reduce") < 0)) __PYX_ERR(7, 1279, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    __pyx_v_op = values[1];
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1279, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reduce", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1279, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_216reduce(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_op, __pyx_v_root);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_216reduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op, int __pyx_v_root) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  MPI_Comm __pyx_t_4;
  __Pyx_RefNannySetupContext("reduce", 0);
  __Pyx_INCREF(__pyx_v_op);

  /* "mpi4py/MPI/Comm.pyx":1281
 *     def reduce(self, sendobj, op=SUM, int root=0):
 *         """Reduce"""
 *         if op is None: op = SUM             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_reduce(sendobj, op, root, comm)
 */
  __pyx_t_1 = (__pyx_v_op == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_op, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/Comm.pyx":1282
 *         """Reduce"""
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_reduce(sendobj, op, root, comm)
 *     #
 */
  __pyx_t_4 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_4;

  /* "mpi4py/MPI/Comm.pyx":1283
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_reduce(sendobj, op, root, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def allreduce(self, sendobj, op=SUM):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_reduce(__pyx_v_sendobj, __pyx_v_op, __pyx_v_root, __pyx_v_comm); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1279
 *         return PyMPI_alltoall(sendobj, comm)
 *     #
 *     def reduce(self, sendobj, op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """Reduce"""
 *         if op is None: op = SUM
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.reduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_op);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1285
 *         return PyMPI_reduce(sendobj, op, root, comm)
 *     #
 *     def allreduce(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Reduce to All"""
 *         if op is None: op = SUM
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_219allreduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4Comm_218allreduce[] = "Comm.allreduce(self, sendobj, op=SUM)\nReduce to All";
static PyObject *__pyx_pw_6mpi4py_3MPI_4Comm_219allreduce(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("allreduce (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_op,0};
    PyObject* values[2] = {0,0};
    values[1] = __pyx_k__80;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "allreduce") < 0)) __PYX_ERR(7, 1285, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    __pyx_v_op = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("allreduce", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1285, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Comm.allreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4Comm_218allreduce(((struct PyMPICommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_op);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4Comm_218allreduce(struct PyMPICommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  MPI_Comm __pyx_t_4;
  __Pyx_RefNannySetupContext("allreduce", 0);
  __Pyx_INCREF(__pyx_v_op);

  /* "mpi4py/MPI/Comm.pyx":1287
 *     def allreduce(self, sendobj, op=SUM):
 *         """Reduce to All"""
 *         if op is None: op = SUM             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_allreduce(sendobj, op, comm)
 */
  __pyx_t_1 = (__pyx_v_op == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_op, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/Comm.pyx":1288
 *         """Reduce to All"""
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_allreduce(sendobj, op, comm)
 * 
 */
  __pyx_t_4 = __pyx_v_self->ob_mpi;
  __pyx_v_comm = __pyx_t_4;

  /* "mpi4py/MPI/Comm.pyx":1289
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_allreduce(sendobj, op, comm)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_allreduce(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1285
 *         return PyMPI_reduce(sendobj, op, root, comm)
 *     #
 *     def allreduce(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Reduce to All"""
 *         if op is None: op = SUM
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Comm.allreduce", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_op);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1298
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 1
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9Intracomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9Intracomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 1298, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1298, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 1298, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm___cinit__(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9Intracomm___cinit__(struct PyMPIIntracommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":1299
 * 
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return             # <<<<<<<<<<<<<<
 *         cdef int inter = 1
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.ob_mpi == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1300
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 1             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 *         if inter: raise TypeError(
 */
  __pyx_v_inter = 1;

  /* "mpi4py/MPI/Comm.pyx":1301
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 1
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )             # <<<<<<<<<<<<<<
 *         if inter: raise TypeError(
 *             "expecting an intracommunicator")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1301, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1302
 *         cdef int inter = 1
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 *         if inter: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting an intracommunicator")
 * 
 */
  __pyx_t_1 = (__pyx_v_inter != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__81, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(7, 1302, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Comm.pyx":1298
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 1
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1308
 *     # -------------------------
 * 
 *     def Create_cart(self, dims, periods=None, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create cartesian communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_3Create_cart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_2Create_cart[] = "Intracomm.Create_cart(self, dims, periods=None, bool reorder=False)\n\n        Create cartesian communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_3Create_cart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_dims = 0;
  PyObject *__pyx_v_periods = 0;
  int __pyx_v_reorder;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_cart (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dims,&__pyx_n_s_periods,&__pyx_n_s_reorder,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dims)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_periods);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reorder);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_cart") < 0)) __PYX_ERR(7, 1308, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dims = values[0];
    __pyx_v_periods = values[1];
    if (values[2]) {
      __pyx_v_reorder = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reorder == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1308, __pyx_L3_error)
    } else {
      __pyx_v_reorder = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_cart", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1308, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_cart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_2Create_cart(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_dims, __pyx_v_periods, __pyx_v_reorder);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_2Create_cart(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_periods, int __pyx_v_reorder) {
  int __pyx_v_ndims;
  int *__pyx_v_idims;
  int *__pyx_v_iperiods;
  struct PyMPICartcommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Create_cart", 0);
  __Pyx_INCREF(__pyx_v_dims);
  __Pyx_INCREF(__pyx_v_periods);

  /* "mpi4py/MPI/Comm.pyx":1312
 *         Create cartesian communicator
 *         """
 *         cdef int ndims = 0, *idims = NULL, *iperiods = NULL             # <<<<<<<<<<<<<<
 *         dims = getarray(dims, &ndims, &idims)
 *         if periods is None: periods = False
 */
  __pyx_v_ndims = 0;
  __pyx_v_idims = NULL;
  __pyx_v_iperiods = NULL;

  /* "mpi4py/MPI/Comm.pyx":1313
 *         """
 *         cdef int ndims = 0, *idims = NULL, *iperiods = NULL
 *         dims = getarray(dims, &ndims, &idims)             # <<<<<<<<<<<<<<
 *         if periods is None: periods = False
 *         if isinstance(periods, bool): periods = [periods] * ndims
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_dims, (&__pyx_v_ndims), (&__pyx_v_idims)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_dims, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1314
 *         cdef int ndims = 0, *idims = NULL, *iperiods = NULL
 *         dims = getarray(dims, &ndims, &idims)
 *         if periods is None: periods = False             # <<<<<<<<<<<<<<
 *         if isinstance(periods, bool): periods = [periods] * ndims
 *         periods = chkarray(periods, ndims, &iperiods)
 */
  __pyx_t_2 = (__pyx_v_periods == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __Pyx_INCREF(Py_False);
    __Pyx_DECREF_SET(__pyx_v_periods, Py_False);
  }

  /* "mpi4py/MPI/Comm.pyx":1315
 *         dims = getarray(dims, &ndims, &idims)
 *         if periods is None: periods = False
 *         if isinstance(periods, bool): periods = [periods] * ndims             # <<<<<<<<<<<<<<
 *         periods = chkarray(periods, ndims, &iperiods)
 *         #
 */
  __pyx_t_1 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_periods, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1315, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_t_1 = PyList_New(1 * ((__pyx_v_ndims<0) ? 0:__pyx_v_ndims)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1315, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    { Py_ssize_t __pyx_temp;
      for (__pyx_temp=0; __pyx_temp < __pyx_v_ndims; __pyx_temp++) {
        __Pyx_INCREF(__pyx_v_periods);
        __Pyx_GIVEREF(__pyx_v_periods);
        PyList_SET_ITEM(__pyx_t_1, __pyx_temp, __pyx_v_periods);
      }
    }
    __Pyx_DECREF_SET(__pyx_v_periods, __pyx_t_1);
    __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/Comm.pyx":1316
 *         if periods is None: periods = False
 *         if isinstance(periods, bool): periods = [periods] * ndims
 *         periods = chkarray(periods, ndims, &iperiods)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_periods, __pyx_v_ndims, (&__pyx_v_iperiods)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1316, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_periods, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1318
 *         periods = chkarray(periods, ndims, &iperiods)
 *         #
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Cart_create(
 *             self.ob_mpi, ndims, idims, iperiods, reorder, &comm.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Cartcomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Cartcomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1318, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_4 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPICartcommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":1319
 *         #
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 *         with nogil: CHKERR( MPI_Cart_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, ndims, idims, iperiods, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1320
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 *         with nogil: CHKERR( MPI_Cart_create(
 *             self.ob_mpi, ndims, idims, iperiods, reorder, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_create(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_ndims, __pyx_v_idims, __pyx_v_iperiods, __pyx_v_reorder, (&__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 1319, __pyx_L6_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1319
 *         #
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 *         with nogil: CHKERR( MPI_Cart_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, ndims, idims, iperiods, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1321
 *         with nogil: CHKERR( MPI_Cart_create(
 *             self.ob_mpi, ndims, idims, iperiods, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 1321, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1322
 *             self.ob_mpi, ndims, idims, iperiods, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Create_graph(self, index, edges, bint reorder=False):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1308
 *     # -------------------------
 * 
 *     def Create_cart(self, dims, periods=None, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create cartesian communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_cart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_dims);
  __Pyx_XDECREF(__pyx_v_periods);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1324
 *         return comm
 * 
 *     def Create_graph(self, index, edges, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create graph communicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_5Create_graph(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_4Create_graph[] = "Intracomm.Create_graph(self, index, edges, bool reorder=False)\n\n        Create graph communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_5Create_graph(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_index = 0;
  PyObject *__pyx_v_edges = 0;
  int __pyx_v_reorder;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_graph (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,&__pyx_n_s_edges,&__pyx_n_s_reorder,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_edges)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_graph", 0, 2, 3, 1); __PYX_ERR(7, 1324, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reorder);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_graph") < 0)) __PYX_ERR(7, 1324, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_index = values[0];
    __pyx_v_edges = values[1];
    if (values[2]) {
      __pyx_v_reorder = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_reorder == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1324, __pyx_L3_error)
    } else {
      __pyx_v_reorder = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_graph", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1324, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_4Create_graph(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_index, __pyx_v_edges, __pyx_v_reorder);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_4Create_graph(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_edges, int __pyx_v_reorder) {
  int __pyx_v_nnodes;
  int *__pyx_v_iindex;
  int __pyx_v_nedges;
  int *__pyx_v_iedges;
  struct PyMPIGraphcommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Create_graph", 0);
  __Pyx_INCREF(__pyx_v_index);
  __Pyx_INCREF(__pyx_v_edges);

  /* "mpi4py/MPI/Comm.pyx":1328
 *         Create graph communicator
 *         """
 *         cdef int nnodes = 0, *iindex = NULL             # <<<<<<<<<<<<<<
 *         index = getarray(index, &nnodes, &iindex)
 *         cdef int nedges = 0, *iedges = NULL
 */
  __pyx_v_nnodes = 0;
  __pyx_v_iindex = NULL;

  /* "mpi4py/MPI/Comm.pyx":1329
 *         """
 *         cdef int nnodes = 0, *iindex = NULL
 *         index = getarray(index, &nnodes, &iindex)             # <<<<<<<<<<<<<<
 *         cdef int nedges = 0, *iedges = NULL
 *         edges = getarray(edges, &nedges, &iedges)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_index, (&__pyx_v_nnodes), (&__pyx_v_iindex)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1330
 *         cdef int nnodes = 0, *iindex = NULL
 *         index = getarray(index, &nnodes, &iindex)
 *         cdef int nedges = 0, *iedges = NULL             # <<<<<<<<<<<<<<
 *         edges = getarray(edges, &nedges, &iedges)
 *         # extension: 'standard' adjacency arrays
 */
  __pyx_v_nedges = 0;
  __pyx_v_iedges = NULL;

  /* "mpi4py/MPI/Comm.pyx":1331
 *         index = getarray(index, &nnodes, &iindex)
 *         cdef int nedges = 0, *iedges = NULL
 *         edges = getarray(edges, &nedges, &iedges)             # <<<<<<<<<<<<<<
 *         # extension: 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_edges, (&__pyx_v_nedges), (&__pyx_v_iedges)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_edges, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1333
 *         edges = getarray(edges, &nedges, &iedges)
 *         # extension: 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:             # <<<<<<<<<<<<<<
 *             nnodes -= 1; iindex += 1;
 *         #
 */
  __pyx_t_3 = (((__pyx_v_iindex[0]) == 0) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (((__pyx_v_iindex[(__pyx_v_nnodes - 1)]) == __pyx_v_nedges) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1334
 *         # extension: 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:
 *             nnodes -= 1; iindex += 1;             # <<<<<<<<<<<<<<
 *         #
 *         cdef Graphcomm comm = <Graphcomm>Graphcomm.__new__(Graphcomm)
 */
    __pyx_v_nnodes = (__pyx_v_nnodes - 1);
    __pyx_v_iindex = (__pyx_v_iindex + 1);

    /* "mpi4py/MPI/Comm.pyx":1333
 *         edges = getarray(edges, &nedges, &iedges)
 *         # extension: 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:             # <<<<<<<<<<<<<<
 *             nnodes -= 1; iindex += 1;
 *         #
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1336
 *             nnodes -= 1; iindex += 1;
 *         #
 *         cdef Graphcomm comm = <Graphcomm>Graphcomm.__new__(Graphcomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Graph_create(
 *             self.ob_mpi, nnodes, iindex, iedges, reorder, &comm.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Graphcomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Graphcomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1336, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_4 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIGraphcommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":1337
 *         #
 *         cdef Graphcomm comm = <Graphcomm>Graphcomm.__new__(Graphcomm)
 *         with nogil: CHKERR( MPI_Graph_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, nnodes, iindex, iedges, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1338
 *         cdef Graphcomm comm = <Graphcomm>Graphcomm.__new__(Graphcomm)
 *         with nogil: CHKERR( MPI_Graph_create(
 *             self.ob_mpi, nnodes, iindex, iedges, reorder, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_create(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_nnodes, __pyx_v_iindex, __pyx_v_iedges, __pyx_v_reorder, (&__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 1337, __pyx_L7_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1337
 *         #
 *         cdef Graphcomm comm = <Graphcomm>Graphcomm.__new__(Graphcomm)
 *         with nogil: CHKERR( MPI_Graph_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, nnodes, iindex, iedges, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1339
 *         with nogil: CHKERR( MPI_Graph_create(
 *             self.ob_mpi, nnodes, iindex, iedges, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 1339, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1340
 *             self.ob_mpi, nnodes, iindex, iedges, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Create_dist_graph_adjacent(self, sources, destinations,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1324
 *         return comm
 * 
 *     def Create_graph(self, index, edges, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create graph communicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XDECREF(__pyx_v_edges);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1342
 *         return comm
 * 
 *     def Create_dist_graph_adjacent(self, sources, destinations,             # <<<<<<<<<<<<<<
 *                                    sourceweights=None, destweights=None,
 *                                    Info info=INFO_NULL, bint reorder=False):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_7Create_dist_graph_adjacent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_6Create_dist_graph_adjacent[] = "Intracomm.Create_dist_graph_adjacent(self, sources, destinations, sourceweights=None, destweights=None, Info info=INFO_NULL, bool reorder=False)\n\n        Create distributed graph communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_7Create_dist_graph_adjacent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sources = 0;
  PyObject *__pyx_v_destinations = 0;
  PyObject *__pyx_v_sourceweights = 0;
  PyObject *__pyx_v_destweights = 0;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  int __pyx_v_reorder;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_dist_graph_adjacent (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sources,&__pyx_n_s_destinations,&__pyx_n_s_sourceweights,&__pyx_n_s_destweights,&__pyx_n_s_info,&__pyx_n_s_reorder,0};
    PyObject* values[6] = {0,0,0,0,0,0};

    /* "mpi4py/MPI/Comm.pyx":1343
 * 
 *     def Create_dist_graph_adjacent(self, sources, destinations,
 *                                    sourceweights=None, destweights=None,             # <<<<<<<<<<<<<<
 *                                    Info info=INFO_NULL, bint reorder=False):
 *         """
 */
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = (PyObject *)__pyx_k__82;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sources)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_destinations)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_dist_graph_adjacent", 0, 2, 6, 1); __PYX_ERR(7, 1342, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sourceweights);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_destweights);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reorder);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_dist_graph_adjacent") < 0)) __PYX_ERR(7, 1342, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sources = values[0];
    __pyx_v_destinations = values[1];
    __pyx_v_sourceweights = values[2];
    __pyx_v_destweights = values[3];
    __pyx_v_info = ((struct PyMPIInfoObject *)values[4]);
    if (values[5]) {
      __pyx_v_reorder = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_reorder == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1344, __pyx_L3_error)
    } else {

      /* "mpi4py/MPI/Comm.pyx":1344
 *     def Create_dist_graph_adjacent(self, sources, destinations,
 *                                    sourceweights=None, destweights=None,
 *                                    Info info=INFO_NULL, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create distributed graph communicator
 */
      __pyx_v_reorder = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_dist_graph_adjacent", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1342, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_dist_graph_adjacent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 1344, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_6Create_dist_graph_adjacent(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sources, __pyx_v_destinations, __pyx_v_sourceweights, __pyx_v_destweights, __pyx_v_info, __pyx_v_reorder);

  /* "mpi4py/MPI/Comm.pyx":1342
 *         return comm
 * 
 *     def Create_dist_graph_adjacent(self, sources, destinations,             # <<<<<<<<<<<<<<
 *                                    sourceweights=None, destweights=None,
 *                                    Info info=INFO_NULL, bint reorder=False):
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_6Create_dist_graph_adjacent(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sources, PyObject *__pyx_v_destinations, PyObject *__pyx_v_sourceweights, PyObject *__pyx_v_destweights, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_reorder) {
  int __pyx_v_indegree;
  int *__pyx_v_isource;
  int __pyx_v_outdegree;
  int *__pyx_v_idest;
  int *__pyx_v_isourceweight;
  int *__pyx_v_idestweight;
  struct PyMPIDistgraphcommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Create_dist_graph_adjacent", 0);
  __Pyx_INCREF(__pyx_v_sources);
  __Pyx_INCREF(__pyx_v_destinations);
  __Pyx_INCREF(__pyx_v_sourceweights);
  __Pyx_INCREF(__pyx_v_destweights);

  /* "mpi4py/MPI/Comm.pyx":1348
 *         Create distributed graph communicator
 *         """
 *         cdef int indegree  = 0, *isource = NULL             # <<<<<<<<<<<<<<
 *         cdef int outdegree = 0, *idest   = NULL
 *         cdef int *isourceweight = MPI_UNWEIGHTED
 */
  __pyx_v_indegree = 0;
  __pyx_v_isource = NULL;

  /* "mpi4py/MPI/Comm.pyx":1349
 *         """
 *         cdef int indegree  = 0, *isource = NULL
 *         cdef int outdegree = 0, *idest   = NULL             # <<<<<<<<<<<<<<
 *         cdef int *isourceweight = MPI_UNWEIGHTED
 *         cdef int *idestweight   = MPI_UNWEIGHTED
 */
  __pyx_v_outdegree = 0;
  __pyx_v_idest = NULL;

  /* "mpi4py/MPI/Comm.pyx":1350
 *         cdef int indegree  = 0, *isource = NULL
 *         cdef int outdegree = 0, *idest   = NULL
 *         cdef int *isourceweight = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         cdef int *idestweight   = MPI_UNWEIGHTED
 *         if sources is not None:
 */
  __pyx_v_isourceweight = MPI_UNWEIGHTED;

  /* "mpi4py/MPI/Comm.pyx":1351
 *         cdef int outdegree = 0, *idest   = NULL
 *         cdef int *isourceweight = MPI_UNWEIGHTED
 *         cdef int *idestweight   = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         if sources is not None:
 *             sources = getarray(sources, &indegree, &isource)
 */
  __pyx_v_idestweight = MPI_UNWEIGHTED;

  /* "mpi4py/MPI/Comm.pyx":1352
 *         cdef int *isourceweight = MPI_UNWEIGHTED
 *         cdef int *idestweight   = MPI_UNWEIGHTED
 *         if sources is not None:             # <<<<<<<<<<<<<<
 *             sources = getarray(sources, &indegree, &isource)
 *         sourceweights = asarray_weights(
 */
  __pyx_t_1 = (__pyx_v_sources != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1353
 *         cdef int *idestweight   = MPI_UNWEIGHTED
 *         if sources is not None:
 *             sources = getarray(sources, &indegree, &isource)             # <<<<<<<<<<<<<<
 *         sourceweights = asarray_weights(
 *             sourceweights, indegree, &isourceweight)
 */
    __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_sources, (&__pyx_v_indegree), (&__pyx_v_isource)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_sources, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1352
 *         cdef int *isourceweight = MPI_UNWEIGHTED
 *         cdef int *idestweight   = MPI_UNWEIGHTED
 *         if sources is not None:             # <<<<<<<<<<<<<<
 *             sources = getarray(sources, &indegree, &isource)
 *         sourceweights = asarray_weights(
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1354
 *         if sources is not None:
 *             sources = getarray(sources, &indegree, &isource)
 *         sourceweights = asarray_weights(             # <<<<<<<<<<<<<<
 *             sourceweights, indegree, &isourceweight)
 *         if destinations is not None:
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_weights(__pyx_v_sourceweights, __pyx_v_indegree, (&__pyx_v_isourceweight)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_sourceweights, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1356
 *         sourceweights = asarray_weights(
 *             sourceweights, indegree, &isourceweight)
 *         if destinations is not None:             # <<<<<<<<<<<<<<
 *             destinations = getarray(destinations, &outdegree, &idest)
 *         destweights = asarray_weights(
 */
  __pyx_t_2 = (__pyx_v_destinations != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Comm.pyx":1357
 *             sourceweights, indegree, &isourceweight)
 *         if destinations is not None:
 *             destinations = getarray(destinations, &outdegree, &idest)             # <<<<<<<<<<<<<<
 *         destweights = asarray_weights(
 *             destweights, outdegree, &idestweight)
 */
    __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_destinations, (&__pyx_v_outdegree), (&__pyx_v_idest)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_destinations, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1356
 *         sourceweights = asarray_weights(
 *             sourceweights, indegree, &isourceweight)
 *         if destinations is not None:             # <<<<<<<<<<<<<<
 *             destinations = getarray(destinations, &outdegree, &idest)
 *         destweights = asarray_weights(
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1358
 *         if destinations is not None:
 *             destinations = getarray(destinations, &outdegree, &idest)
 *         destweights = asarray_weights(             # <<<<<<<<<<<<<<
 *             destweights, outdegree, &idestweight)
 *         #
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_weights(__pyx_v_destweights, __pyx_v_outdegree, (&__pyx_v_idestweight)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_destweights, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1362
 *         #
 *         cdef Distgraphcomm comm = \
 *             <Distgraphcomm>Distgraphcomm.__new__(Distgraphcomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Dist_graph_create_adjacent(
 *             self.ob_mpi,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Distgraphcomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Distgraphcomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1362, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPIDistgraphcommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":1363
 *         cdef Distgraphcomm comm = \
 *             <Distgraphcomm>Distgraphcomm.__new__(Distgraphcomm)
 *         with nogil: CHKERR( MPI_Dist_graph_create_adjacent(             # <<<<<<<<<<<<<<
 *             self.ob_mpi,
 *             indegree,  isource, isourceweight,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1367
 *             indegree,  isource, isourceweight,
 *             outdegree, idest,   idestweight,
 *             info.ob_mpi, reorder, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dist_graph_create_adjacent(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_indegree, __pyx_v_isource, __pyx_v_isourceweight, __pyx_v_outdegree, __pyx_v_idest, __pyx_v_idestweight, __pyx_v_info->ob_mpi, __pyx_v_reorder, (&__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 1363, __pyx_L6_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1363
 *         cdef Distgraphcomm comm = \
 *             <Distgraphcomm>Distgraphcomm.__new__(Distgraphcomm)
 *         with nogil: CHKERR( MPI_Dist_graph_create_adjacent(             # <<<<<<<<<<<<<<
 *             self.ob_mpi,
 *             indegree,  isource, isourceweight,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1368
 *             outdegree, idest,   idestweight,
 *             info.ob_mpi, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(7, 1368, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1369
 *             info.ob_mpi, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Create_dist_graph(self, sources, degrees, destinations, weights=None,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1342
 *         return comm
 * 
 *     def Create_dist_graph_adjacent(self, sources, destinations,             # <<<<<<<<<<<<<<
 *                                    sourceweights=None, destweights=None,
 *                                    Info info=INFO_NULL, bint reorder=False):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_dist_graph_adjacent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_sources);
  __Pyx_XDECREF(__pyx_v_destinations);
  __Pyx_XDECREF(__pyx_v_sourceweights);
  __Pyx_XDECREF(__pyx_v_destweights);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1371
 *         return comm
 * 
 *     def Create_dist_graph(self, sources, degrees, destinations, weights=None,             # <<<<<<<<<<<<<<
 *                           Info info=INFO_NULL, bint reorder=False):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_9Create_dist_graph(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_8Create_dist_graph[] = "Intracomm.Create_dist_graph(self, sources, degrees, destinations, weights=None, Info info=INFO_NULL, bool reorder=False)\n\n        Create distributed graph communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_9Create_dist_graph(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sources = 0;
  PyObject *__pyx_v_degrees = 0;
  PyObject *__pyx_v_destinations = 0;
  PyObject *__pyx_v_weights = 0;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  int __pyx_v_reorder;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_dist_graph (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sources,&__pyx_n_s_degrees,&__pyx_n_s_destinations,&__pyx_n_s_weights,&__pyx_n_s_info,&__pyx_n_s_reorder,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[3] = ((PyObject *)Py_None);
    values[4] = (PyObject *)__pyx_k__83;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sources)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_degrees)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_dist_graph", 0, 3, 6, 1); __PYX_ERR(7, 1371, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_destinations)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_dist_graph", 0, 3, 6, 2); __PYX_ERR(7, 1371, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_weights);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reorder);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_dist_graph") < 0)) __PYX_ERR(7, 1371, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sources = values[0];
    __pyx_v_degrees = values[1];
    __pyx_v_destinations = values[2];
    __pyx_v_weights = values[3];
    __pyx_v_info = ((struct PyMPIInfoObject *)values[4]);
    if (values[5]) {
      __pyx_v_reorder = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_reorder == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1372, __pyx_L3_error)
    } else {

      /* "mpi4py/MPI/Comm.pyx":1372
 * 
 *     def Create_dist_graph(self, sources, degrees, destinations, weights=None,
 *                           Info info=INFO_NULL, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create distributed graph communicator
 */
      __pyx_v_reorder = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_dist_graph", 0, 3, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1371, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_dist_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 1372, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_8Create_dist_graph(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sources, __pyx_v_degrees, __pyx_v_destinations, __pyx_v_weights, __pyx_v_info, __pyx_v_reorder);

  /* "mpi4py/MPI/Comm.pyx":1371
 *         return comm
 * 
 *     def Create_dist_graph(self, sources, degrees, destinations, weights=None,             # <<<<<<<<<<<<<<
 *                           Info info=INFO_NULL, bint reorder=False):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_8Create_dist_graph(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sources, PyObject *__pyx_v_degrees, PyObject *__pyx_v_destinations, PyObject *__pyx_v_weights, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_reorder) {
  int __pyx_v_nv;
  int __pyx_v_ne;
  int __pyx_v_i;
  int *__pyx_v_isource;
  int *__pyx_v_idegree;
  int *__pyx_v_idest;
  int *__pyx_v_iweight;
  struct PyMPIDistgraphcommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Create_dist_graph", 0);
  __Pyx_INCREF(__pyx_v_sources);
  __Pyx_INCREF(__pyx_v_degrees);
  __Pyx_INCREF(__pyx_v_destinations);
  __Pyx_INCREF(__pyx_v_weights);

  /* "mpi4py/MPI/Comm.pyx":1376
 *         Create distributed graph communicator
 *         """
 *         cdef int nv = 0, ne = 0, i = 0             # <<<<<<<<<<<<<<
 *         cdef int *isource = NULL, *idegree = NULL,
 *         cdef int *idest = NULL, *iweight = MPI_UNWEIGHTED
 */
  __pyx_v_nv = 0;
  __pyx_v_ne = 0;
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Comm.pyx":1377
 *         """
 *         cdef int nv = 0, ne = 0, i = 0
 *         cdef int *isource = NULL, *idegree = NULL,             # <<<<<<<<<<<<<<
 *         cdef int *idest = NULL, *iweight = MPI_UNWEIGHTED
 *         sources = getarray(sources, &nv, &isource)
 */
  __pyx_v_isource = NULL;
  __pyx_v_idegree = NULL;

  /* "mpi4py/MPI/Comm.pyx":1378
 *         cdef int nv = 0, ne = 0, i = 0
 *         cdef int *isource = NULL, *idegree = NULL,
 *         cdef int *idest = NULL, *iweight = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         sources = getarray(sources, &nv, &isource)
 *         degrees = chkarray(degrees,  nv, &idegree)
 */
  __pyx_v_idest = NULL;
  __pyx_v_iweight = MPI_UNWEIGHTED;

  /* "mpi4py/MPI/Comm.pyx":1379
 *         cdef int *isource = NULL, *idegree = NULL,
 *         cdef int *idest = NULL, *iweight = MPI_UNWEIGHTED
 *         sources = getarray(sources, &nv, &isource)             # <<<<<<<<<<<<<<
 *         degrees = chkarray(degrees,  nv, &idegree)
 *         for i from 0 <= i < nv: ne += idegree[i]
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_sources, (&__pyx_v_nv), (&__pyx_v_isource)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_sources, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1380
 *         cdef int *idest = NULL, *iweight = MPI_UNWEIGHTED
 *         sources = getarray(sources, &nv, &isource)
 *         degrees = chkarray(degrees,  nv, &idegree)             # <<<<<<<<<<<<<<
 *         for i from 0 <= i < nv: ne += idegree[i]
 *         destinations = chkarray(destinations, ne, &idest)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_degrees, __pyx_v_nv, (&__pyx_v_idegree)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_degrees, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1381
 *         sources = getarray(sources, &nv, &isource)
 *         degrees = chkarray(degrees,  nv, &idegree)
 *         for i from 0 <= i < nv: ne += idegree[i]             # <<<<<<<<<<<<<<
 *         destinations = chkarray(destinations, ne, &idest)
 *         weights = asarray_weights(weights, ne, &iweight)
 */
  __pyx_t_2 = __pyx_v_nv;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
    __pyx_v_ne = (__pyx_v_ne + (__pyx_v_idegree[__pyx_v_i]));
  }

  /* "mpi4py/MPI/Comm.pyx":1382
 *         degrees = chkarray(degrees,  nv, &idegree)
 *         for i from 0 <= i < nv: ne += idegree[i]
 *         destinations = chkarray(destinations, ne, &idest)             # <<<<<<<<<<<<<<
 *         weights = asarray_weights(weights, ne, &iweight)
 *         #
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_destinations, __pyx_v_ne, (&__pyx_v_idest)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_destinations, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1383
 *         for i from 0 <= i < nv: ne += idegree[i]
 *         destinations = chkarray(destinations, ne, &idest)
 *         weights = asarray_weights(weights, ne, &iweight)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Distgraphcomm comm = \
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asarray_weights(__pyx_v_weights, __pyx_v_ne, (&__pyx_v_iweight)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_weights, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1386
 *         #
 *         cdef Distgraphcomm comm = \
 *             <Distgraphcomm>Distgraphcomm.__new__(Distgraphcomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Dist_graph_create(
 *             self.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Distgraphcomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Distgraphcomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1386, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIDistgraphcommObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1387
 *         cdef Distgraphcomm comm = \
 *             <Distgraphcomm>Distgraphcomm.__new__(Distgraphcomm)
 *         with nogil: CHKERR( MPI_Dist_graph_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi,
 *             nv, isource, idegree, idest, iweight,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1390
 *             self.ob_mpi,
 *             nv, isource, idegree, idest, iweight,
 *             info.ob_mpi, reorder, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dist_graph_create(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_nv, __pyx_v_isource, __pyx_v_idegree, __pyx_v_idest, __pyx_v_iweight, __pyx_v_info->ob_mpi, __pyx_v_reorder, (&__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1387, __pyx_L6_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1387
 *         cdef Distgraphcomm comm = \
 *             <Distgraphcomm>Distgraphcomm.__new__(Distgraphcomm)
 *         with nogil: CHKERR( MPI_Dist_graph_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi,
 *             nv, isource, idegree, idest, iweight,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1391
 *             nv, isource, idegree, idest, iweight,
 *             info.ob_mpi, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1391, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1392
 *             info.ob_mpi, reorder, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Create_intercomm(self,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1371
 *         return comm
 * 
 *     def Create_dist_graph(self, sources, degrees, destinations, weights=None,             # <<<<<<<<<<<<<<
 *                           Info info=INFO_NULL, bint reorder=False):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_dist_graph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_sources);
  __Pyx_XDECREF(__pyx_v_degrees);
  __Pyx_XDECREF(__pyx_v_destinations);
  __Pyx_XDECREF(__pyx_v_weights);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1394
 *         return comm
 * 
 *     def Create_intercomm(self,             # <<<<<<<<<<<<<<
 *                          int local_leader,
 *                          Intracomm peer_comm,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_11Create_intercomm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_10Create_intercomm[] = "Intracomm.Create_intercomm(self, int local_leader, Intracomm peer_comm, int remote_leader, int tag=0)\n\n        Create intercommunicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_11Create_intercomm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_local_leader;
  struct PyMPIIntracommObject *__pyx_v_peer_comm = 0;
  int __pyx_v_remote_leader;
  int __pyx_v_tag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_intercomm (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_local_leader,&__pyx_n_s_peer_comm,&__pyx_n_s_remote_leader,&__pyx_n_s_tag,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_local_leader)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_peer_comm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_intercomm", 0, 3, 4, 1); __PYX_ERR(7, 1394, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_remote_leader)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Create_intercomm", 0, 3, 4, 2); __PYX_ERR(7, 1394, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tag);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_intercomm") < 0)) __PYX_ERR(7, 1394, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_local_leader = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_local_leader == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1395, __pyx_L3_error)
    __pyx_v_peer_comm = ((struct PyMPIIntracommObject *)values[1]);
    __pyx_v_remote_leader = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_remote_leader == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1397, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_tag = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_tag == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1398, __pyx_L3_error)
    } else {
      __pyx_v_tag = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_intercomm", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1394, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_intercomm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_peer_comm), __pyx_ptype_6mpi4py_3MPI_Intracomm, 0, "peer_comm", 0))) __PYX_ERR(7, 1396, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_10Create_intercomm(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_local_leader, __pyx_v_peer_comm, __pyx_v_remote_leader, __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_10Create_intercomm(struct PyMPIIntracommObject *__pyx_v_self, int __pyx_v_local_leader, struct PyMPIIntracommObject *__pyx_v_peer_comm, int __pyx_v_remote_leader, int __pyx_v_tag) {
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_intercomm", 0);

  /* "mpi4py/MPI/Comm.pyx":1402
 *         Create intercommunicator
 *         """
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Intercomm_create(
 *             self.ob_mpi, local_leader,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1402, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1403
 *         """
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Intercomm_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, local_leader,
 *             peer_comm.ob_mpi, remote_leader,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1406
 *             self.ob_mpi, local_leader,
 *             peer_comm.ob_mpi, remote_leader,
 *             tag, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Intercomm_create(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_local_leader, __pyx_v_peer_comm->__pyx_base.ob_mpi, __pyx_v_remote_leader, __pyx_v_tag, (&__pyx_v_comm->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1403, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1403
 *         """
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Intercomm_create(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, local_leader,
 *             peer_comm.ob_mpi, remote_leader,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1407
 *             peer_comm.ob_mpi, remote_leader,
 *             tag, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1407, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1408
 *             tag, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     # Low-Level Topology Functions
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1394
 *         return comm
 * 
 *     def Create_intercomm(self,             # <<<<<<<<<<<<<<
 *                          int local_leader,
 *                          Intracomm peer_comm,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Create_intercomm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1413
 *     # ----------------------------
 * 
 *     def Cart_map(self, dims, periods=None):             # <<<<<<<<<<<<<<
 *         """
 *         Return an optimal placement for the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_13Cart_map(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_12Cart_map[] = "Intracomm.Cart_map(self, dims, periods=None)\n\n        Return an optimal placement for the\n        calling process on the physical machine\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_13Cart_map(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_dims = 0;
  PyObject *__pyx_v_periods = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Cart_map (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dims,&__pyx_n_s_periods,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dims)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_periods);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Cart_map") < 0)) __PYX_ERR(7, 1413, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dims = values[0];
    __pyx_v_periods = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Cart_map", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1413, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Cart_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_12Cart_map(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_dims, __pyx_v_periods);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_12Cart_map(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_periods) {
  int __pyx_v_ndims;
  int *__pyx_v_idims;
  int *__pyx_v_iperiods;
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("Cart_map", 0);
  __Pyx_INCREF(__pyx_v_dims);
  __Pyx_INCREF(__pyx_v_periods);

  /* "mpi4py/MPI/Comm.pyx":1418
 *         calling process on the physical machine
 *         """
 *         cdef int ndims = 0, *idims = NULL, *iperiods = NULL             # <<<<<<<<<<<<<<
 *         dims = getarray(dims, &ndims, &idims)
 *         if periods is None: periods = False
 */
  __pyx_v_ndims = 0;
  __pyx_v_idims = NULL;
  __pyx_v_iperiods = NULL;

  /* "mpi4py/MPI/Comm.pyx":1419
 *         """
 *         cdef int ndims = 0, *idims = NULL, *iperiods = NULL
 *         dims = getarray(dims, &ndims, &idims)             # <<<<<<<<<<<<<<
 *         if periods is None: periods = False
 *         if isinstance(periods, bool): periods = [periods] * ndims
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_dims, (&__pyx_v_ndims), (&__pyx_v_idims)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_dims, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1420
 *         cdef int ndims = 0, *idims = NULL, *iperiods = NULL
 *         dims = getarray(dims, &ndims, &idims)
 *         if periods is None: periods = False             # <<<<<<<<<<<<<<
 *         if isinstance(periods, bool): periods = [periods] * ndims
 *         periods = chkarray(periods, ndims, &iperiods)
 */
  __pyx_t_2 = (__pyx_v_periods == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
    __Pyx_INCREF(Py_False);
    __Pyx_DECREF_SET(__pyx_v_periods, Py_False);
  }

  /* "mpi4py/MPI/Comm.pyx":1421
 *         dims = getarray(dims, &ndims, &idims)
 *         if periods is None: periods = False
 *         if isinstance(periods, bool): periods = [periods] * ndims             # <<<<<<<<<<<<<<
 *         periods = chkarray(periods, ndims, &iperiods)
 *         cdef int rank = MPI_PROC_NULL
 */
  __pyx_t_1 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_periods, __pyx_t_1); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 1421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {
    __pyx_t_1 = PyList_New(1 * ((__pyx_v_ndims<0) ? 0:__pyx_v_ndims)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    { Py_ssize_t __pyx_temp;
      for (__pyx_temp=0; __pyx_temp < __pyx_v_ndims; __pyx_temp++) {
        __Pyx_INCREF(__pyx_v_periods);
        __Pyx_GIVEREF(__pyx_v_periods);
        PyList_SET_ITEM(__pyx_t_1, __pyx_temp, __pyx_v_periods);
      }
    }
    __Pyx_DECREF_SET(__pyx_v_periods, __pyx_t_1);
    __pyx_t_1 = 0;
  }

  /* "mpi4py/MPI/Comm.pyx":1422
 *         if periods is None: periods = False
 *         if isinstance(periods, bool): periods = [periods] * ndims
 *         periods = chkarray(periods, ndims, &iperiods)             # <<<<<<<<<<<<<<
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_map(self.ob_mpi, ndims, idims, iperiods, &rank) )
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_periods, __pyx_v_ndims, (&__pyx_v_iperiods)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_periods, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1423
 *         if isinstance(periods, bool): periods = [periods] * ndims
 *         periods = chkarray(periods, ndims, &iperiods)
 *         cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cart_map(self.ob_mpi, ndims, idims, iperiods, &rank) )
 *         return rank
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/Comm.pyx":1424
 *         periods = chkarray(periods, ndims, &iperiods)
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_map(self.ob_mpi, ndims, idims, iperiods, &rank) )             # <<<<<<<<<<<<<<
 *         return rank
 * 
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_map(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_ndims, __pyx_v_idims, __pyx_v_iperiods, (&__pyx_v_rank))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(7, 1424, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1425
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_map(self.ob_mpi, ndims, idims, iperiods, &rank) )
 *         return rank             # <<<<<<<<<<<<<<
 * 
 *     def Graph_map(self, index, edges):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1413
 *     # ----------------------------
 * 
 *     def Cart_map(self, dims, periods=None):             # <<<<<<<<<<<<<<
 *         """
 *         Return an optimal placement for the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Cart_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dims);
  __Pyx_XDECREF(__pyx_v_periods);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1427
 *         return rank
 * 
 *     def Graph_map(self, index, edges):             # <<<<<<<<<<<<<<
 *         """
 *         Return an optimal placement for the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_15Graph_map(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_14Graph_map[] = "Intracomm.Graph_map(self, index, edges)\n\n        Return an optimal placement for the\n        calling process on the physical machine\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_15Graph_map(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_index = 0;
  PyObject *__pyx_v_edges = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Graph_map (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,&__pyx_n_s_edges,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_edges)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Graph_map", 1, 2, 2, 1); __PYX_ERR(7, 1427, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Graph_map") < 0)) __PYX_ERR(7, 1427, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_index = values[0];
    __pyx_v_edges = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Graph_map", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1427, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Graph_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_14Graph_map(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_index, __pyx_v_edges);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_14Graph_map(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_edges) {
  int __pyx_v_nnodes;
  int *__pyx_v_iindex;
  int __pyx_v_nedges;
  int *__pyx_v_iedges;
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("Graph_map", 0);
  __Pyx_INCREF(__pyx_v_index);
  __Pyx_INCREF(__pyx_v_edges);

  /* "mpi4py/MPI/Comm.pyx":1432
 *         calling process on the physical machine
 *         """
 *         cdef int nnodes = 0, *iindex = NULL             # <<<<<<<<<<<<<<
 *         index = getarray(index, &nnodes, &iindex)
 *         cdef int nedges = 0, *iedges = NULL
 */
  __pyx_v_nnodes = 0;
  __pyx_v_iindex = NULL;

  /* "mpi4py/MPI/Comm.pyx":1433
 *         """
 *         cdef int nnodes = 0, *iindex = NULL
 *         index = getarray(index, &nnodes, &iindex)             # <<<<<<<<<<<<<<
 *         cdef int nedges = 0, *iedges = NULL
 *         edges = getarray(edges, &nedges, &iedges)
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_index, (&__pyx_v_nnodes), (&__pyx_v_iindex)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1433, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1434
 *         cdef int nnodes = 0, *iindex = NULL
 *         index = getarray(index, &nnodes, &iindex)
 *         cdef int nedges = 0, *iedges = NULL             # <<<<<<<<<<<<<<
 *         edges = getarray(edges, &nedges, &iedges)
 *         # extension: accept more 'standard' adjacency arrays
 */
  __pyx_v_nedges = 0;
  __pyx_v_iedges = NULL;

  /* "mpi4py/MPI/Comm.pyx":1435
 *         index = getarray(index, &nnodes, &iindex)
 *         cdef int nedges = 0, *iedges = NULL
 *         edges = getarray(edges, &nedges, &iedges)             # <<<<<<<<<<<<<<
 *         # extension: accept more 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:
 */
  __pyx_t_1 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_getarray(__pyx_v_edges, (&__pyx_v_nedges), (&__pyx_v_iedges)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_edges, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1437
 *         edges = getarray(edges, &nedges, &iedges)
 *         # extension: accept more 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:             # <<<<<<<<<<<<<<
 *             nnodes -= 1; iindex += 1;
 *         cdef int rank = MPI_PROC_NULL
 */
  __pyx_t_3 = (((__pyx_v_iindex[0]) == 0) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (((__pyx_v_iindex[(__pyx_v_nnodes - 1)]) == __pyx_v_nedges) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1438
 *         # extension: accept more 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:
 *             nnodes -= 1; iindex += 1;             # <<<<<<<<<<<<<<
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Graph_map(self.ob_mpi, nnodes, iindex, iedges, &rank) )
 */
    __pyx_v_nnodes = (__pyx_v_nnodes - 1);
    __pyx_v_iindex = (__pyx_v_iindex + 1);

    /* "mpi4py/MPI/Comm.pyx":1437
 *         edges = getarray(edges, &nedges, &iedges)
 *         # extension: accept more 'standard' adjacency arrays
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:             # <<<<<<<<<<<<<<
 *             nnodes -= 1; iindex += 1;
 *         cdef int rank = MPI_PROC_NULL
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1439
 *         if iindex[0]==0 and iindex[nnodes-1]==nedges:
 *             nnodes -= 1; iindex += 1;
 *         cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graph_map(self.ob_mpi, nnodes, iindex, iedges, &rank) )
 *         return rank
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/Comm.pyx":1440
 *             nnodes -= 1; iindex += 1;
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Graph_map(self.ob_mpi, nnodes, iindex, iedges, &rank) )             # <<<<<<<<<<<<<<
 *         return rank
 * 
 */
  __pyx_t_4 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_map(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_nnodes, __pyx_v_iindex, __pyx_v_iedges, (&__pyx_v_rank))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(7, 1440, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1441
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Graph_map(self.ob_mpi, nnodes, iindex, iedges, &rank) )
 *         return rank             # <<<<<<<<<<<<<<
 * 
 *     # Global Reduction Operations
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1427
 *         return rank
 * 
 *     def Graph_map(self, index, edges):             # <<<<<<<<<<<<<<
 *         """
 *         Return an optimal placement for the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Graph_map", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XDECREF(__pyx_v_edges);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1448
 *     # Inclusive Scan
 * 
 *     def Scan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_17Scan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_16Scan[] = "Intracomm.Scan(self, sendbuf, recvbuf, Op op=SUM)\n\n        Inclusive Scan\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_17Scan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Scan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__84;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Scan", 0, 2, 3, 1); __PYX_ERR(7, 1448, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Scan") < 0)) __PYX_ERR(7, 1448, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Scan", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1448, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 1448, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_16Scan(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_16Scan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Scan", 0);

  /* "mpi4py/MPI/Comm.pyx":1452
 *         Inclusive Scan
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scan(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1453
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Scan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scan(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1453, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1454
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1456
 *         with nogil: CHKERR( MPI_Scan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Exclusive Scan
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Scan(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1454, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1454
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Scan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1448
 *     # Inclusive Scan
 * 
 *     def Scan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1460
 *     # Exclusive Scan
 * 
 *     def Exscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Exclusive Scan
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_19Exscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_18Exscan[] = "Intracomm.Exscan(self, sendbuf, recvbuf, Op op=SUM)\n\n        Exclusive Scan\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_19Exscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Exscan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__85;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Exscan", 0, 2, 3, 1); __PYX_ERR(7, 1460, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Exscan") < 0)) __PYX_ERR(7, 1460, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Exscan", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1460, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 1460, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_18Exscan(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_18Exscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Exscan", 0);

  /* "mpi4py/MPI/Comm.pyx":1464
 *         Exclusive Scan
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Exscan(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1465
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Exscan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_exscan(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1465, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1466
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Exscan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1468
 *         with nogil: CHKERR( MPI_Exscan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Nonblocking
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Exscan(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1466, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1466
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Exscan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1460
 *     # Exclusive Scan
 * 
 *     def Exscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Exclusive Scan
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1472
 *     # Nonblocking
 * 
 *     def Iscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_21Iscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_20Iscan[] = "Intracomm.Iscan(self, sendbuf, recvbuf, Op op=SUM)\n\n        Inclusive Scan\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_21Iscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iscan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__86;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iscan", 0, 2, 3, 1); __PYX_ERR(7, 1472, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iscan") < 0)) __PYX_ERR(7, 1472, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iscan", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1472, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Iscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 1472, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_20Iscan(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_20Iscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iscan", 0);

  /* "mpi4py/MPI/Comm.pyx":1476
 *         Inclusive Scan
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1477
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscan(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scan(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1477, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1478
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iscan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1478, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1479
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1481
 *         with nogil: CHKERR( MPI_Iscan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iscan(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1479, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1479
 *         m.for_scan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iscan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1482
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iexscan(self, sendbuf, recvbuf, Op op=SUM):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1472
 *     # Nonblocking
 * 
 *     def Iscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Iscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1484
 *         return request
 * 
 *     def Iexscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_23Iexscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_22Iexscan[] = "Intracomm.Iexscan(self, sendbuf, recvbuf, Op op=SUM)\n\n        Inclusive Scan\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_23Iexscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iexscan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,&__pyx_n_s_op,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)__pyx_k__87;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iexscan", 0, 2, 3, 1); __PYX_ERR(7, 1484, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iexscan") < 0)) __PYX_ERR(7, 1484, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
    __pyx_v_op = ((struct PyMPIOpObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iexscan", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1484, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Iexscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(7, 1484, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_22Iexscan(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_22Iexscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Iexscan", 0);

  /* "mpi4py/MPI/Comm.pyx":1488
 *         Inclusive Scan
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1489
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iexscan(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_exscan(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1489, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1490
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Iexscan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1490, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1491
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iexscan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1493
 *         with nogil: CHKERR( MPI_Iexscan(
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Iexscan(__pyx_v_m->sbuf, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_op->ob_mpi, __pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1491, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1491
 *         m.for_exscan(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Iexscan(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1494
 *             m.sbuf, m.rbuf, m.rcount, m.rtype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Python Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1484
 *         return request
 * 
 *     def Iexscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Iexscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1498
 *     # Python Communication
 *     #
 *     def scan(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Inclusive Scan"""
 *         if op is None: op = SUM
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_25scan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_24scan[] = "Intracomm.scan(self, sendobj, op=SUM)\nInclusive Scan";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_25scan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_op,0};
    PyObject* values[2] = {0,0};
    values[1] = __pyx_k__88;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scan") < 0)) __PYX_ERR(7, 1498, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    __pyx_v_op = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("scan", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1498, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_24scan(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_op);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_24scan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  MPI_Comm __pyx_t_4;
  __Pyx_RefNannySetupContext("scan", 0);
  __Pyx_INCREF(__pyx_v_op);

  /* "mpi4py/MPI/Comm.pyx":1500
 *     def scan(self, sendobj, op=SUM):
 *         """Inclusive Scan"""
 *         if op is None: op = SUM             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_scan(sendobj, op, comm)
 */
  __pyx_t_1 = (__pyx_v_op == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1500, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_op, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/Comm.pyx":1501
 *         """Inclusive Scan"""
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_scan(sendobj, op, comm)
 *     #
 */
  __pyx_t_4 = __pyx_v_self->__pyx_base.ob_mpi;
  __pyx_v_comm = __pyx_t_4;

  /* "mpi4py/MPI/Comm.pyx":1502
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_scan(sendobj, op, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def exscan(self, sendobj, op=SUM):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_scan(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1498
 *     # Python Communication
 *     #
 *     def scan(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Inclusive Scan"""
 *         if op is None: op = SUM
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_op);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1504
 *         return PyMPI_scan(sendobj, op, comm)
 *     #
 *     def exscan(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Exclusive Scan"""
 *         if op is None: op = SUM
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_27exscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_26exscan[] = "Intracomm.exscan(self, sendobj, op=SUM)\nExclusive Scan";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_27exscan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("exscan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,&__pyx_n_s_op,0};
    PyObject* values[2] = {0,0};
    values[1] = __pyx_k__89;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "exscan") < 0)) __PYX_ERR(7, 1504, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_sendobj = values[0];
    __pyx_v_op = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("exscan", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1504, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_26exscan(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_sendobj, __pyx_v_op);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_26exscan(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_sendobj, PyObject *__pyx_v_op) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  MPI_Comm __pyx_t_4;
  __Pyx_RefNannySetupContext("exscan", 0);
  __Pyx_INCREF(__pyx_v_op);

  /* "mpi4py/MPI/Comm.pyx":1506
 *     def exscan(self, sendobj, op=SUM):
 *         """Exclusive Scan"""
 *         if op is None: op = SUM             # <<<<<<<<<<<<<<
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_exscan(sendobj, op, comm)
 */
  __pyx_t_1 = (__pyx_v_op == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1506, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_op, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/Comm.pyx":1507
 *         """Exclusive Scan"""
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_exscan(sendobj, op, comm)
 * 
 */
  __pyx_t_4 = __pyx_v_self->__pyx_base.ob_mpi;
  __pyx_v_comm = __pyx_t_4;

  /* "mpi4py/MPI/Comm.pyx":1508
 *         if op is None: op = SUM
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_exscan(sendobj, op, comm)             # <<<<<<<<<<<<<<
 * 
 *     # Establishing Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_PyMPI_exscan(__pyx_v_sendobj, __pyx_v_op, __pyx_v_comm); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1504
 *         return PyMPI_scan(sendobj, op, comm)
 *     #
 *     def exscan(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Exclusive Scan"""
 *         if op is None: op = SUM
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.exscan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_op);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1515
 *     # Starting Processes
 * 
 *     def Spawn(self, command, args=None, int maxprocs=1,             # <<<<<<<<<<<<<<
 *               Info info=INFO_NULL, int root=0, errcodes=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_29Spawn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_28Spawn[] = "Intracomm.Spawn(self, command, args=None, int maxprocs=1, Info info=INFO_NULL, int root=0, errcodes=None)\n\n        Spawn instances of a single MPI application\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_29Spawn(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_command = 0;
  PyObject *__pyx_v_args = 0;
  int __pyx_v_maxprocs;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  int __pyx_v_root;
  PyObject *__pyx_v_errcodes = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Spawn (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_command,&__pyx_n_s_args,&__pyx_n_s_maxprocs,&__pyx_n_s_info,&__pyx_n_s_root,&__pyx_n_s_errcodes,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[3] = (PyObject *)__pyx_k__90;

    /* "mpi4py/MPI/Comm.pyx":1516
 * 
 *     def Spawn(self, command, args=None, int maxprocs=1,
 *               Info info=INFO_NULL, int root=0, errcodes=None):             # <<<<<<<<<<<<<<
 *         """
 *         Spawn instances of a single MPI application
 */
    values[5] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_command)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxprocs);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errcodes);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Spawn") < 0)) __PYX_ERR(7, 1515, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_command = values[0];
    __pyx_v_args = values[1];
    if (values[2]) {
      __pyx_v_maxprocs = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_maxprocs == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1515, __pyx_L3_error)
    } else {
      __pyx_v_maxprocs = ((int)1);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[3]);
    if (values[4]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1516, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
    __pyx_v_errcodes = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Spawn", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1515, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Spawn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 1516, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_28Spawn(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_command, __pyx_v_args, __pyx_v_maxprocs, __pyx_v_info, __pyx_v_root, __pyx_v_errcodes);

  /* "mpi4py/MPI/Comm.pyx":1515
 *     # Starting Processes
 * 
 *     def Spawn(self, command, args=None, int maxprocs=1,             # <<<<<<<<<<<<<<
 *               Info info=INFO_NULL, int root=0, errcodes=None):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_28Spawn(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_command, PyObject *__pyx_v_args, int __pyx_v_maxprocs, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_root, PyObject *__pyx_v_errcodes) {
  char *__pyx_v_cmd;
  char **__pyx_v_argv;
  int *__pyx_v_ierrcodes;
  int __pyx_v_rank;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Spawn", 0);

  /* "mpi4py/MPI/Comm.pyx":1520
 *         Spawn instances of a single MPI application
 *         """
 *         cdef char *cmd = NULL             # <<<<<<<<<<<<<<
 *         cdef char **argv = MPI_ARGV_NULL
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE
 */
  __pyx_v_cmd = NULL;

  /* "mpi4py/MPI/Comm.pyx":1521
 *         """
 *         cdef char *cmd = NULL
 *         cdef char **argv = MPI_ARGV_NULL             # <<<<<<<<<<<<<<
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE
 *         #
 */
  __pyx_v_argv = MPI_ARGV_NULL;

  /* "mpi4py/MPI/Comm.pyx":1522
 *         cdef char *cmd = NULL
 *         cdef char **argv = MPI_ARGV_NULL
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE             # <<<<<<<<<<<<<<
 *         #
 *         cdef int rank = MPI_UNDEFINED
 */
  __pyx_v_ierrcodes = MPI_ERRCODES_IGNORE;

  /* "mpi4py/MPI/Comm.pyx":1524
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE
 *         #
 *         cdef int rank = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         cdef tmp1, tmp2, tmp3
 */
  __pyx_v_rank = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1525
 *         #
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )             # <<<<<<<<<<<<<<
 *         cdef tmp1, tmp2, tmp3
 *         if root == rank:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1525, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1527
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         cdef tmp1, tmp2, tmp3
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             tmp1 = asmpistr(command, &cmd)
 *             tmp2 = asarray_argv(args, &argv)
 */
  __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1528
 *         cdef tmp1, tmp2, tmp3
 *         if root == rank:
 *             tmp1 = asmpistr(command, &cmd)             # <<<<<<<<<<<<<<
 *             tmp2 = asarray_argv(args, &argv)
 *         if errcodes is not None:
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_command, (&__pyx_v_cmd)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp1 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1529
 *         if root == rank:
 *             tmp1 = asmpistr(command, &cmd)
 *             tmp2 = asarray_argv(args, &argv)             # <<<<<<<<<<<<<<
 *         if errcodes is not None:
 *             tmp3 = newarray(maxprocs, &ierrcodes)
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_argv(__pyx_v_args, (&__pyx_v_argv)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp2 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1527
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         cdef tmp1, tmp2, tmp3
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             tmp1 = asmpistr(command, &cmd)
 *             tmp2 = asarray_argv(args, &argv)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1530
 *             tmp1 = asmpistr(command, &cmd)
 *             tmp2 = asarray_argv(args, &argv)
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             tmp3 = newarray(maxprocs, &ierrcodes)
 *         #
 */
  __pyx_t_2 = (__pyx_v_errcodes != Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/Comm.pyx":1531
 *             tmp2 = asarray_argv(args, &argv)
 *         if errcodes is not None:
 *             tmp3 = newarray(maxprocs, &ierrcodes)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 */
    __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_maxprocs, (&__pyx_v_ierrcodes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1531, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp3 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1530
 *             tmp1 = asmpistr(command, &cmd)
 *             tmp2 = asarray_argv(args, &argv)
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             tmp3 = newarray(maxprocs, &ierrcodes)
 *         #
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1533
 *             tmp3 = newarray(maxprocs, &ierrcodes)
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_spawn(
 *             cmd, argv, maxprocs, info.ob_mpi, root,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1533, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_5 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_5);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/Comm.pyx":1534
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_spawn(             # <<<<<<<<<<<<<<
 *             cmd, argv, maxprocs, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1536
 *         with nogil: CHKERR( MPI_Comm_spawn(
 *             cmd, argv, maxprocs, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef int i=0
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_spawn(__pyx_v_cmd, __pyx_v_argv, __pyx_v_maxprocs, __pyx_v_info->ob_mpi, __pyx_v_root, __pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_comm->__pyx_base.ob_mpi), __pyx_v_ierrcodes)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1534, __pyx_L6_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1534
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_spawn(             # <<<<<<<<<<<<<<
 *             cmd, argv, maxprocs, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L7;
        }
        __pyx_L6_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L7:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1538
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )
 *         #
 *         cdef int i=0             # <<<<<<<<<<<<<<
 *         if errcodes is not None:
 *             errcodes[:] = [ierrcodes[i] for i from 0 <= i < maxprocs]
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Comm.pyx":1539
 *         #
 *         cdef int i=0
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             errcodes[:] = [ierrcodes[i] for i from 0 <= i < maxprocs]
 *         #
 */
  __pyx_t_4 = (__pyx_v_errcodes != Py_None);
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1540
 *         cdef int i=0
 *         if errcodes is not None:
 *             errcodes[:] = [ierrcodes[i] for i from 0 <= i < maxprocs]             # <<<<<<<<<<<<<<
 *         #
 *         comm_set_eh(comm.ob_mpi)
 */
    __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __pyx_v_maxprocs;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
      __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_ierrcodes[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1540, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    if (__Pyx_PyObject_SetSlice(__pyx_v_errcodes, __pyx_t_5, 0, 0, NULL, NULL, &__pyx_slice__91, 0, 0, 1) < 0) __PYX_ERR(7, 1540, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/Comm.pyx":1539
 *         #
 *         cdef int i=0
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             errcodes[:] = [ierrcodes[i] for i from 0 <= i < maxprocs]
 *         #
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1542
 *             errcodes[:] = [ierrcodes[i] for i from 0 <= i < maxprocs]
 *         #
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1542, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1543
 *         #
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     def Spawn_multiple(self, command, args=None, maxprocs=None,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1515
 *     # Starting Processes
 * 
 *     def Spawn(self, command, args=None, int maxprocs=1,             # <<<<<<<<<<<<<<
 *               Info info=INFO_NULL, int root=0, errcodes=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Spawn", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_tmp3);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1545
 *         return comm
 * 
 *     def Spawn_multiple(self, command, args=None, maxprocs=None,             # <<<<<<<<<<<<<<
 *                        info=INFO_NULL, int root=0, errcodes=None):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_31Spawn_multiple(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_30Spawn_multiple[] = "Intracomm.Spawn_multiple(self, command, args=None, maxprocs=None, info=INFO_NULL, int root=0, errcodes=None)\n\n        Spawn instances of multiple MPI applications\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_31Spawn_multiple(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_command = 0;
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_maxprocs = 0;
  PyObject *__pyx_v_info = 0;
  int __pyx_v_root;
  PyObject *__pyx_v_errcodes = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Spawn_multiple (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_command,&__pyx_n_s_args,&__pyx_n_s_maxprocs,&__pyx_n_s_info,&__pyx_n_s_root,&__pyx_n_s_errcodes,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = __pyx_k__92;

    /* "mpi4py/MPI/Comm.pyx":1546
 * 
 *     def Spawn_multiple(self, command, args=None, maxprocs=None,
 *                        info=INFO_NULL, int root=0, errcodes=None):             # <<<<<<<<<<<<<<
 *         """
 *         Spawn instances of multiple MPI applications
 */
    values[5] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_command)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxprocs);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errcodes);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Spawn_multiple") < 0)) __PYX_ERR(7, 1545, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_command = values[0];
    __pyx_v_args = values[1];
    __pyx_v_maxprocs = values[2];
    __pyx_v_info = values[3];
    if (values[4]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1546, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
    __pyx_v_errcodes = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Spawn_multiple", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1545, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Spawn_multiple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_30Spawn_multiple(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_command, __pyx_v_args, __pyx_v_maxprocs, __pyx_v_info, __pyx_v_root, __pyx_v_errcodes);

  /* "mpi4py/MPI/Comm.pyx":1545
 *         return comm
 * 
 *     def Spawn_multiple(self, command, args=None, maxprocs=None,             # <<<<<<<<<<<<<<
 *                        info=INFO_NULL, int root=0, errcodes=None):
 *         """
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_30Spawn_multiple(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_command, PyObject *__pyx_v_args, PyObject *__pyx_v_maxprocs, PyObject *__pyx_v_info, int __pyx_v_root, PyObject *__pyx_v_errcodes) {
  int __pyx_v_count;
  char **__pyx_v_cmds;
  char ***__pyx_v_argvs;
  MPI_Info *__pyx_v_infos;
  int *__pyx_v_imaxprocs;
  int *__pyx_v_ierrcodes;
  int __pyx_v_rank;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp4 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp5 = 0;
  int __pyx_v_i;
  int __pyx_v_np;
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  int __pyx_v_j;
  int __pyx_v_p;
  int __pyx_v_q;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("Spawn_multiple", 0);

  /* "mpi4py/MPI/Comm.pyx":1550
 *         Spawn instances of multiple MPI applications
 *         """
 *         cdef int count = 0             # <<<<<<<<<<<<<<
 *         cdef char **cmds = NULL
 *         cdef char ***argvs = MPI_ARGVS_NULL
 */
  __pyx_v_count = 0;

  /* "mpi4py/MPI/Comm.pyx":1551
 *         """
 *         cdef int count = 0
 *         cdef char **cmds = NULL             # <<<<<<<<<<<<<<
 *         cdef char ***argvs = MPI_ARGVS_NULL
 *         cdef MPI_Info *infos = NULL
 */
  __pyx_v_cmds = NULL;

  /* "mpi4py/MPI/Comm.pyx":1552
 *         cdef int count = 0
 *         cdef char **cmds = NULL
 *         cdef char ***argvs = MPI_ARGVS_NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Info *infos = NULL
 *         cdef int *imaxprocs = NULL
 */
  __pyx_v_argvs = MPI_ARGVS_NULL;

  /* "mpi4py/MPI/Comm.pyx":1553
 *         cdef char **cmds = NULL
 *         cdef char ***argvs = MPI_ARGVS_NULL
 *         cdef MPI_Info *infos = NULL             # <<<<<<<<<<<<<<
 *         cdef int *imaxprocs = NULL
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE
 */
  __pyx_v_infos = NULL;

  /* "mpi4py/MPI/Comm.pyx":1554
 *         cdef char ***argvs = MPI_ARGVS_NULL
 *         cdef MPI_Info *infos = NULL
 *         cdef int *imaxprocs = NULL             # <<<<<<<<<<<<<<
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE
 *         #
 */
  __pyx_v_imaxprocs = NULL;

  /* "mpi4py/MPI/Comm.pyx":1555
 *         cdef MPI_Info *infos = NULL
 *         cdef int *imaxprocs = NULL
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE             # <<<<<<<<<<<<<<
 *         #
 *         cdef int rank = MPI_UNDEFINED
 */
  __pyx_v_ierrcodes = MPI_ERRCODES_IGNORE;

  /* "mpi4py/MPI/Comm.pyx":1557
 *         cdef int *ierrcodes = MPI_ERRCODES_IGNORE
 *         #
 *         cdef int rank = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         cdef tmp1, tmp2, tmp3, tmp4, tmp5
 */
  __pyx_v_rank = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1558
 *         #
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )             # <<<<<<<<<<<<<<
 *         cdef tmp1, tmp2, tmp3, tmp4, tmp5
 *         if root == rank:
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1558, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1560
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         cdef tmp1, tmp2, tmp3, tmp4, tmp5
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             tmp1 = asarray_cmds(command, &count, &cmds)
 *             tmp2 = asarray_argvs(args, count, &argvs)
 */
  __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1561
 *         cdef tmp1, tmp2, tmp3, tmp4, tmp5
 *         if root == rank:
 *             tmp1 = asarray_cmds(command, &count, &cmds)             # <<<<<<<<<<<<<<
 *             tmp2 = asarray_argvs(args, count, &argvs)
 *             tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_cmds(__pyx_v_command, (&__pyx_v_count), (&__pyx_v_cmds)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1561, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp1 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1562
 *         if root == rank:
 *             tmp1 = asarray_cmds(command, &count, &cmds)
 *             tmp2 = asarray_argvs(args, count, &argvs)             # <<<<<<<<<<<<<<
 *             tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 *             tmp4 = asarray_Info(info, count, &infos)
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_argvs(__pyx_v_args, __pyx_v_count, (&__pyx_v_argvs)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1562, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp2 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1563
 *             tmp1 = asarray_cmds(command, &count, &cmds)
 *             tmp2 = asarray_argvs(args, count, &argvs)
 *             tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)             # <<<<<<<<<<<<<<
 *             tmp4 = asarray_Info(info, count, &infos)
 *         cdef int i=0, np=0
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_nprocs(__pyx_v_maxprocs, __pyx_v_count, (&__pyx_v_imaxprocs)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp3 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1564
 *             tmp2 = asarray_argvs(args, count, &argvs)
 *             tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 *             tmp4 = asarray_Info(info, count, &infos)             # <<<<<<<<<<<<<<
 *         cdef int i=0, np=0
 *         if errcodes is not None:
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_Info(__pyx_v_info, __pyx_v_count, (&__pyx_v_infos)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1564, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp4 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1560
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         cdef tmp1, tmp2, tmp3, tmp4, tmp5
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             tmp1 = asarray_cmds(command, &count, &cmds)
 *             tmp2 = asarray_argvs(args, count, &argvs)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1565
 *             tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 *             tmp4 = asarray_Info(info, count, &infos)
 *         cdef int i=0, np=0             # <<<<<<<<<<<<<<
 *         if errcodes is not None:
 *             if root != rank:
 */
  __pyx_v_i = 0;
  __pyx_v_np = 0;

  /* "mpi4py/MPI/Comm.pyx":1566
 *             tmp4 = asarray_Info(info, count, &infos)
 *         cdef int i=0, np=0
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             if root != rank:
 *                 count = <int>len(maxprocs)
 */
  __pyx_t_2 = (__pyx_v_errcodes != Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "mpi4py/MPI/Comm.pyx":1567
 *         cdef int i=0, np=0
 *         if errcodes is not None:
 *             if root != rank:             # <<<<<<<<<<<<<<
 *                 count = <int>len(maxprocs)
 *                 tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 */
    __pyx_t_4 = ((__pyx_v_root != __pyx_v_rank) != 0);
    if (__pyx_t_4) {

      /* "mpi4py/MPI/Comm.pyx":1568
 *         if errcodes is not None:
 *             if root != rank:
 *                 count = <int>len(maxprocs)             # <<<<<<<<<<<<<<
 *                 tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 *             for i from 0 <= i < count: np += imaxprocs[i]
 */
      __pyx_t_5 = PyObject_Length(__pyx_v_maxprocs); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(7, 1568, __pyx_L1_error)
      __pyx_v_count = ((int)__pyx_t_5);

      /* "mpi4py/MPI/Comm.pyx":1569
 *             if root != rank:
 *                 count = <int>len(maxprocs)
 *                 tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)             # <<<<<<<<<<<<<<
 *             for i from 0 <= i < count: np += imaxprocs[i]
 *             tmp5 = newarray(np, &ierrcodes)
 */
      __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asarray_nprocs(__pyx_v_maxprocs, __pyx_v_count, (&__pyx_v_imaxprocs)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1569, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_tmp3, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "mpi4py/MPI/Comm.pyx":1567
 *         cdef int i=0, np=0
 *         if errcodes is not None:
 *             if root != rank:             # <<<<<<<<<<<<<<
 *                 count = <int>len(maxprocs)
 *                 tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 */
    }

    /* "mpi4py/MPI/Comm.pyx":1570
 *                 count = <int>len(maxprocs)
 *                 tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 *             for i from 0 <= i < count: np += imaxprocs[i]             # <<<<<<<<<<<<<<
 *             tmp5 = newarray(np, &ierrcodes)
 *         #
 */
    __pyx_t_1 = __pyx_v_count;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
      __pyx_v_np = (__pyx_v_np + (__pyx_v_imaxprocs[__pyx_v_i]));
    }

    /* "mpi4py/MPI/Comm.pyx":1571
 *                 tmp3 = asarray_nprocs(maxprocs, count, &imaxprocs)
 *             for i from 0 <= i < count: np += imaxprocs[i]
 *             tmp5 = newarray(np, &ierrcodes)             # <<<<<<<<<<<<<<
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 */
    __pyx_t_3 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_np, (&__pyx_v_ierrcodes)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_tmp5 = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1566
 *             tmp4 = asarray_Info(info, count, &infos)
 *         cdef int i=0, np=0
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             if root != rank:
 *                 count = <int>len(maxprocs)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1573
 *             tmp5 = newarray(np, &ierrcodes)
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_spawn_multiple(
 *             count, cmds, argvs, imaxprocs, infos, root,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1573, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_6 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_6);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "mpi4py/MPI/Comm.pyx":1574
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_spawn_multiple(             # <<<<<<<<<<<<<<
 *             count, cmds, argvs, imaxprocs, infos, root,
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1576
 *         with nogil: CHKERR( MPI_Comm_spawn_multiple(
 *             count, cmds, argvs, imaxprocs, infos, root,
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )             # <<<<<<<<<<<<<<
 *         #
 *         cdef int j=0, p=0, q=0
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_spawn_multiple(__pyx_v_count, __pyx_v_cmds, __pyx_v_argvs, __pyx_v_imaxprocs, __pyx_v_infos, __pyx_v_root, __pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_comm->__pyx_base.ob_mpi), __pyx_v_ierrcodes)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1574, __pyx_L9_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1574
 *         #
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_spawn_multiple(             # <<<<<<<<<<<<<<
 *             count, cmds, argvs, imaxprocs, infos, root,
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L10;
        }
        __pyx_L9_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L10:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1578
 *             self.ob_mpi, &comm.ob_mpi, ierrcodes) )
 *         #
 *         cdef int j=0, p=0, q=0             # <<<<<<<<<<<<<<
 *         if errcodes is not None:
 *             errcodes[:] = [[] for j from 0 <= j < count]
 */
  __pyx_v_j = 0;
  __pyx_v_p = 0;
  __pyx_v_q = 0;

  /* "mpi4py/MPI/Comm.pyx":1579
 *         #
 *         cdef int j=0, p=0, q=0
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             errcodes[:] = [[] for j from 0 <= j < count]
 *             for i from 0 <= i < count:
 */
  __pyx_t_4 = (__pyx_v_errcodes != Py_None);
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1580
 *         cdef int j=0, p=0, q=0
 *         if errcodes is not None:
 *             errcodes[:] = [[] for j from 0 <= j < count]             # <<<<<<<<<<<<<<
 *             for i from 0 <= i < count:
 *                 q = p + imaxprocs[i]
 */
    __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 1580, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __pyx_v_count;
    for (__pyx_v_j = 0; __pyx_v_j < __pyx_t_1; __pyx_v_j++) {
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1580, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    if (__Pyx_PyObject_SetSlice(__pyx_v_errcodes, __pyx_t_6, 0, 0, NULL, NULL, &__pyx_slice__91, 0, 0, 1) < 0) __PYX_ERR(7, 1580, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "mpi4py/MPI/Comm.pyx":1581
 *         if errcodes is not None:
 *             errcodes[:] = [[] for j from 0 <= j < count]
 *             for i from 0 <= i < count:             # <<<<<<<<<<<<<<
 *                 q = p + imaxprocs[i]
 *                 errcodes[i][:] = [ierrcodes[j] for j from p <= j < q]
 */
    __pyx_t_1 = __pyx_v_count;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {

      /* "mpi4py/MPI/Comm.pyx":1582
 *             errcodes[:] = [[] for j from 0 <= j < count]
 *             for i from 0 <= i < count:
 *                 q = p + imaxprocs[i]             # <<<<<<<<<<<<<<
 *                 errcodes[i][:] = [ierrcodes[j] for j from p <= j < q]
 *                 p = q
 */
      __pyx_v_q = (__pyx_v_p + (__pyx_v_imaxprocs[__pyx_v_i]));

      /* "mpi4py/MPI/Comm.pyx":1583
 *             for i from 0 <= i < count:
 *                 q = p + imaxprocs[i]
 *                 errcodes[i][:] = [ierrcodes[j] for j from p <= j < q]             # <<<<<<<<<<<<<<
 *                 p = q
 *         #
 */
      __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 1583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __pyx_v_q;
      for (__pyx_v_j = __pyx_v_p; __pyx_v_j < __pyx_t_7; __pyx_v_j++) {
        __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_ierrcodes[__pyx_v_j])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1583, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1583, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_errcodes, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1583, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__Pyx_PyObject_SetSlice(__pyx_t_3, __pyx_t_6, 0, 0, NULL, NULL, &__pyx_slice__91, 0, 0, 1) < 0) __PYX_ERR(7, 1583, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

      /* "mpi4py/MPI/Comm.pyx":1584
 *                 q = p + imaxprocs[i]
 *                 errcodes[i][:] = [ierrcodes[j] for j from p <= j < q]
 *                 p = q             # <<<<<<<<<<<<<<
 *         #
 *         comm_set_eh(comm.ob_mpi)
 */
      __pyx_v_p = __pyx_v_q;
    }

    /* "mpi4py/MPI/Comm.pyx":1579
 *         #
 *         cdef int j=0, p=0, q=0
 *         if errcodes is not None:             # <<<<<<<<<<<<<<
 *             errcodes[:] = [[] for j from 0 <= j < count]
 *             for i from 0 <= i < count:
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1586
 *                 p = q
 *         #
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1586, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1587
 *         #
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     # Server Routines
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1545
 *         return comm
 * 
 *     def Spawn_multiple(self, command, args=None, maxprocs=None,             # <<<<<<<<<<<<<<
 *                        info=INFO_NULL, int root=0, errcodes=None):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Spawn_multiple", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_tmp3);
  __Pyx_XDECREF(__pyx_v_tmp4);
  __Pyx_XDECREF(__pyx_v_tmp5);
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1591
 *     # Server Routines
 * 
 *     def Accept(self, port_name, Info info=INFO_NULL, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Accept a request to form a new intercommunicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_33Accept(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_32Accept[] = "Intracomm.Accept(self, port_name, Info info=INFO_NULL, int root=0)\n\n        Accept a request to form a new intercommunicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_33Accept(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_port_name = 0;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Accept (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_port_name,&__pyx_n_s_info,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    values[1] = (PyObject *)__pyx_k__93;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_port_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Accept") < 0)) __PYX_ERR(7, 1591, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_port_name = values[0];
    __pyx_v_info = ((struct PyMPIInfoObject *)values[1]);
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1591, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Accept", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1591, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Accept", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 1591, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_32Accept(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_port_name, __pyx_v_info, __pyx_v_root);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_32Accept(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_port_name, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_root) {
  char *__pyx_v_cportname;
  int __pyx_v_rank;
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Accept", 0);
  __Pyx_INCREF(__pyx_v_port_name);

  /* "mpi4py/MPI/Comm.pyx":1595
 *         Accept a request to form a new intercommunicator
 *         """
 *         cdef char *cportname = NULL             # <<<<<<<<<<<<<<
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 */
  __pyx_v_cportname = NULL;

  /* "mpi4py/MPI/Comm.pyx":1596
 *         """
 *         cdef char *cportname = NULL
 *         cdef int rank = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:
 */
  __pyx_v_rank = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1597
 *         cdef char *cportname = NULL
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )             # <<<<<<<<<<<<<<
 *         if root == rank:
 *             port_name = asmpistr(port_name, &cportname)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1597, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1598
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 */
  __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1599
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:
 *             port_name = asmpistr(port_name, &cportname)             # <<<<<<<<<<<<<<
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_accept(
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_port_name, (&__pyx_v_cportname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_port_name, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1598
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1600
 *         if root == rank:
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_accept(
 *             cportname, info.ob_mpi, root,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1600, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":1601
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_accept(             # <<<<<<<<<<<<<<
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1603
 *         with nogil: CHKERR( MPI_Comm_accept(
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_accept(__pyx_v_cportname, __pyx_v_info->ob_mpi, __pyx_v_root, __pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_comm->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1601, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1601
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_accept(             # <<<<<<<<<<<<<<
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1604
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1604, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1605
 *             self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 *     # Client Routines
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1591
 *     # Server Routines
 * 
 *     def Accept(self, port_name, Info info=INFO_NULL, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Accept a request to form a new intercommunicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Accept", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_port_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1609
 *     # Client Routines
 * 
 *     def Connect(self, port_name, Info info=INFO_NULL, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Make a request to form a new intercommunicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_35Connect(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intracomm_34Connect[] = "Intracomm.Connect(self, port_name, Info info=INFO_NULL, int root=0)\n\n        Make a request to form a new intercommunicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intracomm_35Connect(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_port_name = 0;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  int __pyx_v_root;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Connect (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_port_name,&__pyx_n_s_info,&__pyx_n_s_root,0};
    PyObject* values[3] = {0,0,0};
    values[1] = (PyObject *)__pyx_k__94;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_port_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_root);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Connect") < 0)) __PYX_ERR(7, 1609, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_port_name = values[0];
    __pyx_v_info = ((struct PyMPIInfoObject *)values[1]);
    if (values[2]) {
      __pyx_v_root = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_root == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1609, __pyx_L3_error)
    } else {
      __pyx_v_root = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Connect", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1609, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Connect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 1609, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intracomm_34Connect(((struct PyMPIIntracommObject *)__pyx_v_self), __pyx_v_port_name, __pyx_v_info, __pyx_v_root);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intracomm_34Connect(struct PyMPIIntracommObject *__pyx_v_self, PyObject *__pyx_v_port_name, struct PyMPIInfoObject *__pyx_v_info, int __pyx_v_root) {
  char *__pyx_v_cportname;
  int __pyx_v_rank;
  struct PyMPIIntercommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Connect", 0);
  __Pyx_INCREF(__pyx_v_port_name);

  /* "mpi4py/MPI/Comm.pyx":1613
 *         Make a request to form a new intercommunicator
 *         """
 *         cdef char *cportname = NULL             # <<<<<<<<<<<<<<
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 */
  __pyx_v_cportname = NULL;

  /* "mpi4py/MPI/Comm.pyx":1614
 *         """
 *         cdef char *cportname = NULL
 *         cdef int rank = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:
 */
  __pyx_v_rank = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1615
 *         cdef char *cportname = NULL
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )             # <<<<<<<<<<<<<<
 *         if root == rank:
 *             port_name = asmpistr(port_name, &cportname)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_rank(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1615, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1616
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 */
  __pyx_t_2 = ((__pyx_v_root == __pyx_v_rank) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1617
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:
 *             port_name = asmpistr(port_name, &cportname)             # <<<<<<<<<<<<<<
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_connect(
 */
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_port_name, (&__pyx_v_cportname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1617, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_port_name, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1616
 *         cdef int rank = MPI_UNDEFINED
 *         CHKERR( MPI_Comm_rank(self.ob_mpi, &rank) )
 *         if root == rank:             # <<<<<<<<<<<<<<
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1618
 *         if root == rank:
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_connect(
 *             cportname, info.ob_mpi, root,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intercomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intercomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1618, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_comm = ((struct PyMPIIntercommObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Comm.pyx":1619
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_connect(             # <<<<<<<<<<<<<<
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1621
 *         with nogil: CHKERR( MPI_Comm_connect(
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_connect(__pyx_v_cportname, __pyx_v_info->ob_mpi, __pyx_v_root, __pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_comm->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1619, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1619
 *             port_name = asmpistr(port_name, &cportname)
 *         cdef Intercomm comm = <Intercomm>Intercomm.__new__(Intercomm)
 *         with nogil: CHKERR( MPI_Comm_connect(             # <<<<<<<<<<<<<<
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1622
 *             cportname, info.ob_mpi, root,
 *             self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1622, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1623
 *             self.ob_mpi, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1609
 *     # Client Routines
 * 
 *     def Connect(self, port_name, Info info=INFO_NULL, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Make a request to form a new intercommunicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Intracomm.Connect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_port_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1632
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Topocomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Topocomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 1632, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1632, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 1632, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm___cinit__(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Topocomm___cinit__(struct PyMPITopocommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_topo;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":1633
 * 
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return             # <<<<<<<<<<<<<<
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.__pyx_base.ob_mpi == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1634
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo == MPI_UNDEFINED: raise TypeError(
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1635
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )             # <<<<<<<<<<<<<<
 *         if topo == MPI_UNDEFINED: raise TypeError(
 *             "expecting a topology communicator")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_self->__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_topo))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1635, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1636
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo == MPI_UNDEFINED: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a topology communicator")
 * 
 */
  __pyx_t_1 = ((__pyx_v_topo == MPI_UNDEFINED) != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__95, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1636, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(7, 1636, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Comm.pyx":1632
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1641
 *     property degrees:
 *         "number of incoming and outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef object dim, rank
 *             cdef object nneighbors
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_7degrees_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_7degrees_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_7degrees___get__(((struct PyMPITopocommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_7degrees___get__(struct PyMPITopocommObject *__pyx_v_self) {
  PyObject *__pyx_v_dim = 0;
  PyObject *__pyx_v_rank = 0;
  PyObject *__pyx_v_nneighbors = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1644
 *             cdef object dim, rank
 *             cdef object nneighbors
 *             if isinstance(self, Cartcomm):             # <<<<<<<<<<<<<<
 *                 dim = self.Get_dim()
 *                 return (2*dim, 2*dim)
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Cartcomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1645
 *             cdef object nneighbors
 *             if isinstance(self, Cartcomm):
 *                 dim = self.Get_dim()             # <<<<<<<<<<<<<<
 *                 return (2*dim, 2*dim)
 *             if isinstance(self, Graphcomm):
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_dim = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1646
 *             if isinstance(self, Cartcomm):
 *                 dim = self.Get_dim()
 *                 return (2*dim, 2*dim)             # <<<<<<<<<<<<<<
 *             if isinstance(self, Graphcomm):
 *                 rank = self.Get_rank()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyNumber_Multiply(__pyx_int_2, __pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyNumber_Multiply(__pyx_int_2, __pyx_v_dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1644
 *             cdef object dim, rank
 *             cdef object nneighbors
 *             if isinstance(self, Cartcomm):             # <<<<<<<<<<<<<<
 *                 dim = self.Get_dim()
 *                 return (2*dim, 2*dim)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1647
 *                 dim = self.Get_dim()
 *                 return (2*dim, 2*dim)
 *             if isinstance(self, Graphcomm):             # <<<<<<<<<<<<<<
 *                 rank = self.Get_rank()
 *                 nneighbors = self.Get_neighbors_count(rank)
 */
  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Graphcomm); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Comm.pyx":1648
 *                 return (2*dim, 2*dim)
 *             if isinstance(self, Graphcomm):
 *                 rank = self.Get_rank()             # <<<<<<<<<<<<<<
 *                 nneighbors = self.Get_neighbors_count(rank)
 *                 return (nneighbors, nneighbors)
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_rank = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/Comm.pyx":1649
 *             if isinstance(self, Graphcomm):
 *                 rank = self.Get_rank()
 *                 nneighbors = self.Get_neighbors_count(rank)             # <<<<<<<<<<<<<<
 *                 return (nneighbors, nneighbors)
 *             if isinstance(self, Distgraphcomm):
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_neighbors_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1649, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_rank) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_rank);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1649, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_nneighbors = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "mpi4py/MPI/Comm.pyx":1650
 *                 rank = self.Get_rank()
 *                 nneighbors = self.Get_neighbors_count(rank)
 *                 return (nneighbors, nneighbors)             # <<<<<<<<<<<<<<
 *             if isinstance(self, Distgraphcomm):
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_nneighbors);
    __Pyx_GIVEREF(__pyx_v_nneighbors);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_nneighbors);
    __Pyx_INCREF(__pyx_v_nneighbors);
    __Pyx_GIVEREF(__pyx_v_nneighbors);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_nneighbors);
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1647
 *                 dim = self.Get_dim()
 *                 return (2*dim, 2*dim)
 *             if isinstance(self, Graphcomm):             # <<<<<<<<<<<<<<
 *                 rank = self.Get_rank()
 *                 nneighbors = self.Get_neighbors_count(rank)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1651
 *                 nneighbors = self.Get_neighbors_count(rank)
 *                 return (nneighbors, nneighbors)
 *             if isinstance(self, Distgraphcomm):             # <<<<<<<<<<<<<<
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]
 *                 return nneighbors
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Distgraphcomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1652
 *                 return (nneighbors, nneighbors)
 *             if isinstance(self, Distgraphcomm):
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]             # <<<<<<<<<<<<<<
 *                 return nneighbors
 *             raise TypeError("Not a topology communicator")
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dist_neighbors_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_5, 0, 2, NULL, NULL, &__pyx_slice__96, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_nneighbors = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/Comm.pyx":1653
 *             if isinstance(self, Distgraphcomm):
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]
 *                 return nneighbors             # <<<<<<<<<<<<<<
 *             raise TypeError("Not a topology communicator")
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_nneighbors);
    __pyx_r = __pyx_v_nneighbors;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1651
 *                 nneighbors = self.Get_neighbors_count(rank)
 *                 return (nneighbors, nneighbors)
 *             if isinstance(self, Distgraphcomm):             # <<<<<<<<<<<<<<
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]
 *                 return nneighbors
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1654
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]
 *                 return nneighbors
 *             raise TypeError("Not a topology communicator")             # <<<<<<<<<<<<<<
 * 
 *     property indegree:
 */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__97, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_Raise(__pyx_t_4, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __PYX_ERR(7, 1654, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1641
 *     property degrees:
 *         "number of incoming and outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef object dim, rank
 *             cdef object nneighbors
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.degrees.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dim);
  __Pyx_XDECREF(__pyx_v_rank);
  __Pyx_XDECREF(__pyx_v_nneighbors);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1658
 *     property indegree:
 *         "number of incoming neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.degrees[0]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_8indegree_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_8indegree_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_8indegree___get__(((struct PyMPITopocommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_8indegree___get__(struct PyMPITopocommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1659
 *         "number of incoming neighbors"
 *         def __get__(self):
 *             return self.degrees[0]             # <<<<<<<<<<<<<<
 * 
 *     property outdegree:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_degrees); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1658
 *     property indegree:
 *         "number of incoming neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.degrees[0]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.indegree.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1663
 *     property outdegree:
 *         "number of outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.degrees[1]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_9outdegree_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_9outdegree_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_9outdegree___get__(((struct PyMPITopocommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_9outdegree___get__(struct PyMPITopocommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1664
 *         "number of outgoing neighbors"
 *         def __get__(self):
 *             return self.degrees[1]             # <<<<<<<<<<<<<<
 * 
 *     property inoutedges:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_degrees); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1663
 *     property outdegree:
 *         "number of outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.degrees[1]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.outdegree.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1668
 *     property inoutedges:
 *         "incoming and outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef object direction, source, dest, rank
 *             cdef object neighbors
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_10inoutedges_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_10inoutedges_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_10inoutedges___get__(((struct PyMPITopocommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_10inoutedges___get__(struct PyMPITopocommObject *__pyx_v_self) {
  PyObject *__pyx_v_direction = 0;
  PyObject *__pyx_v_source = 0;
  PyObject *__pyx_v_dest = 0;
  PyObject *__pyx_v_rank = 0;
  PyObject *__pyx_v_neighbors = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *(*__pyx_t_11)(PyObject *);
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1671
 *             cdef object direction, source, dest, rank
 *             cdef object neighbors
 *             if isinstance(self, Cartcomm):             # <<<<<<<<<<<<<<
 *                 neighbors = []
 *                 for direction in range(self.Get_dim()):
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Cartcomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1672
 *             cdef object neighbors
 *             if isinstance(self, Cartcomm):
 *                 neighbors = []             # <<<<<<<<<<<<<<
 *                 for direction in range(self.Get_dim()):
 *                     source, dest = self.Shift(direction, 1)
 */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_neighbors = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1673
 *             if isinstance(self, Cartcomm):
 *                 neighbors = []
 *                 for direction in range(self.Get_dim()):             # <<<<<<<<<<<<<<
 *                     source, dest = self.Shift(direction, 1)
 *                     neighbors.append(source)
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dim); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 1673, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(7, 1673, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1673, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(7, 1673, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1673, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_7(__pyx_t_3);
        if (unlikely(!__pyx_t_4)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(7, 1673, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_XDECREF_SET(__pyx_v_direction, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "mpi4py/MPI/Comm.pyx":1674
 *                 neighbors = []
 *                 for direction in range(self.Get_dim()):
 *                     source, dest = self.Shift(direction, 1)             # <<<<<<<<<<<<<<
 *                     neighbors.append(source)
 *                     neighbors.append(dest)
 */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Shift); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1674, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = NULL;
      __pyx_t_9 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_9 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_direction, __pyx_int_1};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_v_direction, __pyx_int_1};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_4);
      } else
      #endif
      {
        __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (__pyx_t_8) {
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
        }
        __Pyx_INCREF(__pyx_v_direction);
        __Pyx_GIVEREF(__pyx_v_direction);
        PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_v_direction);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_int_1);
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
        PyObject* sequence = __pyx_t_4;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(7, 1674, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_10);
        #else
        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        #endif
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_8 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(7, 1674, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_11 = Py_TYPE(__pyx_t_8)->tp_iternext;
        index = 0; __pyx_t_5 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_10 = __pyx_t_11(__pyx_t_8); if (unlikely(!__pyx_t_10)) goto __pyx_L6_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_10);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_8), 2) < 0) __PYX_ERR(7, 1674, __pyx_L1_error)
        __pyx_t_11 = NULL;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L7_unpacking_done;
        __pyx_L6_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_11 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(7, 1674, __pyx_L1_error)
        __pyx_L7_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_source, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_XDECREF_SET(__pyx_v_dest, __pyx_t_10);
      __pyx_t_10 = 0;

      /* "mpi4py/MPI/Comm.pyx":1675
 *                 for direction in range(self.Get_dim()):
 *                     source, dest = self.Shift(direction, 1)
 *                     neighbors.append(source)             # <<<<<<<<<<<<<<
 *                     neighbors.append(dest)
 *                 return (neighbors, neighbors)
 */
      __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_neighbors, __pyx_v_source); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(7, 1675, __pyx_L1_error)

      /* "mpi4py/MPI/Comm.pyx":1676
 *                     source, dest = self.Shift(direction, 1)
 *                     neighbors.append(source)
 *                     neighbors.append(dest)             # <<<<<<<<<<<<<<
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Graphcomm):
 */
      __pyx_t_12 = __Pyx_PyObject_Append(__pyx_v_neighbors, __pyx_v_dest); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(7, 1676, __pyx_L1_error)

      /* "mpi4py/MPI/Comm.pyx":1673
 *             if isinstance(self, Cartcomm):
 *                 neighbors = []
 *                 for direction in range(self.Get_dim()):             # <<<<<<<<<<<<<<
 *                     source, dest = self.Shift(direction, 1)
 *                     neighbors.append(source)
 */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1677
 *                     neighbors.append(source)
 *                     neighbors.append(dest)
 *                 return (neighbors, neighbors)             # <<<<<<<<<<<<<<
 *             if isinstance(self, Graphcomm):
 *                 rank = self.Get_rank()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_neighbors);
    __Pyx_GIVEREF(__pyx_v_neighbors);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_neighbors);
    __Pyx_INCREF(__pyx_v_neighbors);
    __Pyx_GIVEREF(__pyx_v_neighbors);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_neighbors);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1671
 *             cdef object direction, source, dest, rank
 *             cdef object neighbors
 *             if isinstance(self, Cartcomm):             # <<<<<<<<<<<<<<
 *                 neighbors = []
 *                 for direction in range(self.Get_dim()):
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1678
 *                     neighbors.append(dest)
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Graphcomm):             # <<<<<<<<<<<<<<
 *                 rank = self.Get_rank()
 *                 neighbors = self.Get_neighbors(rank)
 */
  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Graphcomm); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Comm.pyx":1679
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Graphcomm):
 *                 rank = self.Get_rank()             # <<<<<<<<<<<<<<
 *                 neighbors = self.Get_neighbors(rank)
 *                 return (neighbors, neighbors)
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1679, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_rank = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1680
 *             if isinstance(self, Graphcomm):
 *                 rank = self.Get_rank()
 *                 neighbors = self.Get_neighbors(rank)             # <<<<<<<<<<<<<<
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Distgraphcomm):
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_neighbors); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, __pyx_v_rank) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_rank);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1680, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_neighbors = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Comm.pyx":1681
 *                 rank = self.Get_rank()
 *                 neighbors = self.Get_neighbors(rank)
 *                 return (neighbors, neighbors)             # <<<<<<<<<<<<<<
 *             if isinstance(self, Distgraphcomm):
 *                 neighbors = self.Get_dist_neighbors()[:2]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_neighbors);
    __Pyx_GIVEREF(__pyx_v_neighbors);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_neighbors);
    __Pyx_INCREF(__pyx_v_neighbors);
    __Pyx_GIVEREF(__pyx_v_neighbors);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_neighbors);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1678
 *                     neighbors.append(dest)
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Graphcomm):             # <<<<<<<<<<<<<<
 *                 rank = self.Get_rank()
 *                 neighbors = self.Get_neighbors(rank)
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1682
 *                 neighbors = self.Get_neighbors(rank)
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Distgraphcomm):             # <<<<<<<<<<<<<<
 *                 neighbors = self.Get_dist_neighbors()[:2]
 *                 return neighbors
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), __pyx_ptype_6mpi4py_3MPI_Distgraphcomm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":1683
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Distgraphcomm):
 *                 neighbors = self.Get_dist_neighbors()[:2]             # <<<<<<<<<<<<<<
 *                 return neighbors
 *             raise TypeError("Not a topology communicator")
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dist_neighbors); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 2, NULL, NULL, &__pyx_slice__96, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_neighbors = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/Comm.pyx":1684
 *             if isinstance(self, Distgraphcomm):
 *                 neighbors = self.Get_dist_neighbors()[:2]
 *                 return neighbors             # <<<<<<<<<<<<<<
 *             raise TypeError("Not a topology communicator")
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_neighbors);
    __pyx_r = __pyx_v_neighbors;
    goto __pyx_L0;

    /* "mpi4py/MPI/Comm.pyx":1682
 *                 neighbors = self.Get_neighbors(rank)
 *                 return (neighbors, neighbors)
 *             if isinstance(self, Distgraphcomm):             # <<<<<<<<<<<<<<
 *                 neighbors = self.Get_dist_neighbors()[:2]
 *                 return neighbors
 */
  }

  /* "mpi4py/MPI/Comm.pyx":1685
 *                 neighbors = self.Get_dist_neighbors()[:2]
 *                 return neighbors
 *             raise TypeError("Not a topology communicator")             # <<<<<<<<<<<<<<
 * 
 *     property inedges:
 */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__97, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1685, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_Raise(__pyx_t_4, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __PYX_ERR(7, 1685, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1668
 *     property inoutedges:
 *         "incoming and outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef object direction, source, dest, rank
 *             cdef object neighbors
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.inoutedges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_direction);
  __Pyx_XDECREF(__pyx_v_source);
  __Pyx_XDECREF(__pyx_v_dest);
  __Pyx_XDECREF(__pyx_v_rank);
  __Pyx_XDECREF(__pyx_v_neighbors);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1689
 *     property inedges:
 *         "incoming neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.inoutedges[0]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_7inedges_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_7inedges_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_7inedges___get__(((struct PyMPITopocommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_7inedges___get__(struct PyMPITopocommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1690
 *         "incoming neighbors"
 *         def __get__(self):
 *             return self.inoutedges[0]             # <<<<<<<<<<<<<<
 * 
 *     property outedges:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_inoutedges); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1689
 *     property inedges:
 *         "incoming neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.inoutedges[0]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.inedges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1694
 *     property outedges:
 *         "outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.inoutedges[1]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_8outedges_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_8outedges_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_8outedges___get__(((struct PyMPITopocommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_8outedges___get__(struct PyMPITopocommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1695
 *         "outgoing neighbors"
 *         def __get__(self):
 *             return self.inoutedges[1]             # <<<<<<<<<<<<<<
 * 
 *     # Neighborhood Collectives
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_inoutedges); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1694
 *     property outedges:
 *         "outgoing neighbors"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.inoutedges[1]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.outedges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1700
 *     # ------------------------
 * 
 *     def Neighbor_allgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor Gather to All
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_3Neighbor_allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_2Neighbor_allgather[] = "Topocomm.Neighbor_allgather(self, sendbuf, recvbuf)\n\n        Neighbor Gather to All\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_3Neighbor_allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Neighbor_allgather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Neighbor_allgather", 1, 2, 2, 1); __PYX_ERR(7, 1700, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Neighbor_allgather") < 0)) __PYX_ERR(7, 1700, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Neighbor_allgather", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1700, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_2Neighbor_allgather(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_2Neighbor_allgather(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Neighbor_allgather", 0);

  /* "mpi4py/MPI/Comm.pyx":1704
 *         Neighbor Gather to All
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_allgather(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1705
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_allgather(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1705, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1706
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_allgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1709
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Neighbor_allgatherv(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_allgather(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1706, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1706
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_allgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1700
 *     # ------------------------
 * 
 *     def Neighbor_allgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor Gather to All
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1711
 *             self.ob_mpi) )
 * 
 *     def Neighbor_allgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor Gather to All Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_5Neighbor_allgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_4Neighbor_allgatherv[] = "Topocomm.Neighbor_allgatherv(self, sendbuf, recvbuf)\n\n        Neighbor Gather to All Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_5Neighbor_allgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Neighbor_allgatherv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Neighbor_allgatherv", 1, 2, 2, 1); __PYX_ERR(7, 1711, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Neighbor_allgatherv") < 0)) __PYX_ERR(7, 1711, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Neighbor_allgatherv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1711, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_allgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_4Neighbor_allgatherv(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_4Neighbor_allgatherv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Neighbor_allgatherv", 0);

  /* "mpi4py/MPI/Comm.pyx":1715
 *         Neighbor Gather to All Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1716
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1716, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1717
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1720
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Neighbor_alltoall(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_allgatherv(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1717, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1717
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_allgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1711
 *             self.ob_mpi) )
 * 
 *     def Neighbor_allgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor Gather to All Vector
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_allgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1722
 *             self.ob_mpi) )
 * 
 *     def Neighbor_alltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor All-to-All
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_7Neighbor_alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_6Neighbor_alltoall[] = "Topocomm.Neighbor_alltoall(self, sendbuf, recvbuf)\n\n        Neighbor All-to-All\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_7Neighbor_alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Neighbor_alltoall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Neighbor_alltoall", 1, 2, 2, 1); __PYX_ERR(7, 1722, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Neighbor_alltoall") < 0)) __PYX_ERR(7, 1722, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Neighbor_alltoall", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1722, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_6Neighbor_alltoall(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_6Neighbor_alltoall(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Neighbor_alltoall", 0);

  /* "mpi4py/MPI/Comm.pyx":1726
 *         Neighbor All-to-All
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1727
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1727, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1728
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1731
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Neighbor_alltoallv(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_alltoall(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1728, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1728
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1722
 *             self.ob_mpi) )
 * 
 *     def Neighbor_alltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor All-to-All
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1733
 *             self.ob_mpi) )
 * 
 *     def Neighbor_alltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor All-to-All Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_9Neighbor_alltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_8Neighbor_alltoallv[] = "Topocomm.Neighbor_alltoallv(self, sendbuf, recvbuf)\n\n        Neighbor All-to-All Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_9Neighbor_alltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Neighbor_alltoallv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Neighbor_alltoallv", 1, 2, 2, 1); __PYX_ERR(7, 1733, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Neighbor_alltoallv") < 0)) __PYX_ERR(7, 1733, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Neighbor_alltoallv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1733, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_alltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_8Neighbor_alltoallv(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_8Neighbor_alltoallv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Neighbor_alltoallv", 0);

  /* "mpi4py/MPI/Comm.pyx":1737
 *         Neighbor All-to-All Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1738
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1738, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1739
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1742
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Neighbor_alltoallw(self, sendbuf, recvbuf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_alltoallv(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1739, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1739
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1733
 *             self.ob_mpi) )
 * 
 *     def Neighbor_alltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor All-to-All Vector
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_alltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1744
 *             self.ob_mpi) )
 * 
 *     def Neighbor_alltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor All-to-All Generalized
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_11Neighbor_alltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_10Neighbor_alltoallw[] = "Topocomm.Neighbor_alltoallw(self, sendbuf, recvbuf)\n\n        Neighbor All-to-All Generalized\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_11Neighbor_alltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Neighbor_alltoallw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Neighbor_alltoallw", 1, 2, 2, 1); __PYX_ERR(7, 1744, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Neighbor_alltoallw") < 0)) __PYX_ERR(7, 1744, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Neighbor_alltoallw", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1744, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_10Neighbor_alltoallw(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_10Neighbor_alltoallw(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Neighbor_alltoallw", 0);

  /* "mpi4py/MPI/Comm.pyx":1748
 *         Neighbor All-to-All Generalized
 *         """
 *         cdef _p_msg_ccow m = message_ccow()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallw(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_ccow()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1749
 *         """
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Neighbor_alltoallw(
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_neighbor_alltoallw(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1749, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1750
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1753
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Nonblocking Neighborhood Collectives
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Neighbor_alltoallw(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdisplsA, __pyx_v_m->stypes, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdisplsA, __pyx_v_m->rtypes, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1750, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1750
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         with nogil: CHKERR( MPI_Neighbor_alltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1744
 *             self.ob_mpi) )
 * 
 *     def Neighbor_alltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Neighbor All-to-All Generalized
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Neighbor_alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1758
 *     # ------------------------------------
 * 
 *     def Ineighbor_allgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor Gather to All
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_13Ineighbor_allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_12Ineighbor_allgather[] = "Topocomm.Ineighbor_allgather(self, sendbuf, recvbuf)\n\n        Nonblocking Neighbor Gather to All\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_13Ineighbor_allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ineighbor_allgather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ineighbor_allgather", 1, 2, 2, 1); __PYX_ERR(7, 1758, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ineighbor_allgather") < 0)) __PYX_ERR(7, 1758, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ineighbor_allgather", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1758, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_12Ineighbor_allgather(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_12Ineighbor_allgather(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ineighbor_allgather", 0);

  /* "mpi4py/MPI/Comm.pyx":1762
 *         Nonblocking Neighbor Gather to All
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1763
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_allgather(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1763, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1764
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ineighbor_allgather(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1764, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1765
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_allgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1768
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ineighbor_allgather(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1765, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1765
 *         m.for_neighbor_allgather(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_allgather(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1769
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":1770
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ineighbor_allgatherv(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1758
 *     # ------------------------------------
 * 
 *     def Ineighbor_allgather(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor Gather to All
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1772
 *         return request
 * 
 *     def Ineighbor_allgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor Gather to All Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_15Ineighbor_allgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_14Ineighbor_allgatherv[] = "Topocomm.Ineighbor_allgatherv(self, sendbuf, recvbuf)\n\n        Nonblocking Neighbor Gather to All Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_15Ineighbor_allgatherv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ineighbor_allgatherv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ineighbor_allgatherv", 1, 2, 2, 1); __PYX_ERR(7, 1772, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ineighbor_allgatherv") < 0)) __PYX_ERR(7, 1772, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ineighbor_allgatherv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1772, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_allgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_14Ineighbor_allgatherv(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_14Ineighbor_allgatherv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ineighbor_allgatherv", 0);

  /* "mpi4py/MPI/Comm.pyx":1776
 *         Nonblocking Neighbor Gather to All Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1777
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_allgatherv(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1777, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1778
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ineighbor_allgatherv(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1778, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1779
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_allgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1782
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ineighbor_allgatherv(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1779, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1779
 *         m.for_neighbor_allgather(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_allgatherv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1783
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":1784
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ineighbor_alltoall(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1772
 *         return request
 * 
 *     def Ineighbor_allgatherv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor Gather to All Vector
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_allgatherv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1786
 *         return request
 * 
 *     def Ineighbor_alltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor All-to-All
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_17Ineighbor_alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_16Ineighbor_alltoall[] = "Topocomm.Ineighbor_alltoall(self, sendbuf, recvbuf)\n\n        Nonblocking Neighbor All-to-All\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_17Ineighbor_alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ineighbor_alltoall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ineighbor_alltoall", 1, 2, 2, 1); __PYX_ERR(7, 1786, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ineighbor_alltoall") < 0)) __PYX_ERR(7, 1786, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ineighbor_alltoall", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1786, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_16Ineighbor_alltoall(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_16Ineighbor_alltoall(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ineighbor_alltoall", 0);

  /* "mpi4py/MPI/Comm.pyx":1790
 *         Nonblocking Neighbor All-to-All
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1791
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoall(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(__pyx_v_m, 0, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1791, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1792
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ineighbor_alltoall(
 *             m.sbuf, m.scount, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1792, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1793
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1796
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ineighbor_alltoall(__pyx_v_m->sbuf, __pyx_v_m->scount, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcount, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1793, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1793
 *         m.for_neighbor_alltoall(0, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoall(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scount, m.stype,
 *             m.rbuf, m.rcount, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1797
 *             m.rbuf, m.rcount, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":1798
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ineighbor_alltoallv(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1786
 *         return request
 * 
 *     def Ineighbor_alltoall(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor All-to-All
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1800
 *         return request
 * 
 *     def Ineighbor_alltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor All-to-All Vector
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_19Ineighbor_alltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_18Ineighbor_alltoallv[] = "Topocomm.Ineighbor_alltoallv(self, sendbuf, recvbuf)\n\n        Nonblocking Neighbor All-to-All Vector\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_19Ineighbor_alltoallv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ineighbor_alltoallv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ineighbor_alltoallv", 1, 2, 2, 1); __PYX_ERR(7, 1800, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ineighbor_alltoallv") < 0)) __PYX_ERR(7, 1800, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ineighbor_alltoallv", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1800, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_alltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_18Ineighbor_alltoallv(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_18Ineighbor_alltoallv(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ineighbor_alltoallv", 0);

  /* "mpi4py/MPI/Comm.pyx":1804
 *         Nonblocking Neighbor All-to-All Vector
 *         """
 *         cdef _p_msg_cco m = message_cco()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_cco()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1804, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1805
 *         """
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallv(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall(__pyx_v_m, 1, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1805, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1806
 *         cdef _p_msg_cco m = message_cco()
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallv(
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1806, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1807
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1810
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ineighbor_alltoallv(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdispls, __pyx_v_m->stype, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdispls, __pyx_v_m->rtype, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1807, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1807
 *         m.for_neighbor_alltoall(1, sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallv(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdispls, m.stype,
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1811
 *             m.rbuf, m.rcounts, m.rdispls, m.rtype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":1812
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Ineighbor_alltoallw(self, sendbuf, recvbuf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1800
 *         return request
 * 
 *     def Ineighbor_alltoallv(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor All-to-All Vector
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_alltoallv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1814
 *         return request
 * 
 *     def Ineighbor_alltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor All-to-All Generalized
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_21Ineighbor_alltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_20Ineighbor_alltoallw[] = "Topocomm.Ineighbor_alltoallw(self, sendbuf, recvbuf)\n\n        Nonblocking Neighbor All-to-All Generalized\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_21Ineighbor_alltoallw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendbuf = 0;
  PyObject *__pyx_v_recvbuf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Ineighbor_alltoallw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendbuf,&__pyx_n_s_recvbuf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendbuf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_recvbuf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Ineighbor_alltoallw", 1, 2, 2, 1); __PYX_ERR(7, 1814, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Ineighbor_alltoallw") < 0)) __PYX_ERR(7, 1814, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_sendbuf = values[0];
    __pyx_v_recvbuf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Ineighbor_alltoallw", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1814, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_20Ineighbor_alltoallw(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendbuf, __pyx_v_recvbuf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_20Ineighbor_alltoallw(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendbuf, PyObject *__pyx_v_recvbuf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Ineighbor_alltoallw", 0);

  /* "mpi4py/MPI/Comm.pyx":1818
 *         Nonblocking Neighbor All-to-All Generalized
 *         """
 *         cdef _p_msg_ccow m = message_ccow()             # <<<<<<<<<<<<<<
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_ccow()); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1818, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1819
 *         """
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallw(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_neighbor_alltoallw(__pyx_v_m, __pyx_v_sendbuf, __pyx_v_recvbuf, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1819, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1820
 *         cdef _p_msg_ccow m = message_ccow()
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallw(
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1820, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1821
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":1824
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Ineighbor_alltoallw(__pyx_v_m->sbuf, __pyx_v_m->scounts, __pyx_v_m->sdisplsA, __pyx_v_m->stypes, __pyx_v_m->rbuf, __pyx_v_m->rcounts, __pyx_v_m->rdisplsA, __pyx_v_m->rtypes, __pyx_v_self->__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1821, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":1821
 *         m.for_neighbor_alltoallw(sendbuf, recvbuf, self.ob_mpi)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Ineighbor_alltoallw(             # <<<<<<<<<<<<<<
 *             m.sbuf, m.scounts, m.sdisplsA, m.stypes,
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1825
 *             m.rbuf, m.rcounts, m.rdisplsA, m.rtypes,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/Comm.pyx":1826
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Python Communication
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1814
 *         return request
 * 
 *     def Ineighbor_alltoallw(self, sendbuf, recvbuf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Neighbor All-to-All Generalized
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.Ineighbor_alltoallw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1830
 *     # Python Communication
 *     #
 *     def neighbor_allgather(self, sendobj):             # <<<<<<<<<<<<<<
 *         """Neighbor Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_23neighbor_allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_22neighbor_allgather[] = "Topocomm.neighbor_allgather(self, sendobj)\nNeighbor Gather to All";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_23neighbor_allgather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("neighbor_allgather (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "neighbor_allgather") < 0)) __PYX_ERR(7, 1830, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_sendobj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("neighbor_allgather", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1830, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_22neighbor_allgather(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendobj);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_22neighbor_allgather(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendobj) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("neighbor_allgather", 0);

  /* "mpi4py/MPI/Comm.pyx":1832
 *     def neighbor_allgather(self, sendobj):
 *         """Neighbor Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_neighbor_allgather(sendobj, comm)
 *     #
 */
  __pyx_t_1 = __pyx_v_self->__pyx_base.__pyx_base.ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1833
 *         """Neighbor Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_neighbor_allgather(sendobj, comm)             # <<<<<<<<<<<<<<
 *     #
 *     def neighbor_alltoall(self, sendobj):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_neighbor_allgather(__pyx_v_sendobj, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1830
 *     # Python Communication
 *     #
 *     def neighbor_allgather(self, sendobj):             # <<<<<<<<<<<<<<
 *         """Neighbor Gather to All"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.neighbor_allgather", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1835
 *         return PyMPI_neighbor_allgather(sendobj, comm)
 *     #
 *     def neighbor_alltoall(self, sendobj):             # <<<<<<<<<<<<<<
 *         """Neighbor All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_25neighbor_alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Topocomm_24neighbor_alltoall[] = "Topocomm.neighbor_alltoall(self, sendobj)\nNeighbor All to All Scatter/Gather";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Topocomm_25neighbor_alltoall(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sendobj = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("neighbor_alltoall (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sendobj,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sendobj)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "neighbor_alltoall") < 0)) __PYX_ERR(7, 1835, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_sendobj = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("neighbor_alltoall", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1835, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Topocomm_24neighbor_alltoall(((struct PyMPITopocommObject *)__pyx_v_self), __pyx_v_sendobj);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Topocomm_24neighbor_alltoall(struct PyMPITopocommObject *__pyx_v_self, PyObject *__pyx_v_sendobj) {
  MPI_Comm __pyx_v_comm;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  MPI_Comm __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("neighbor_alltoall", 0);

  /* "mpi4py/MPI/Comm.pyx":1837
 *     def neighbor_alltoall(self, sendobj):
 *         """Neighbor All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi             # <<<<<<<<<<<<<<
 *         return PyMPI_neighbor_alltoall(sendobj, comm)
 * 
 */
  __pyx_t_1 = __pyx_v_self->__pyx_base.__pyx_base.ob_mpi;
  __pyx_v_comm = __pyx_t_1;

  /* "mpi4py/MPI/Comm.pyx":1838
 *         """Neighbor All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 *         return PyMPI_neighbor_alltoall(sendobj, comm)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_PyMPI_neighbor_alltoall(__pyx_v_sendobj, __pyx_v_comm); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1838, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1835
 *         return PyMPI_neighbor_allgather(sendobj, comm)
 *     #
 *     def neighbor_alltoall(self, sendobj):             # <<<<<<<<<<<<<<
 *         """Neighbor All to All Scatter/Gather"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Topocomm.neighbor_alltoall", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1847
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_8Cartcomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_8Cartcomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 1847, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1847, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 1847, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm___cinit__(((struct PyMPICartcommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_8Cartcomm___cinit__(struct PyMPICartcommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_topo;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":1848
 * 
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return             # <<<<<<<<<<<<<<
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1849
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_CART: raise TypeError(
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1850
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )             # <<<<<<<<<<<<<<
 *         if topo != MPI_CART: raise TypeError(
 *             "expecting a Cartesian communicator")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_topo))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1850, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1851
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_CART: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a Cartesian communicator")
 * 
 */
  __pyx_t_1 = ((__pyx_v_topo != MPI_CART) != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__98, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1851, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(7, 1851, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Comm.pyx":1847
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1857
 *     # ---------------------------
 * 
 *     def Get_dim(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return number of dimensions
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_3Get_dim(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Cartcomm_2Get_dim[] = "Cartcomm.Get_dim(self)\n\n        Return number of dimensions\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_3Get_dim(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_dim (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_dim", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_dim", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_2Get_dim(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_2Get_dim(struct PyMPICartcommObject *__pyx_v_self) {
  int __pyx_v_dim;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_dim", 0);

  /* "mpi4py/MPI/Comm.pyx":1861
 *         Return number of dimensions
 *         """
 *         cdef int dim = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &dim) )
 *         return dim
 */
  __pyx_v_dim = 0;

  /* "mpi4py/MPI/Comm.pyx":1862
 *         """
 *         cdef int dim = 0
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &dim) )             # <<<<<<<<<<<<<<
 *         return dim
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cartdim_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1862, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1863
 *         cdef int dim = 0
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &dim) )
 *         return dim             # <<<<<<<<<<<<<<
 * 
 *     property dim:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1857
 *     # ---------------------------
 * 
 *     def Get_dim(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return number of dimensions
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Get_dim", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1867
 *     property dim:
 *         """number of dimensions"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dim()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_3dim_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_3dim_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_3dim___get__(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_3dim___get__(struct PyMPICartcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1868
 *         """number of dimensions"""
 *         def __get__(self):
 *             return self.Get_dim()             # <<<<<<<<<<<<<<
 * 
 *     property ndim:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1867
 *     property dim:
 *         """number of dimensions"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dim()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.dim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1872
 *     property ndim:
 *         """number of dimensions"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dim()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_4ndim_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_4ndim___get__(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4ndim___get__(struct PyMPICartcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1873
 *         """number of dimensions"""
 *         def __get__(self):
 *             return self.Get_dim()             # <<<<<<<<<<<<<<
 * 
 *     def Get_topo(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dim); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1872
 *     property ndim:
 *         """number of dimensions"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dim()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1875
 *             return self.Get_dim()
 * 
 *     def Get_topo(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return information on the cartesian topology
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_5Get_topo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Cartcomm_4Get_topo[] = "Cartcomm.Get_topo(self)\n\n        Return information on the cartesian topology\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_5Get_topo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_topo (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_topo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_topo", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_4Get_topo(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4Get_topo(struct PyMPICartcommObject *__pyx_v_self) {
  int __pyx_v_ndim;
  int *__pyx_v_idims;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  int *__pyx_v_iperiods;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int *__pyx_v_icoords;
  CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
  int __pyx_v_i;
  PyObject *__pyx_v_dims = 0;
  PyObject *__pyx_v_periods = 0;
  PyObject *__pyx_v_coords = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_topo", 0);

  /* "mpi4py/MPI/Comm.pyx":1879
 *         Return information on the cartesian topology
 *         """
 *         cdef int ndim = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         cdef int *idims = NULL
 */
  __pyx_v_ndim = 0;

  /* "mpi4py/MPI/Comm.pyx":1880
 *         """
 *         cdef int ndim = 0
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )             # <<<<<<<<<<<<<<
 *         cdef int *idims = NULL
 *         cdef tmp1 = newarray(ndim, &idims)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cartdim_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_ndim))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1880, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1881
 *         cdef int ndim = 0
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         cdef int *idims = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp1 = newarray(ndim, &idims)
 *         cdef int *iperiods = NULL
 */
  __pyx_v_idims = NULL;

  /* "mpi4py/MPI/Comm.pyx":1882
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         cdef int *idims = NULL
 *         cdef tmp1 = newarray(ndim, &idims)             # <<<<<<<<<<<<<<
 *         cdef int *iperiods = NULL
 *         cdef tmp2 = newarray(ndim, &iperiods)
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_ndim, (&__pyx_v_idims)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1883
 *         cdef int *idims = NULL
 *         cdef tmp1 = newarray(ndim, &idims)
 *         cdef int *iperiods = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp2 = newarray(ndim, &iperiods)
 *         cdef int *icoords = NULL
 */
  __pyx_v_iperiods = NULL;

  /* "mpi4py/MPI/Comm.pyx":1884
 *         cdef tmp1 = newarray(ndim, &idims)
 *         cdef int *iperiods = NULL
 *         cdef tmp2 = newarray(ndim, &iperiods)             # <<<<<<<<<<<<<<
 *         cdef int *icoords = NULL
 *         cdef tmp3 = newarray(ndim, &icoords)
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_ndim, (&__pyx_v_iperiods)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1885
 *         cdef int *iperiods = NULL
 *         cdef tmp2 = newarray(ndim, &iperiods)
 *         cdef int *icoords = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp3 = newarray(ndim, &icoords)
 *         CHKERR( MPI_Cart_get(self.ob_mpi, ndim, idims, iperiods, icoords) )
 */
  __pyx_v_icoords = NULL;

  /* "mpi4py/MPI/Comm.pyx":1886
 *         cdef tmp2 = newarray(ndim, &iperiods)
 *         cdef int *icoords = NULL
 *         cdef tmp3 = newarray(ndim, &icoords)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cart_get(self.ob_mpi, ndim, idims, iperiods, icoords) )
 *         cdef int i = 0
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_ndim, (&__pyx_v_icoords)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1886, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp3 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1887
 *         cdef int *icoords = NULL
 *         cdef tmp3 = newarray(ndim, &icoords)
 *         CHKERR( MPI_Cart_get(self.ob_mpi, ndim, idims, iperiods, icoords) )             # <<<<<<<<<<<<<<
 *         cdef int i = 0
 *         cdef object dims    = [idims[i]    for i from 0 <= i < ndim]
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_ndim, __pyx_v_idims, __pyx_v_iperiods, __pyx_v_icoords)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1887, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1888
 *         cdef tmp3 = newarray(ndim, &icoords)
 *         CHKERR( MPI_Cart_get(self.ob_mpi, ndim, idims, iperiods, icoords) )
 *         cdef int i = 0             # <<<<<<<<<<<<<<
 *         cdef object dims    = [idims[i]    for i from 0 <= i < ndim]
 *         cdef object periods = [iperiods[i] for i from 0 <= i < ndim]
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Comm.pyx":1889
 *         CHKERR( MPI_Cart_get(self.ob_mpi, ndim, idims, iperiods, icoords) )
 *         cdef int i = 0
 *         cdef object dims    = [idims[i]    for i from 0 <= i < ndim]             # <<<<<<<<<<<<<<
 *         cdef object periods = [iperiods[i] for i from 0 <= i < ndim]
 *         cdef object coords  = [icoords[i]  for i from 0 <= i < ndim]
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_ndim;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_idims[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1889, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_dims = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1890
 *         cdef int i = 0
 *         cdef object dims    = [idims[i]    for i from 0 <= i < ndim]
 *         cdef object periods = [iperiods[i] for i from 0 <= i < ndim]             # <<<<<<<<<<<<<<
 *         cdef object coords  = [icoords[i]  for i from 0 <= i < ndim]
 *         return (dims, periods, coords)
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_ndim;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_iperiods[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1890, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_periods = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1891
 *         cdef object dims    = [idims[i]    for i from 0 <= i < ndim]
 *         cdef object periods = [iperiods[i] for i from 0 <= i < ndim]
 *         cdef object coords  = [icoords[i]  for i from 0 <= i < ndim]             # <<<<<<<<<<<<<<
 *         return (dims, periods, coords)
 * 
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_ndim;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_icoords[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1891, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1891, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_coords = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1892
 *         cdef object periods = [iperiods[i] for i from 0 <= i < ndim]
 *         cdef object coords  = [icoords[i]  for i from 0 <= i < ndim]
 *         return (dims, periods, coords)             # <<<<<<<<<<<<<<
 * 
 *     property topo:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_dims);
  __Pyx_GIVEREF(__pyx_v_dims);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_dims);
  __Pyx_INCREF(__pyx_v_periods);
  __Pyx_GIVEREF(__pyx_v_periods);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_periods);
  __Pyx_INCREF(__pyx_v_coords);
  __Pyx_GIVEREF(__pyx_v_coords);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_coords);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1875
 *             return self.Get_dim()
 * 
 *     def Get_topo(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return information on the cartesian topology
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Get_topo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_tmp3);
  __Pyx_XDECREF(__pyx_v_dims);
  __Pyx_XDECREF(__pyx_v_periods);
  __Pyx_XDECREF(__pyx_v_coords);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1896
 *     property topo:
 *         """topology information"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_4topo_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_4topo_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_4topo___get__(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4topo___get__(struct PyMPICartcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1897
 *         """topology information"""
 *         def __get__(self):
 *             return self.Get_topo()             # <<<<<<<<<<<<<<
 * 
 *     property dims:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1897, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1896
 *     property topo:
 *         """topology information"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.topo.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1901
 *     property dims:
 *         """dimensions"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[0]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_4dims_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_4dims___get__(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_4dims___get__(struct PyMPICartcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1902
 *         """dimensions"""
 *         def __get__(self):
 *             return self.Get_topo()[0]             # <<<<<<<<<<<<<<
 * 
 *     property periods:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1901
 *     property dims:
 *         """dimensions"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[0]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.dims.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1906
 *     property periods:
 *         """periodicity"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[1]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_7periods_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_7periods_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_7periods___get__(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_7periods___get__(struct PyMPICartcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1907
 *         """periodicity"""
 *         def __get__(self):
 *             return self.Get_topo()[1]             # <<<<<<<<<<<<<<
 * 
 *     property coords:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1906
 *     property periods:
 *         """periodicity"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[1]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.periods.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1911
 *     property coords:
 *         """coordinates"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[2]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_6coords_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_6coords_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_6coords___get__(((struct PyMPICartcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_6coords___get__(struct PyMPICartcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":1912
 *         """coordinates"""
 *         def __get__(self):
 *             return self.Get_topo()[2]             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1911
 *     property coords:
 *         """coordinates"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[2]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.coords.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1918
 *     # ------------------------------
 * 
 *     def Get_cart_rank(self, coords):             # <<<<<<<<<<<<<<
 *         """
 *         Translate logical coordinates to ranks
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_7Get_cart_rank(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Cartcomm_6Get_cart_rank[] = "Cartcomm.Get_cart_rank(self, coords)\n\n        Translate logical coordinates to ranks\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_7Get_cart_rank(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_coords = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_cart_rank (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_coords,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_coords)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_cart_rank") < 0)) __PYX_ERR(7, 1918, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_coords = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_cart_rank", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1918, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Get_cart_rank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_6Get_cart_rank(((struct PyMPICartcommObject *)__pyx_v_self), __pyx_v_coords);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_6Get_cart_rank(struct PyMPICartcommObject *__pyx_v_self, PyObject *__pyx_v_coords) {
  int __pyx_v_ndim;
  int *__pyx_v_icoords;
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_cart_rank", 0);
  __Pyx_INCREF(__pyx_v_coords);

  /* "mpi4py/MPI/Comm.pyx":1922
 *         Translate logical coordinates to ranks
 *         """
 *         cdef int ndim = 0, *icoords = NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get( self.ob_mpi, &ndim) )
 *         coords = chkarray(coords, ndim, &icoords)
 */
  __pyx_v_ndim = 0;
  __pyx_v_icoords = NULL;

  /* "mpi4py/MPI/Comm.pyx":1923
 *         """
 *         cdef int ndim = 0, *icoords = NULL
 *         CHKERR( MPI_Cartdim_get( self.ob_mpi, &ndim) )             # <<<<<<<<<<<<<<
 *         coords = chkarray(coords, ndim, &icoords)
 *         cdef int rank = MPI_PROC_NULL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cartdim_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_ndim))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1923, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1924
 *         cdef int ndim = 0, *icoords = NULL
 *         CHKERR( MPI_Cartdim_get( self.ob_mpi, &ndim) )
 *         coords = chkarray(coords, ndim, &icoords)             # <<<<<<<<<<<<<<
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_rank(self.ob_mpi, icoords, &rank) )
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_coords, __pyx_v_ndim, (&__pyx_v_icoords)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_coords, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1925
 *         CHKERR( MPI_Cartdim_get( self.ob_mpi, &ndim) )
 *         coords = chkarray(coords, ndim, &icoords)
 *         cdef int rank = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cart_rank(self.ob_mpi, icoords, &rank) )
 *         return rank
 */
  __pyx_v_rank = MPI_PROC_NULL;

  /* "mpi4py/MPI/Comm.pyx":1926
 *         coords = chkarray(coords, ndim, &icoords)
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_rank(self.ob_mpi, icoords, &rank) )             # <<<<<<<<<<<<<<
 *         return rank
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_rank(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_icoords, (&__pyx_v_rank))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1926, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1927
 *         cdef int rank = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_rank(self.ob_mpi, icoords, &rank) )
 *         return rank             # <<<<<<<<<<<<<<
 * 
 *     def Get_coords(self, int rank):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1918
 *     # ------------------------------
 * 
 *     def Get_cart_rank(self, coords):             # <<<<<<<<<<<<<<
 *         """
 *         Translate logical coordinates to ranks
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Get_cart_rank", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_coords);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1929
 *         return rank
 * 
 *     def Get_coords(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Translate ranks to logical coordinates
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_9Get_coords(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Cartcomm_8Get_coords[] = "Cartcomm.Get_coords(self, int rank)\n\n        Translate ranks to logical coordinates\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_9Get_coords(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_coords (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_coords") < 0)) __PYX_ERR(7, 1929, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1929, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_coords", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1929, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Get_coords", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_8Get_coords(((struct PyMPICartcommObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_8Get_coords(struct PyMPICartcommObject *__pyx_v_self, int __pyx_v_rank) {
  int __pyx_v_i;
  int __pyx_v_ndim;
  int *__pyx_v_icoords;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_v_coords = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_coords", 0);

  /* "mpi4py/MPI/Comm.pyx":1933
 *         Translate ranks to logical coordinates
 *         """
 *         cdef int i = 0, ndim = 0, *icoords = NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         cdef tmp = newarray(ndim, &icoords)
 */
  __pyx_v_i = 0;
  __pyx_v_ndim = 0;
  __pyx_v_icoords = NULL;

  /* "mpi4py/MPI/Comm.pyx":1934
 *         """
 *         cdef int i = 0, ndim = 0, *icoords = NULL
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )             # <<<<<<<<<<<<<<
 *         cdef tmp = newarray(ndim, &icoords)
 *         CHKERR( MPI_Cart_coords(self.ob_mpi, rank, ndim, icoords) )
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cartdim_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_ndim))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1934, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1935
 *         cdef int i = 0, ndim = 0, *icoords = NULL
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         cdef tmp = newarray(ndim, &icoords)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cart_coords(self.ob_mpi, rank, ndim, icoords) )
 *         cdef object coords = [icoords[i] for i from 0 <= i < ndim]
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_ndim, (&__pyx_v_icoords)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1936
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         cdef tmp = newarray(ndim, &icoords)
 *         CHKERR( MPI_Cart_coords(self.ob_mpi, rank, ndim, icoords) )             # <<<<<<<<<<<<<<
 *         cdef object coords = [icoords[i] for i from 0 <= i < ndim]
 *         return coords
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_coords(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_rank, __pyx_v_ndim, __pyx_v_icoords)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1936, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1937
 *         cdef tmp = newarray(ndim, &icoords)
 *         CHKERR( MPI_Cart_coords(self.ob_mpi, rank, ndim, icoords) )
 *         cdef object coords = [icoords[i] for i from 0 <= i < ndim]             # <<<<<<<<<<<<<<
 *         return coords
 * 
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_ndim;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_icoords[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1937, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 1937, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_coords = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1938
 *         CHKERR( MPI_Cart_coords(self.ob_mpi, rank, ndim, icoords) )
 *         cdef object coords = [icoords[i] for i from 0 <= i < ndim]
 *         return coords             # <<<<<<<<<<<<<<
 * 
 *     # Cartesian Shift Function
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_coords);
  __pyx_r = __pyx_v_coords;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1929
 *         return rank
 * 
 *     def Get_coords(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Translate ranks to logical coordinates
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Get_coords", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XDECREF(__pyx_v_coords);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1943
 *     # ------------------------
 * 
 *     def Shift(self, int direction, int disp):             # <<<<<<<<<<<<<<
 *         """
 *         Return a tuple (source,dest) of process ranks
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_11Shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Cartcomm_10Shift[] = "Cartcomm.Shift(self, int direction, int disp)\n\n        Return a tuple (source,dest) of process ranks\n        for data shifting with Comm.Sendrecv()\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_11Shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_direction;
  int __pyx_v_disp;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Shift (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_direction,&__pyx_n_s_disp,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_direction)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_disp)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Shift", 1, 2, 2, 1); __PYX_ERR(7, 1943, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Shift") < 0)) __PYX_ERR(7, 1943, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_direction = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_direction == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1943, __pyx_L3_error)
    __pyx_v_disp = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_disp == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1943, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Shift", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1943, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_10Shift(((struct PyMPICartcommObject *)__pyx_v_self), __pyx_v_direction, __pyx_v_disp);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_10Shift(struct PyMPICartcommObject *__pyx_v_self, int __pyx_v_direction, int __pyx_v_disp) {
  int __pyx_v_source;
  int __pyx_v_dest;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Shift", 0);

  /* "mpi4py/MPI/Comm.pyx":1948
 *         for data shifting with Comm.Sendrecv()
 *         """
 *         cdef int source = MPI_PROC_NULL, dest = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cart_shift(self.ob_mpi, direction, disp, &source, &dest) )
 *         return (source, dest)
 */
  __pyx_v_source = MPI_PROC_NULL;
  __pyx_v_dest = MPI_PROC_NULL;

  /* "mpi4py/MPI/Comm.pyx":1949
 *         """
 *         cdef int source = MPI_PROC_NULL, dest = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_shift(self.ob_mpi, direction, disp, &source, &dest) )             # <<<<<<<<<<<<<<
 *         return (source, dest)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_shift(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_direction, __pyx_v_disp, (&__pyx_v_source), (&__pyx_v_dest))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1949, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1950
 *         cdef int source = MPI_PROC_NULL, dest = MPI_PROC_NULL
 *         CHKERR( MPI_Cart_shift(self.ob_mpi, direction, disp, &source, &dest) )
 *         return (source, dest)             # <<<<<<<<<<<<<<
 * 
 *     # Cartesian Partition Function
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_source); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dest); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1943
 *     # ------------------------
 * 
 *     def Shift(self, int direction, int disp):             # <<<<<<<<<<<<<<
 *         """
 *         Return a tuple (source,dest) of process ranks
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1955
 *     # ----------------------------
 * 
 *     def Sub(self, remain_dims):             # <<<<<<<<<<<<<<
 *         """
 *         Return cartesian communicators
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_13Sub(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_8Cartcomm_12Sub[] = "Cartcomm.Sub(self, remain_dims)\n\n        Return cartesian communicators\n        that form lower-dimensional subgrids\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_8Cartcomm_13Sub(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_remain_dims = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sub (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_remain_dims,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_remain_dims)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Sub") < 0)) __PYX_ERR(7, 1955, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_remain_dims = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Sub", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1955, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Sub", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_8Cartcomm_12Sub(((struct PyMPICartcommObject *)__pyx_v_self), __pyx_v_remain_dims);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_8Cartcomm_12Sub(struct PyMPICartcommObject *__pyx_v_self, PyObject *__pyx_v_remain_dims) {
  int __pyx_v_ndim;
  int *__pyx_v_iremdims;
  struct PyMPICartcommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Sub", 0);
  __Pyx_INCREF(__pyx_v_remain_dims);

  /* "mpi4py/MPI/Comm.pyx":1960
 *         that form lower-dimensional subgrids
 *         """
 *         cdef int ndim = 0, *iremdims = NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         remain_dims = chkarray(remain_dims, ndim, &iremdims)
 */
  __pyx_v_ndim = 0;
  __pyx_v_iremdims = NULL;

  /* "mpi4py/MPI/Comm.pyx":1961
 *         """
 *         cdef int ndim = 0, *iremdims = NULL
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )             # <<<<<<<<<<<<<<
 *         remain_dims = chkarray(remain_dims, ndim, &iremdims)
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cartdim_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_ndim))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1961, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1962
 *         cdef int ndim = 0, *iremdims = NULL
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         remain_dims = chkarray(remain_dims, ndim, &iremdims)             # <<<<<<<<<<<<<<
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 *         with nogil: CHKERR( MPI_Cart_sub(self.ob_mpi, iremdims, &comm.ob_mpi) )
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_remain_dims, __pyx_v_ndim, (&__pyx_v_iremdims)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_remain_dims, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":1963
 *         CHKERR( MPI_Cartdim_get(self.ob_mpi, &ndim) )
 *         remain_dims = chkarray(remain_dims, ndim, &iremdims)
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Cart_sub(self.ob_mpi, iremdims, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Cartcomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Cartcomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1963, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_3 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_comm = ((struct PyMPICartcommObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":1964
 *         remain_dims = chkarray(remain_dims, ndim, &iremdims)
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 *         with nogil: CHKERR( MPI_Cart_sub(self.ob_mpi, iremdims, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Cart_sub(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_iremdims, (&__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1964, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":1965
 *         cdef Cartcomm comm = <Cartcomm>Cartcomm.__new__(Cartcomm)
 *         with nogil: CHKERR( MPI_Cart_sub(self.ob_mpi, iremdims, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.__pyx_base.__pyx_base.ob_mpi); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 1965, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1966
 *         with nogil: CHKERR( MPI_Cart_sub(self.ob_mpi, iremdims, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1955
 *     # ----------------------------
 * 
 *     def Sub(self, remain_dims):             # <<<<<<<<<<<<<<
 *         """
 *         Return cartesian communicators
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Cartcomm.Sub", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XDECREF(__pyx_v_remain_dims);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1971
 * # Cartesian Convenience Function
 * 
 * def Compute_dims(int nnodes, dims):             # <<<<<<<<<<<<<<
 *     """
 *     Return a balanced distribution of
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_23Compute_dims(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_22Compute_dims[] = "Compute_dims(int nnodes, dims)\n\n    Return a balanced distribution of\n    processes per coordinate direction\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_23Compute_dims = {"Compute_dims", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_23Compute_dims, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_22Compute_dims};
static PyObject *__pyx_pw_6mpi4py_3MPI_23Compute_dims(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nnodes;
  PyObject *__pyx_v_dims = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Compute_dims (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nnodes,&__pyx_n_s_dims,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nnodes)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dims)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Compute_dims", 1, 2, 2, 1); __PYX_ERR(7, 1971, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Compute_dims") < 0)) __PYX_ERR(7, 1971, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_nnodes = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nnodes == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1971, __pyx_L3_error)
    __pyx_v_dims = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Compute_dims", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1971, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Compute_dims", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_22Compute_dims(__pyx_self, __pyx_v_nnodes, __pyx_v_dims);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_22Compute_dims(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nnodes, PyObject *__pyx_v_dims) {
  int __pyx_v_i;
  int __pyx_v_ndims;
  int *__pyx_v_idims;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("Compute_dims", 0);
  __Pyx_INCREF(__pyx_v_dims);

  /* "mpi4py/MPI/Comm.pyx":1976
 *     processes per coordinate direction
 *     """
 *     cdef int i = 0, ndims = 0, *idims = NULL             # <<<<<<<<<<<<<<
 *     try:
 *         ndims = <int>len(dims)
 */
  __pyx_v_i = 0;
  __pyx_v_ndims = 0;
  __pyx_v_idims = NULL;

  /* "mpi4py/MPI/Comm.pyx":1977
 *     """
 *     cdef int i = 0, ndims = 0, *idims = NULL
 *     try:             # <<<<<<<<<<<<<<
 *         ndims = <int>len(dims)
 *     except:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "mpi4py/MPI/Comm.pyx":1978
 *     cdef int i = 0, ndims = 0, *idims = NULL
 *     try:
 *         ndims = <int>len(dims)             # <<<<<<<<<<<<<<
 *     except:
 *         ndims = dims
 */
      __pyx_t_4 = PyObject_Length(__pyx_v_dims); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(7, 1978, __pyx_L3_error)
      __pyx_v_ndims = ((int)__pyx_t_4);

      /* "mpi4py/MPI/Comm.pyx":1977
 *     """
 *     cdef int i = 0, ndims = 0, *idims = NULL
 *     try:             # <<<<<<<<<<<<<<
 *         ndims = <int>len(dims)
 *     except:
 */
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "mpi4py/MPI/Comm.pyx":1979
 *     try:
 *         ndims = <int>len(dims)
 *     except:             # <<<<<<<<<<<<<<
 *         ndims = dims
 *         dims = [0] * ndims
 */
    /*except:*/ {
      __Pyx_AddTraceback("mpi4py.MPI.Compute_dims", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(7, 1979, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);

      /* "mpi4py/MPI/Comm.pyx":1980
 *         ndims = <int>len(dims)
 *     except:
 *         ndims = dims             # <<<<<<<<<<<<<<
 *         dims = [0] * ndims
 *     cdef tmp = chkarray(dims, ndims, &idims)
 */
      __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_dims); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1980, __pyx_L5_except_error)
      __pyx_v_ndims = __pyx_t_8;

      /* "mpi4py/MPI/Comm.pyx":1981
 *     except:
 *         ndims = dims
 *         dims = [0] * ndims             # <<<<<<<<<<<<<<
 *     cdef tmp = chkarray(dims, ndims, &idims)
 *     CHKERR( MPI_Dims_create(nnodes, ndims, idims) )
 */
      __pyx_t_9 = PyList_New(1 * ((__pyx_v_ndims<0) ? 0:__pyx_v_ndims)); if (unlikely(!__pyx_t_9)) __PYX_ERR(7, 1981, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      { Py_ssize_t __pyx_temp;
        for (__pyx_temp=0; __pyx_temp < __pyx_v_ndims; __pyx_temp++) {
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyList_SET_ITEM(__pyx_t_9, __pyx_temp, __pyx_int_0);
        }
      }
      __Pyx_DECREF_SET(__pyx_v_dims, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L4_exception_handled;
    }
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/Comm.pyx":1977
 *     """
 *     cdef int i = 0, ndims = 0, *idims = NULL
 *     try:             # <<<<<<<<<<<<<<
 *         ndims = <int>len(dims)
 *     except:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/Comm.pyx":1982
 *         ndims = dims
 *         dims = [0] * ndims
 *     cdef tmp = chkarray(dims, ndims, &idims)             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Dims_create(nnodes, ndims, idims) )
 *     dims = [idims[i] for i from 0 <= i < ndims]
 */
  __pyx_t_7 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_chkarray(__pyx_v_dims, __pyx_v_ndims, (&__pyx_v_idims)); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 1982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_v_tmp = __pyx_t_7;
  __pyx_t_7 = 0;

  /* "mpi4py/MPI/Comm.pyx":1983
 *         dims = [0] * ndims
 *     cdef tmp = chkarray(dims, ndims, &idims)
 *     CHKERR( MPI_Dims_create(nnodes, ndims, idims) )             # <<<<<<<<<<<<<<
 *     dims = [idims[i] for i from 0 <= i < ndims]
 *     return dims
 */
  __pyx_t_8 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dims_create(__pyx_v_nnodes, __pyx_v_ndims, __pyx_v_idims)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(7, 1983, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1984
 *     cdef tmp = chkarray(dims, ndims, &idims)
 *     CHKERR( MPI_Dims_create(nnodes, ndims, idims) )
 *     dims = [idims[i] for i from 0 <= i < ndims]             # <<<<<<<<<<<<<<
 *     return dims
 * 
 */
  __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 1984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __pyx_v_ndims;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_8; __pyx_v_i++) {
    __pyx_t_6 = __Pyx_PyInt_From_int((__pyx_v_idims[__pyx_v_i])); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 1984, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_6))) __PYX_ERR(7, 1984, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF_SET(__pyx_v_dims, __pyx_t_7);
  __pyx_t_7 = 0;

  /* "mpi4py/MPI/Comm.pyx":1985
 *     CHKERR( MPI_Dims_create(nnodes, ndims, idims) )
 *     dims = [idims[i] for i from 0 <= i < ndims]
 *     return dims             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_dims);
  __pyx_r = __pyx_v_dims;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":1971
 * # Cartesian Convenience Function
 * 
 * def Compute_dims(int nnodes, dims):             # <<<<<<<<<<<<<<
 *     """
 *     Return a balanced distribution of
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("mpi4py.MPI.Compute_dims", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XDECREF(__pyx_v_dims);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":1994
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9Graphcomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9Graphcomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 1994, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 1994, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 1994, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm___cinit__(((struct PyMPIGraphcommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9Graphcomm___cinit__(struct PyMPIGraphcommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_topo;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":1995
 * 
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return             # <<<<<<<<<<<<<<
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":1996
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_GRAPH: raise TypeError(
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":1997
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )             # <<<<<<<<<<<<<<
 *         if topo != MPI_GRAPH: raise TypeError(
 *             "expecting a general graph communicator")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_topo))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 1997, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1998
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_GRAPH: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a general graph communicator")
 * 
 */
  __pyx_t_1 = ((__pyx_v_topo != MPI_GRAPH) != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__99, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(7, 1998, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Comm.pyx":1994
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2004
 *     # -----------------------
 * 
 *     def Get_dims(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of nodes and edges
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_3Get_dims(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Graphcomm_2Get_dims[] = "Graphcomm.Get_dims(self)\n\n        Return the number of nodes and edges\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_3Get_dims(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_dims (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_dims", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_dims", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_2Get_dims(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_2Get_dims(struct PyMPIGraphcommObject *__pyx_v_self) {
  int __pyx_v_nnodes;
  int __pyx_v_nedges;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Get_dims", 0);

  /* "mpi4py/MPI/Comm.pyx":2008
 *         Return the number of nodes and edges
 *         """
 *         cdef int nnodes = 0, nedges = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graphdims_get(self.ob_mpi, &nnodes, &nedges) )
 *         return (nnodes, nedges)
 */
  __pyx_v_nnodes = 0;
  __pyx_v_nedges = 0;

  /* "mpi4py/MPI/Comm.pyx":2009
 *         """
 *         cdef int nnodes = 0, nedges = 0
 *         CHKERR( MPI_Graphdims_get(self.ob_mpi, &nnodes, &nedges) )             # <<<<<<<<<<<<<<
 *         return (nnodes, nedges)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graphdims_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_nnodes), (&__pyx_v_nedges))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2009, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2010
 *         cdef int nnodes = 0, nedges = 0
 *         CHKERR( MPI_Graphdims_get(self.ob_mpi, &nnodes, &nedges) )
 *         return (nnodes, nedges)             # <<<<<<<<<<<<<<
 * 
 *     property dims:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nnodes); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nedges); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2004
 *     # -----------------------
 * 
 *     def Get_dims(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the number of nodes and edges
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.Get_dims", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2014
 *     property dims:
 *         """number of nodes and edges"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dims()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_4dims_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_4dims_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_4dims___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_4dims___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2015
 *         """number of nodes and edges"""
 *         def __get__(self):
 *             return self.Get_dims()             # <<<<<<<<<<<<<<
 * 
 *     property nnodes:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dims); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2014
 *     property dims:
 *         """number of nodes and edges"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dims()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.dims.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2019
 *     property nnodes:
 *         """number of nodes"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dims()[0]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_6nnodes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_6nnodes_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_6nnodes___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_6nnodes___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2020
 *         """number of nodes"""
 *         def __get__(self):
 *             return self.Get_dims()[0]             # <<<<<<<<<<<<<<
 * 
 *     property nedges:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dims); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2020, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2019
 *     property nnodes:
 *         """number of nodes"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dims()[0]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.nnodes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2024
 *     property nedges:
 *         """number of edges"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dims()[1]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_6nedges_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_6nedges_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_6nedges___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_6nedges___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2025
 *         """number of edges"""
 *         def __get__(self):
 *             return self.Get_dims()[1]             # <<<<<<<<<<<<<<
 * 
 *     def Get_topo(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_dims); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2024
 *     property nedges:
 *         """number of edges"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_dims()[1]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.nedges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2027
 *             return self.Get_dims()[1]
 * 
 *     def Get_topo(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return index and edges
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_5Get_topo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Graphcomm_4Get_topo[] = "Graphcomm.Get_topo(self)\n\n        Return index and edges\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_5Get_topo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_topo (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_topo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_topo", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_4Get_topo(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_4Get_topo(struct PyMPIGraphcommObject *__pyx_v_self) {
  int __pyx_v_nindex;
  int __pyx_v_nedges;
  int *__pyx_v_iindex;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  int *__pyx_v_iedges;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  int __pyx_v_i;
  PyObject *__pyx_v_index = 0;
  PyObject *__pyx_v_edges = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_topo", 0);

  /* "mpi4py/MPI/Comm.pyx":2031
 *         Return index and edges
 *         """
 *         cdef int nindex = 0, nedges = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graphdims_get( self.ob_mpi, &nindex, &nedges) )
 *         cdef int *iindex = NULL
 */
  __pyx_v_nindex = 0;
  __pyx_v_nedges = 0;

  /* "mpi4py/MPI/Comm.pyx":2032
 *         """
 *         cdef int nindex = 0, nedges = 0
 *         CHKERR( MPI_Graphdims_get( self.ob_mpi, &nindex, &nedges) )             # <<<<<<<<<<<<<<
 *         cdef int *iindex = NULL
 *         cdef tmp1 = newarray(nindex, &iindex)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graphdims_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_nindex), (&__pyx_v_nedges))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2032, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2033
 *         cdef int nindex = 0, nedges = 0
 *         CHKERR( MPI_Graphdims_get( self.ob_mpi, &nindex, &nedges) )
 *         cdef int *iindex = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp1 = newarray(nindex, &iindex)
 *         cdef int *iedges = NULL
 */
  __pyx_v_iindex = NULL;

  /* "mpi4py/MPI/Comm.pyx":2034
 *         CHKERR( MPI_Graphdims_get( self.ob_mpi, &nindex, &nedges) )
 *         cdef int *iindex = NULL
 *         cdef tmp1 = newarray(nindex, &iindex)             # <<<<<<<<<<<<<<
 *         cdef int *iedges = NULL
 *         cdef tmp2 = newarray(nedges, &iedges)
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_nindex, (&__pyx_v_iindex)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2035
 *         cdef int *iindex = NULL
 *         cdef tmp1 = newarray(nindex, &iindex)
 *         cdef int *iedges = NULL             # <<<<<<<<<<<<<<
 *         cdef tmp2 = newarray(nedges, &iedges)
 *         CHKERR( MPI_Graph_get(self.ob_mpi, nindex, nedges, iindex, iedges) )
 */
  __pyx_v_iedges = NULL;

  /* "mpi4py/MPI/Comm.pyx":2036
 *         cdef tmp1 = newarray(nindex, &iindex)
 *         cdef int *iedges = NULL
 *         cdef tmp2 = newarray(nedges, &iedges)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graph_get(self.ob_mpi, nindex, nedges, iindex, iedges) )
 *         cdef int i = 0
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_nedges, (&__pyx_v_iedges)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2037
 *         cdef int *iedges = NULL
 *         cdef tmp2 = newarray(nedges, &iedges)
 *         CHKERR( MPI_Graph_get(self.ob_mpi, nindex, nedges, iindex, iedges) )             # <<<<<<<<<<<<<<
 *         cdef int i = 0
 *         cdef object index = [iindex[i] for i from 0 <= i < nindex]
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_get(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_nindex, __pyx_v_nedges, __pyx_v_iindex, __pyx_v_iedges)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2037, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2038
 *         cdef tmp2 = newarray(nedges, &iedges)
 *         CHKERR( MPI_Graph_get(self.ob_mpi, nindex, nedges, iindex, iedges) )
 *         cdef int i = 0             # <<<<<<<<<<<<<<
 *         cdef object index = [iindex[i] for i from 0 <= i < nindex]
 *         cdef object edges = [iedges[i] for i from 0 <= i < nedges]
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Comm.pyx":2039
 *         CHKERR( MPI_Graph_get(self.ob_mpi, nindex, nedges, iindex, iedges) )
 *         cdef int i = 0
 *         cdef object index = [iindex[i] for i from 0 <= i < nindex]             # <<<<<<<<<<<<<<
 *         cdef object edges = [iedges[i] for i from 0 <= i < nedges]
 *         return (index, edges)
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_nindex;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_iindex[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 2039, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_index = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2040
 *         cdef int i = 0
 *         cdef object index = [iindex[i] for i from 0 <= i < nindex]
 *         cdef object edges = [iedges[i] for i from 0 <= i < nedges]             # <<<<<<<<<<<<<<
 *         return (index, edges)
 * 
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2040, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_nedges;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_iedges[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2040, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 2040, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_edges = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2041
 *         cdef object index = [iindex[i] for i from 0 <= i < nindex]
 *         cdef object edges = [iedges[i] for i from 0 <= i < nedges]
 *         return (index, edges)             # <<<<<<<<<<<<<<
 * 
 *     property topo:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_index);
  __Pyx_GIVEREF(__pyx_v_index);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_index);
  __Pyx_INCREF(__pyx_v_edges);
  __Pyx_GIVEREF(__pyx_v_edges);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_edges);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2027
 *             return self.Get_dims()[1]
 * 
 *     def Get_topo(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return index and edges
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.Get_topo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XDECREF(__pyx_v_edges);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2045
 *     property topo:
 *         """topology information"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_4topo_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_4topo_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_4topo___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_4topo___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2046
 *         """topology information"""
 *         def __get__(self):
 *             return self.Get_topo()             # <<<<<<<<<<<<<<
 * 
 *     property index:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2046, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2045
 *     property topo:
 *         """topology information"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.topo.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2050
 *     property index:
 *         """index"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[0]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_5index_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_5index_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_5index___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_5index___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2051
 *         """index"""
 *         def __get__(self):
 *             return self.Get_topo()[0]             # <<<<<<<<<<<<<<
 * 
 *     property edges:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2050
 *     property index:
 *         """index"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[0]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.index.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2055
 *     property edges:
 *         """edges"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[1]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_5edges_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_5edges_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_5edges___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_5edges___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2056
 *         """edges"""
 *         def __get__(self):
 *             return self.Get_topo()[1]             # <<<<<<<<<<<<<<
 * 
 *     # Graph Information Functions
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_topo); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2055
 *     property edges:
 *         """edges"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_topo()[1]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.edges.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2061
 *     # ---------------------------
 * 
 *     def Get_neighbors_count(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Return number of neighbors of a process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_7Get_neighbors_count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Graphcomm_6Get_neighbors_count[] = "Graphcomm.Get_neighbors_count(self, int rank)\n\n        Return number of neighbors of a process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_7Get_neighbors_count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_neighbors_count (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_neighbors_count") < 0)) __PYX_ERR(7, 2061, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 2061, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_neighbors_count", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2061, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.Get_neighbors_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_6Get_neighbors_count(((struct PyMPIGraphcommObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_6Get_neighbors_count(struct PyMPIGraphcommObject *__pyx_v_self, int __pyx_v_rank) {
  int __pyx_v_nneighbors;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_neighbors_count", 0);

  /* "mpi4py/MPI/Comm.pyx":2065
 *         Return number of neighbors of a process
 *         """
 *         cdef int nneighbors = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graph_neighbors_count(self.ob_mpi, rank, &nneighbors) )
 *         return nneighbors
 */
  __pyx_v_nneighbors = 0;

  /* "mpi4py/MPI/Comm.pyx":2066
 *         """
 *         cdef int nneighbors = 0
 *         CHKERR( MPI_Graph_neighbors_count(self.ob_mpi, rank, &nneighbors) )             # <<<<<<<<<<<<<<
 *         return nneighbors
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_neighbors_count(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_rank, (&__pyx_v_nneighbors))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2066, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2067
 *         cdef int nneighbors = 0
 *         CHKERR( MPI_Graph_neighbors_count(self.ob_mpi, rank, &nneighbors) )
 *         return nneighbors             # <<<<<<<<<<<<<<
 * 
 *     property nneighbors:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nneighbors); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2061
 *     # ---------------------------
 * 
 *     def Get_neighbors_count(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Return number of neighbors of a process
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.Get_neighbors_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2071
 *     property nneighbors:
 *         """number of neighbors"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int rank = self.Get_rank()
 *             return self.Get_neighbors_count(rank)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_10nneighbors_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_10nneighbors_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_10nneighbors___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_10nneighbors___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2072
 *         """number of neighbors"""
 *         def __get__(self):
 *             cdef int rank = self.Get_rank()             # <<<<<<<<<<<<<<
 *             return self.Get_neighbors_count(rank)
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 2072, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rank = __pyx_t_4;

  /* "mpi4py/MPI/Comm.pyx":2073
 *         def __get__(self):
 *             cdef int rank = self.Get_rank()
 *             return self.Get_neighbors_count(rank)             # <<<<<<<<<<<<<<
 * 
 *     def Get_neighbors(self, int rank):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_neighbors_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2071
 *     property nneighbors:
 *         """number of neighbors"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int rank = self.Get_rank()
 *             return self.Get_neighbors_count(rank)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.nneighbors.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2075
 *             return self.Get_neighbors_count(rank)
 * 
 *     def Get_neighbors(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Return list of neighbors of a process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_9Get_neighbors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Graphcomm_8Get_neighbors[] = "Graphcomm.Get_neighbors(self, int rank)\n\n        Return list of neighbors of a process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_9Get_neighbors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_neighbors (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_neighbors") < 0)) __PYX_ERR(7, 2075, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 2075, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_neighbors", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2075, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.Get_neighbors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_8Get_neighbors(((struct PyMPIGraphcommObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_8Get_neighbors(struct PyMPIGraphcommObject *__pyx_v_self, int __pyx_v_rank) {
  int __pyx_v_i;
  int __pyx_v_nneighbors;
  int *__pyx_v_ineighbors;
  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
  PyObject *__pyx_v_neighbors = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_neighbors", 0);

  /* "mpi4py/MPI/Comm.pyx":2079
 *         Return list of neighbors of a process
 *         """
 *         cdef int i = 0, nneighbors = 0, *ineighbors = NULL             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graph_neighbors_count(
 *                 self.ob_mpi, rank, &nneighbors) )
 */
  __pyx_v_i = 0;
  __pyx_v_nneighbors = 0;
  __pyx_v_ineighbors = NULL;

  /* "mpi4py/MPI/Comm.pyx":2080
 *         """
 *         cdef int i = 0, nneighbors = 0, *ineighbors = NULL
 *         CHKERR( MPI_Graph_neighbors_count(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, rank, &nneighbors) )
 *         cdef tmp = newarray(nneighbors, &ineighbors)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_neighbors_count(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_rank, (&__pyx_v_nneighbors))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2080, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2082
 *         CHKERR( MPI_Graph_neighbors_count(
 *                 self.ob_mpi, rank, &nneighbors) )
 *         cdef tmp = newarray(nneighbors, &ineighbors)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Graph_neighbors(
 *                 self.ob_mpi, rank, nneighbors, ineighbors) )
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_nneighbors, (&__pyx_v_ineighbors)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2083
 *                 self.ob_mpi, rank, &nneighbors) )
 *         cdef tmp = newarray(nneighbors, &ineighbors)
 *         CHKERR( MPI_Graph_neighbors(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, rank, nneighbors, ineighbors) )
 *         cdef object neighbors = [ineighbors[i] for i from 0 <= i < nneighbors]
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Graph_neighbors(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_rank, __pyx_v_nneighbors, __pyx_v_ineighbors)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2083, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2085
 *         CHKERR( MPI_Graph_neighbors(
 *                 self.ob_mpi, rank, nneighbors, ineighbors) )
 *         cdef object neighbors = [ineighbors[i] for i from 0 <= i < nneighbors]             # <<<<<<<<<<<<<<
 *         return neighbors
 * 
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_nneighbors;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_ineighbors[__pyx_v_i])); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2085, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(7, 2085, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_v_neighbors = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2086
 *                 self.ob_mpi, rank, nneighbors, ineighbors) )
 *         cdef object neighbors = [ineighbors[i] for i from 0 <= i < nneighbors]
 *         return neighbors             # <<<<<<<<<<<<<<
 * 
 *     property neighbors:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_neighbors);
  __pyx_r = __pyx_v_neighbors;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2075
 *             return self.Get_neighbors_count(rank)
 * 
 *     def Get_neighbors(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Return list of neighbors of a process
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.Get_neighbors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp);
  __Pyx_XDECREF(__pyx_v_neighbors);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2090
 *     property neighbors:
 *         """neighbors"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int rank = self.Get_rank()
 *             return self.Get_neighbors(rank)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_9neighbors_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Graphcomm_9neighbors_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Graphcomm_9neighbors___get__(((struct PyMPIGraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Graphcomm_9neighbors___get__(struct PyMPIGraphcommObject *__pyx_v_self) {
  int __pyx_v_rank;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2091
 *         """neighbors"""
 *         def __get__(self):
 *             cdef int rank = self.Get_rank()             # <<<<<<<<<<<<<<
 *             return self.Get_neighbors(rank)
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_rank); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 2091, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_rank = __pyx_t_4;

  /* "mpi4py/MPI/Comm.pyx":2092
 *         def __get__(self):
 *             cdef int rank = self.Get_rank()
 *             return self.Get_neighbors(rank)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_neighbors); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rank); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2090
 *     property neighbors:
 *         """neighbors"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int rank = self.Get_rank()
 *             return self.Get_neighbors(rank)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Graphcomm.neighbors.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2101
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_13Distgraphcomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_13Distgraphcomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 2101, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2101, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Distgraphcomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 2101, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_13Distgraphcomm___cinit__(((struct PyMPIDistgraphcommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_13Distgraphcomm___cinit__(struct PyMPIDistgraphcommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_topo;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":2102
 * 
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return             # <<<<<<<<<<<<<<
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":2103
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_DIST_GRAPH: raise TypeError(
 */
  __pyx_v_topo = MPI_UNDEFINED;

  /* "mpi4py/MPI/Comm.pyx":2104
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )             # <<<<<<<<<<<<<<
 *         if topo != MPI_DIST_GRAPH: raise TypeError(
 *             "expecting a distributed graph communicator")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Topo_test(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_topo))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 2104, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2105
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_DIST_GRAPH: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a distributed graph communicator")
 * 
 */
  __pyx_t_1 = ((__pyx_v_topo != MPI_DIST_GRAPH) != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__100, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2105, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(7, 2105, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Comm.pyx":2101
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int topo = MPI_UNDEFINED
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Distgraphcomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2111
 *     # --------------------------
 * 
 *     def Get_dist_neighbors_count(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return adjacency information for a distributed graph topology
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_3Get_dist_neighbors_count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_13Distgraphcomm_2Get_dist_neighbors_count[] = "Distgraphcomm.Get_dist_neighbors_count(self)\n\n        Return adjacency information for a distributed graph topology\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_3Get_dist_neighbors_count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_dist_neighbors_count (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_dist_neighbors_count", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_dist_neighbors_count", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_13Distgraphcomm_2Get_dist_neighbors_count(((struct PyMPIDistgraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_13Distgraphcomm_2Get_dist_neighbors_count(struct PyMPIDistgraphcommObject *__pyx_v_self) {
  int __pyx_v_indegree;
  int __pyx_v_outdegree;
  int __pyx_v_weighted;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Get_dist_neighbors_count", 0);

  /* "mpi4py/MPI/Comm.pyx":2115
 *         Return adjacency information for a distributed graph topology
 *         """
 *         cdef int indegree = 0             # <<<<<<<<<<<<<<
 *         cdef int outdegree = 0
 *         cdef int weighted = 0
 */
  __pyx_v_indegree = 0;

  /* "mpi4py/MPI/Comm.pyx":2116
 *         """
 *         cdef int indegree = 0
 *         cdef int outdegree = 0             # <<<<<<<<<<<<<<
 *         cdef int weighted = 0
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 */
  __pyx_v_outdegree = 0;

  /* "mpi4py/MPI/Comm.pyx":2117
 *         cdef int indegree = 0
 *         cdef int outdegree = 0
 *         cdef int weighted = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 *                 self.ob_mpi, &indegree, &outdegree, &weighted) )
 */
  __pyx_v_weighted = 0;

  /* "mpi4py/MPI/Comm.pyx":2118
 *         cdef int outdegree = 0
 *         cdef int weighted = 0
 *         CHKERR( MPI_Dist_graph_neighbors_count(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, &indegree, &outdegree, &weighted) )
 *         return (indegree, outdegree, <bint>weighted)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dist_graph_neighbors_count(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_indegree), (&__pyx_v_outdegree), (&__pyx_v_weighted))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2118, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2120
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 *                 self.ob_mpi, &indegree, &outdegree, &weighted) )
 *         return (indegree, outdegree, <bint>weighted)             # <<<<<<<<<<<<<<
 * 
 *     def Get_dist_neighbors(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_indegree); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_outdegree); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_weighted != 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 2120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2111
 *     # --------------------------
 * 
 *     def Get_dist_neighbors_count(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return adjacency information for a distributed graph topology
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Distgraphcomm.Get_dist_neighbors_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2122
 *         return (indegree, outdegree, <bint>weighted)
 * 
 *     def Get_dist_neighbors(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return adjacency information for a distributed graph topology
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_5Get_dist_neighbors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_13Distgraphcomm_4Get_dist_neighbors[] = "Distgraphcomm.Get_dist_neighbors(self)\n\n        Return adjacency information for a distributed graph topology\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_5Get_dist_neighbors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_dist_neighbors (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_dist_neighbors", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_dist_neighbors", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_13Distgraphcomm_4Get_dist_neighbors(((struct PyMPIDistgraphcommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_13Distgraphcomm_4Get_dist_neighbors(struct PyMPIDistgraphcommObject *__pyx_v_self) {
  int __pyx_v_maxindegree;
  int __pyx_v_maxoutdegree;
  int __pyx_v_weighted;
  int *__pyx_v_sources;
  int *__pyx_v_destinations;
  int *__pyx_v_sourceweights;
  int *__pyx_v_destweights;
  CYTHON_UNUSED PyObject *__pyx_v_tmp1 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp2 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp3 = 0;
  CYTHON_UNUSED PyObject *__pyx_v_tmp4 = 0;
  int __pyx_v_i;
  PyObject *__pyx_v_src = 0;
  PyObject *__pyx_v_dst = 0;
  PyObject *__pyx_v_sw = 0;
  PyObject *__pyx_v_dw = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Get_dist_neighbors", 0);

  /* "mpi4py/MPI/Comm.pyx":2126
 *         Return adjacency information for a distributed graph topology
 *         """
 *         cdef int maxindegree = 0, maxoutdegree = 0, weighted = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Dist_graph_neighbors_count(
 *                 self.ob_mpi, &maxindegree, &maxoutdegree, &weighted) )
 */
  __pyx_v_maxindegree = 0;
  __pyx_v_maxoutdegree = 0;
  __pyx_v_weighted = 0;

  /* "mpi4py/MPI/Comm.pyx":2127
 *         """
 *         cdef int maxindegree = 0, maxoutdegree = 0, weighted = 0
 *         CHKERR( MPI_Dist_graph_neighbors_count(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi, &maxindegree, &maxoutdegree, &weighted) )
 *         #
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dist_graph_neighbors_count(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, (&__pyx_v_maxindegree), (&__pyx_v_maxoutdegree), (&__pyx_v_weighted))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2127, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2130
 *                 self.ob_mpi, &maxindegree, &maxoutdegree, &weighted) )
 *         #
 *         cdef int *sources = NULL, *destinations = NULL             # <<<<<<<<<<<<<<
 *         cdef int *sourceweights = MPI_UNWEIGHTED
 *         cdef int *destweights   = MPI_UNWEIGHTED
 */
  __pyx_v_sources = NULL;
  __pyx_v_destinations = NULL;

  /* "mpi4py/MPI/Comm.pyx":2131
 *         #
 *         cdef int *sources = NULL, *destinations = NULL
 *         cdef int *sourceweights = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         cdef int *destweights   = MPI_UNWEIGHTED
 *         cdef tmp1, tmp2, tmp3, tmp4
 */
  __pyx_v_sourceweights = MPI_UNWEIGHTED;

  /* "mpi4py/MPI/Comm.pyx":2132
 *         cdef int *sources = NULL, *destinations = NULL
 *         cdef int *sourceweights = MPI_UNWEIGHTED
 *         cdef int *destweights   = MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 *         cdef tmp1, tmp2, tmp3, tmp4
 *         tmp1 = newarray(maxindegree,  &sources)
 */
  __pyx_v_destweights = MPI_UNWEIGHTED;

  /* "mpi4py/MPI/Comm.pyx":2134
 *         cdef int *destweights   = MPI_UNWEIGHTED
 *         cdef tmp1, tmp2, tmp3, tmp4
 *         tmp1 = newarray(maxindegree,  &sources)             # <<<<<<<<<<<<<<
 *         tmp2 = newarray(maxoutdegree, &destinations)
 *         cdef int i = 0
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_maxindegree, (&__pyx_v_sources)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp1 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2135
 *         cdef tmp1, tmp2, tmp3, tmp4
 *         tmp1 = newarray(maxindegree,  &sources)
 *         tmp2 = newarray(maxoutdegree, &destinations)             # <<<<<<<<<<<<<<
 *         cdef int i = 0
 *         if weighted:
 */
  __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_maxoutdegree, (&__pyx_v_destinations)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tmp2 = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2136
 *         tmp1 = newarray(maxindegree,  &sources)
 *         tmp2 = newarray(maxoutdegree, &destinations)
 *         cdef int i = 0             # <<<<<<<<<<<<<<
 *         if weighted:
 *             tmp3 = newarray(maxindegree,  &sourceweights)
 */
  __pyx_v_i = 0;

  /* "mpi4py/MPI/Comm.pyx":2137
 *         tmp2 = newarray(maxoutdegree, &destinations)
 *         cdef int i = 0
 *         if weighted:             # <<<<<<<<<<<<<<
 *             tmp3 = newarray(maxindegree,  &sourceweights)
 *             for i from 0 <= i < maxindegree:  sourceweights[i] = 1
 */
  __pyx_t_3 = (__pyx_v_weighted != 0);
  if (__pyx_t_3) {

    /* "mpi4py/MPI/Comm.pyx":2138
 *         cdef int i = 0
 *         if weighted:
 *             tmp3 = newarray(maxindegree,  &sourceweights)             # <<<<<<<<<<<<<<
 *             for i from 0 <= i < maxindegree:  sourceweights[i] = 1
 *             tmp4 = newarray(maxoutdegree, &destweights)
 */
    __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_maxindegree, (&__pyx_v_sourceweights)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_tmp3 = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/Comm.pyx":2139
 *         if weighted:
 *             tmp3 = newarray(maxindegree,  &sourceweights)
 *             for i from 0 <= i < maxindegree:  sourceweights[i] = 1             # <<<<<<<<<<<<<<
 *             tmp4 = newarray(maxoutdegree, &destweights)
 *             for i from 0 <= i < maxoutdegree: destweights[i]   = 1
 */
    __pyx_t_1 = __pyx_v_maxindegree;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
      (__pyx_v_sourceweights[__pyx_v_i]) = 1;
    }

    /* "mpi4py/MPI/Comm.pyx":2140
 *             tmp3 = newarray(maxindegree,  &sourceweights)
 *             for i from 0 <= i < maxindegree:  sourceweights[i] = 1
 *             tmp4 = newarray(maxoutdegree, &destweights)             # <<<<<<<<<<<<<<
 *             for i from 0 <= i < maxoutdegree: destweights[i]   = 1
 *         #
 */
    __pyx_t_2 = __pyx_fuse_0__pyx_f_6mpi4py_3MPI_newarray(__pyx_v_maxoutdegree, (&__pyx_v_destweights)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_tmp4 = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "mpi4py/MPI/Comm.pyx":2141
 *             for i from 0 <= i < maxindegree:  sourceweights[i] = 1
 *             tmp4 = newarray(maxoutdegree, &destweights)
 *             for i from 0 <= i < maxoutdegree: destweights[i]   = 1             # <<<<<<<<<<<<<<
 *         #
 *         CHKERR( MPI_Dist_graph_neighbors(
 */
    __pyx_t_1 = __pyx_v_maxoutdegree;
    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
      (__pyx_v_destweights[__pyx_v_i]) = 1;
    }

    /* "mpi4py/MPI/Comm.pyx":2137
 *         tmp2 = newarray(maxoutdegree, &destinations)
 *         cdef int i = 0
 *         if weighted:             # <<<<<<<<<<<<<<
 *             tmp3 = newarray(maxindegree,  &sourceweights)
 *             for i from 0 <= i < maxindegree:  sourceweights[i] = 1
 */
  }

  /* "mpi4py/MPI/Comm.pyx":2143
 *             for i from 0 <= i < maxoutdegree: destweights[i]   = 1
 *         #
 *         CHKERR( MPI_Dist_graph_neighbors(             # <<<<<<<<<<<<<<
 *                 self.ob_mpi,
 *                 maxindegree,  sources,      sourceweights,
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Dist_graph_neighbors(__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.ob_mpi, __pyx_v_maxindegree, __pyx_v_sources, __pyx_v_sourceweights, __pyx_v_maxoutdegree, __pyx_v_destinations, __pyx_v_destweights)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2143, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2148
 *                 maxoutdegree, destinations, destweights) )
 *         #
 *         cdef object src = [sources[i]      for i from 0 <= i < maxindegree]             # <<<<<<<<<<<<<<
 *         cdef object dst = [destinations[i] for i from 0 <= i < maxoutdegree]
 *         if not weighted: return (src, dst, None)
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_maxindegree;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_sources[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(7, 2148, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_v_src = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2149
 *         #
 *         cdef object src = [sources[i]      for i from 0 <= i < maxindegree]
 *         cdef object dst = [destinations[i] for i from 0 <= i < maxoutdegree]             # <<<<<<<<<<<<<<
 *         if not weighted: return (src, dst, None)
 *         #
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_maxoutdegree;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_destinations[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(7, 2149, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_v_dst = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2150
 *         cdef object src = [sources[i]      for i from 0 <= i < maxindegree]
 *         cdef object dst = [destinations[i] for i from 0 <= i < maxoutdegree]
 *         if not weighted: return (src, dst, None)             # <<<<<<<<<<<<<<
 *         #
 *         cdef object sw = [sourceweights[i] for i from 0 <= i < maxindegree]
 */
  __pyx_t_3 = ((!(__pyx_v_weighted != 0)) != 0);
  if (__pyx_t_3) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_src);
    __Pyx_GIVEREF(__pyx_v_src);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_src);
    __Pyx_INCREF(__pyx_v_dst);
    __Pyx_GIVEREF(__pyx_v_dst);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dst);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":2152
 *         if not weighted: return (src, dst, None)
 *         #
 *         cdef object sw = [sourceweights[i] for i from 0 <= i < maxindegree]             # <<<<<<<<<<<<<<
 *         cdef object dw = [destweights[i]   for i from 0 <= i < maxoutdegree]
 *         return (src, dst, (sw, dw))
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_maxindegree;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_sourceweights[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(7, 2152, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_v_sw = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2153
 *         #
 *         cdef object sw = [sourceweights[i] for i from 0 <= i < maxindegree]
 *         cdef object dw = [destweights[i]   for i from 0 <= i < maxoutdegree]             # <<<<<<<<<<<<<<
 *         return (src, dst, (sw, dw))
 * 
 */
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_v_maxoutdegree;
  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_destweights[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(7, 2153, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_v_dw = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2154
 *         cdef object sw = [sourceweights[i] for i from 0 <= i < maxindegree]
 *         cdef object dw = [destweights[i]   for i from 0 <= i < maxoutdegree]
 *         return (src, dst, (sw, dw))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_sw);
  __Pyx_GIVEREF(__pyx_v_sw);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_sw);
  __Pyx_INCREF(__pyx_v_dw);
  __Pyx_GIVEREF(__pyx_v_dw);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_dw);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 2154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_src);
  __Pyx_GIVEREF(__pyx_v_src);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_src);
  __Pyx_INCREF(__pyx_v_dst);
  __Pyx_GIVEREF(__pyx_v_dst);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_dst);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2122
 *         return (indegree, outdegree, <bint>weighted)
 * 
 *     def Get_dist_neighbors(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return adjacency information for a distributed graph topology
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Distgraphcomm.Get_dist_neighbors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tmp1);
  __Pyx_XDECREF(__pyx_v_tmp2);
  __Pyx_XDECREF(__pyx_v_tmp3);
  __Pyx_XDECREF(__pyx_v_tmp4);
  __Pyx_XDECREF(__pyx_v_src);
  __Pyx_XDECREF(__pyx_v_dst);
  __Pyx_XDECREF(__pyx_v_sw);
  __Pyx_XDECREF(__pyx_v_dw);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2163
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 0
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_9Intercomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_9Intercomm_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPICommObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(7, 2163, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPICommObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2163, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Comm, 1, "comm", 0))) __PYX_ERR(7, 2163, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intercomm___cinit__(((struct PyMPIIntercommObject *)__pyx_v_self), __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_9Intercomm___cinit__(struct PyMPIIntercommObject *__pyx_v_self, CYTHON_UNUSED struct PyMPICommObject *__pyx_v_comm) {
  int __pyx_v_inter;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Comm.pyx":2164
 * 
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return             # <<<<<<<<<<<<<<
 *         cdef int inter = 0
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 */
  __pyx_t_1 = ((__pyx_v_self->__pyx_base.ob_mpi == MPI_COMM_NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Comm.pyx":2165
 *     def __cinit__(self, Comm comm=None):
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 *         if not inter: raise TypeError(
 */
  __pyx_v_inter = 0;

  /* "mpi4py/MPI/Comm.pyx":2166
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 0
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )             # <<<<<<<<<<<<<<
 *         if not inter: raise TypeError(
 *             "expecting an intercommunicator")
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_test_inter(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_inter))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 2166, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2167
 *         cdef int inter = 0
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 *         if not inter: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting an intercommunicator")
 * 
 */
  __pyx_t_1 = ((!(__pyx_v_inter != 0)) != 0);
  if (unlikely(__pyx_t_1)) {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__101, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 2167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(7, 2167, __pyx_L1_error)
  }

  /* "mpi4py/MPI/Comm.pyx":2163
 *     """
 * 
 *     def __cinit__(self, Comm comm=None):             # <<<<<<<<<<<<<<
 *         if self.ob_mpi == MPI_COMM_NULL: return
 *         cdef int inter = 0
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2173
 *     # ---------------------------
 * 
 *     def Get_remote_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Access the remote group associated
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_3Get_remote_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intercomm_2Get_remote_group[] = "Intercomm.Get_remote_group(self)\n\n        Access the remote group associated\n        with the inter-communicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_3Get_remote_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_remote_group (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_remote_group", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_remote_group", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intercomm_2Get_remote_group(((struct PyMPIIntercommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_2Get_remote_group(struct PyMPIIntercommObject *__pyx_v_self) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_remote_group", 0);

  /* "mpi4py/MPI/Comm.pyx":2178
 *         with the inter-communicator
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Comm_remote_group(
 *             self.ob_mpi, &group.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2178, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2179
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_Comm_remote_group(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":2180
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_Comm_remote_group(
 *             self.ob_mpi, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_group(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 2179, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":2179
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_Comm_remote_group(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &group.ob_mpi) )
 *         return group
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2181
 *         with nogil: CHKERR( MPI_Comm_remote_group(
 *             self.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     property remote_group:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2173
 *     # ---------------------------
 * 
 *     def Get_remote_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Access the remote group associated
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.Get_remote_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2185
 *     property remote_group:
 *         """remote group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_remote_group()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_12remote_group_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_12remote_group_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intercomm_12remote_group___get__(((struct PyMPIIntercommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_12remote_group___get__(struct PyMPIIntercommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2186
 *         """remote group"""
 *         def __get__(self):
 *             return self.Get_remote_group()             # <<<<<<<<<<<<<<
 * 
 *     def Get_remote_size(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_remote_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2185
 *     property remote_group:
 *         """remote group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_remote_group()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.remote_group.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2188
 *             return self.Get_remote_group()
 * 
 *     def Get_remote_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Intercommunicator remote size
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_5Get_remote_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intercomm_4Get_remote_size[] = "Intercomm.Get_remote_size(self)\n\n        Intercommunicator remote size\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_5Get_remote_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_remote_size (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_remote_size", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_remote_size", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intercomm_4Get_remote_size(((struct PyMPIIntercommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_4Get_remote_size(struct PyMPIIntercommObject *__pyx_v_self) {
  int __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_remote_size", 0);

  /* "mpi4py/MPI/Comm.pyx":2192
 *         Intercommunicator remote size
 *         """
 *         cdef int size = -1             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Comm_remote_size(self.ob_mpi, &size) )
 *         return size
 */
  __pyx_v_size = -1;

  /* "mpi4py/MPI/Comm.pyx":2193
 *         """
 *         cdef int size = -1
 *         CHKERR( MPI_Comm_remote_size(self.ob_mpi, &size) )             # <<<<<<<<<<<<<<
 *         return size
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Comm_remote_size(__pyx_v_self->__pyx_base.ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2193, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2194
 *         cdef int size = -1
 *         CHKERR( MPI_Comm_remote_size(self.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     property remote_size:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2188
 *             return self.Get_remote_group()
 * 
 *     def Get_remote_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Intercommunicator remote size
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.Get_remote_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2198
 *     property remote_size:
 *         """number of remote processes"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_remote_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_11remote_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_11remote_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intercomm_11remote_size___get__(((struct PyMPIIntercommObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_11remote_size___get__(struct PyMPIIntercommObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Comm.pyx":2199
 *         """number of remote processes"""
 *         def __get__(self):
 *             return self.Get_remote_size()             # <<<<<<<<<<<<<<
 * 
 *     # Communicator Constructors
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_remote_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2198
 *     property remote_size:
 *         """number of remote processes"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_remote_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.remote_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2204
 *     # -------------------------
 * 
 *     def Merge(self, bint high=False):             # <<<<<<<<<<<<<<
 *         """
 *         Merge intercommunicator
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_7Merge(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_9Intercomm_6Merge[] = "Intercomm.Merge(self, bool high=False)\n\n        Merge intercommunicator\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_9Intercomm_7Merge(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_high;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Merge (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_high,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_high);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Merge") < 0)) __PYX_ERR(7, 2204, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_high = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_high == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 2204, __pyx_L3_error)
    } else {
      __pyx_v_high = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Merge", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2204, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.Merge", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_9Intercomm_6Merge(((struct PyMPIIntercommObject *)__pyx_v_self), __pyx_v_high);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_9Intercomm_6Merge(struct PyMPIIntercommObject *__pyx_v_self, int __pyx_v_high) {
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Merge", 0);

  /* "mpi4py/MPI/Comm.pyx":2208
 *         Merge intercommunicator
 *         """
 *         cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Intercomm_merge(
 *             self.ob_mpi, high, &comm.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Intracomm(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Intracomm), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2208, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_comm = ((struct PyMPIIntracommObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Comm.pyx":2209
 *         """
 *         cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *         with nogil: CHKERR( MPI_Intercomm_merge(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, high, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Comm.pyx":2210
 *         cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *         with nogil: CHKERR( MPI_Intercomm_merge(
 *             self.ob_mpi, high, &comm.ob_mpi) )             # <<<<<<<<<<<<<<
 *         comm_set_eh(comm.ob_mpi)
 *         return comm
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Intercomm_merge(__pyx_v_self->__pyx_base.ob_mpi, __pyx_v_high, (&__pyx_v_comm->__pyx_base.ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 2209, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Comm.pyx":2209
 *         """
 *         cdef Intracomm comm = <Intracomm>Intracomm.__new__(Intracomm)
 *         with nogil: CHKERR( MPI_Intercomm_merge(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, high, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2211
 *         with nogil: CHKERR( MPI_Intercomm_merge(
 *             self.ob_mpi, high, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)             # <<<<<<<<<<<<<<
 *         return comm
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_comm_set_eh(__pyx_v_comm->__pyx_base.ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 2211, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2212
 *             self.ob_mpi, high, &comm.ob_mpi) )
 *         comm_set_eh(comm.ob_mpi)
 *         return comm             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_comm));
  __pyx_r = ((PyObject *)__pyx_v_comm);
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2204
 *     # -------------------------
 * 
 *     def Merge(self, bint high=False):             # <<<<<<<<<<<<<<
 *         """
 *         Merge intercommunicator
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Intercomm.Merge", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_comm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2236
 * #: Upper bound of memory overhead for sending in buffered mode
 * 
 * def Attach_buffer(buf):             # <<<<<<<<<<<<<<
 *     """
 *     Attach a user-provided buffer for
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_25Attach_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_24Attach_buffer[] = "Attach_buffer(buf)\n\n    Attach a user-provided buffer for\n    sending in buffered mode\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_25Attach_buffer = {"Attach_buffer", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_25Attach_buffer, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_24Attach_buffer};
static PyObject *__pyx_pw_6mpi4py_3MPI_25Attach_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Attach_buffer (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Attach_buffer") < 0)) __PYX_ERR(7, 2236, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Attach_buffer", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2236, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Attach_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_24Attach_buffer(__pyx_self, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_24Attach_buffer(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_buf) {
  void *__pyx_v_base;
  int __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Attach_buffer", 0);

  /* "mpi4py/MPI/Comm.pyx":2241
 *     sending in buffered mode
 *     """
 *     cdef void *base = NULL             # <<<<<<<<<<<<<<
 *     cdef int size = 0
 *     attach_buffer(buf, &base, &size)
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Comm.pyx":2242
 *     """
 *     cdef void *base = NULL
 *     cdef int size = 0             # <<<<<<<<<<<<<<
 *     attach_buffer(buf, &base, &size)
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Comm.pyx":2243
 *     cdef void *base = NULL
 *     cdef int size = 0
 *     attach_buffer(buf, &base, &size)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_attach_buffer(__pyx_v_buf, (&__pyx_v_base), (&__pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2243, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2244
 *     cdef int size = 0
 *     attach_buffer(buf, &base, &size)
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )             # <<<<<<<<<<<<<<
 * 
 * def Detach_buffer():
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Buffer_attach(__pyx_v_base, __pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2244, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2236
 * #: Upper bound of memory overhead for sending in buffered mode
 * 
 * def Attach_buffer(buf):             # <<<<<<<<<<<<<<
 *     """
 *     Attach a user-provided buffer for
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Attach_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2246
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )
 * 
 * def Detach_buffer():             # <<<<<<<<<<<<<<
 *     """
 *     Remove an existing attached buffer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_27Detach_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_26Detach_buffer[] = "Detach_buffer()\n\n    Remove an existing attached buffer\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_27Detach_buffer = {"Detach_buffer", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_27Detach_buffer, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_26Detach_buffer};
static PyObject *__pyx_pw_6mpi4py_3MPI_27Detach_buffer(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Detach_buffer (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Detach_buffer", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Detach_buffer", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_26Detach_buffer(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_26Detach_buffer(CYTHON_UNUSED PyObject *__pyx_self) {
  void *__pyx_v_base;
  int __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Detach_buffer", 0);

  /* "mpi4py/MPI/Comm.pyx":2250
 *     Remove an existing attached buffer
 *     """
 *     cdef void *base = NULL             # <<<<<<<<<<<<<<
 *     cdef int size = 0
 *     with nogil: CHKERR( MPI_Buffer_detach(&base, &size) )
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Comm.pyx":2251
 *     """
 *     cdef void *base = NULL
 *     cdef int size = 0             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Buffer_detach(&base, &size) )
 *     return detach_buffer(base, size)
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Comm.pyx":2252
 *     cdef void *base = NULL
 *     cdef int size = 0
 *     with nogil: CHKERR( MPI_Buffer_detach(&base, &size) )             # <<<<<<<<<<<<<<
 *     return detach_buffer(base, size)
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Buffer_detach((&__pyx_v_base), (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2252, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2253
 *     cdef int size = 0
 *     with nogil: CHKERR( MPI_Buffer_detach(&base, &size) )
 *     return detach_buffer(base, size)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_detach_buffer(__pyx_v_base, __pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2246
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )
 * 
 * def Detach_buffer():             # <<<<<<<<<<<<<<
 *     """
 *     Remove an existing attached buffer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Detach_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2263
 * # ---------------
 * 
 * def Open_port(Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Return an address that can be used to establish
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_29Open_port(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_28Open_port[] = "Open_port(Info info=INFO_NULL)\n\n    Return an address that can be used to establish\n    connections between groups of MPI processes\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_29Open_port = {"Open_port", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_29Open_port, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_28Open_port};
static PyObject *__pyx_pw_6mpi4py_3MPI_29Open_port(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Open_port (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)__pyx_k__102;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Open_port") < 0)) __PYX_ERR(7, 2263, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Open_port", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2263, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Open_port", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(7, 2263, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_28Open_port(__pyx_self, __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_28Open_port(CYTHON_UNUSED PyObject *__pyx_self, struct PyMPIInfoObject *__pyx_v_info) {
  char __pyx_v_cportname[(MPI_MAX_PORT_NAME + 1)];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Open_port", 0);

  /* "mpi4py/MPI/Comm.pyx":2269
 *     """
 *     cdef char cportname[MPI_MAX_PORT_NAME+1]
 *     with nogil: CHKERR( MPI_Open_port(info.ob_mpi, cportname) )             # <<<<<<<<<<<<<<
 *     cportname[MPI_MAX_PORT_NAME] = 0 # just in case
 *     return mpistr(cportname)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Open_port(__pyx_v_info->ob_mpi, __pyx_v_cportname)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 2269, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2270
 *     cdef char cportname[MPI_MAX_PORT_NAME+1]
 *     with nogil: CHKERR( MPI_Open_port(info.ob_mpi, cportname) )
 *     cportname[MPI_MAX_PORT_NAME] = 0 # just in case             # <<<<<<<<<<<<<<
 *     return mpistr(cportname)
 * 
 */
  (__pyx_v_cportname[MPI_MAX_PORT_NAME]) = 0;

  /* "mpi4py/MPI/Comm.pyx":2271
 *     with nogil: CHKERR( MPI_Open_port(info.ob_mpi, cportname) )
 *     cportname[MPI_MAX_PORT_NAME] = 0 # just in case
 *     return mpistr(cportname)             # <<<<<<<<<<<<<<
 * 
 * def Close_port(port_name):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_mpistr(__pyx_v_cportname); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2263
 * # ---------------
 * 
 * def Open_port(Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Return an address that can be used to establish
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Open_port", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2273
 *     return mpistr(cportname)
 * 
 * def Close_port(port_name):             # <<<<<<<<<<<<<<
 *     """
 *     Close a port
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_31Close_port(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_30Close_port[] = "Close_port(port_name)\n\n    Close a port\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_31Close_port = {"Close_port", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_31Close_port, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_30Close_port};
static PyObject *__pyx_pw_6mpi4py_3MPI_31Close_port(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_port_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Close_port (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_port_name,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_port_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Close_port") < 0)) __PYX_ERR(7, 2273, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_port_name = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Close_port", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2273, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Close_port", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_30Close_port(__pyx_self, __pyx_v_port_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_30Close_port(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_port_name) {
  char *__pyx_v_cportname;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Close_port", 0);
  __Pyx_INCREF(__pyx_v_port_name);

  /* "mpi4py/MPI/Comm.pyx":2277
 *     Close a port
 *     """
 *     cdef char *cportname = NULL             # <<<<<<<<<<<<<<
 *     port_name = asmpistr(port_name, &cportname)
 *     with nogil: CHKERR( MPI_Close_port(cportname) )
 */
  __pyx_v_cportname = NULL;

  /* "mpi4py/MPI/Comm.pyx":2278
 *     """
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Close_port(cportname) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_port_name, (&__pyx_v_cportname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_port_name, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2279
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)
 *     with nogil: CHKERR( MPI_Close_port(cportname) )             # <<<<<<<<<<<<<<
 * 
 * # Name Publishing
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Close_port(__pyx_v_cportname)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 2279, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2273
 *     return mpistr(cportname)
 * 
 * def Close_port(port_name):             # <<<<<<<<<<<<<<
 *     """
 *     Close a port
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Close_port", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_port_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2284
 * # ---------------
 * 
 * def Publish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Publish a service name
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_33Publish_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_32Publish_name[] = "Publish_name(service_name, port_name, info=INFO_NULL)\n\n    Publish a service name\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_33Publish_name = {"Publish_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_33Publish_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_32Publish_name};
static PyObject *__pyx_pw_6mpi4py_3MPI_33Publish_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_service_name = 0;
  PyObject *__pyx_v_port_name = 0;
  PyObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Publish_name (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_service_name,&__pyx_n_s_port_name,&__pyx_n_s_info,0};
    PyObject* values[3] = {0,0,0};
    values[2] = __pyx_k__103;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_service_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_port_name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Publish_name", 0, 2, 3, 1); __PYX_ERR(7, 2284, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Publish_name") < 0)) __PYX_ERR(7, 2284, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_service_name = values[0];
    __pyx_v_port_name = values[1];
    __pyx_v_info = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Publish_name", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2284, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Publish_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_32Publish_name(__pyx_self, __pyx_v_service_name, __pyx_v_port_name, __pyx_v_info);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_32Publish_name(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_service_name, PyObject *__pyx_v_port_name, PyObject *__pyx_v_info) {
  char *__pyx_v_csrvcname;
  char *__pyx_v_cportname;
  MPI_Info __pyx_v_cinfo;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("Publish_name", 0);
  __Pyx_INCREF(__pyx_v_service_name);
  __Pyx_INCREF(__pyx_v_port_name);
  __Pyx_INCREF(__pyx_v_info);

  /* "mpi4py/MPI/Comm.pyx":2288
 *     Publish a service name
 *     """
 *     if isinstance(port_name, Info): # backward compatibility             # <<<<<<<<<<<<<<
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_port_name, __pyx_ptype_6mpi4py_3MPI_Info); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":2289
 *     """
 *     if isinstance(port_name, Info): # backward compatibility
 *         port_name, info = info, port_name             # <<<<<<<<<<<<<<
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)
 */
    __pyx_t_3 = __pyx_v_info;
    __pyx_t_4 = __pyx_v_port_name;
    __pyx_v_port_name = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_info = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/Comm.pyx":2288
 *     Publish a service name
 *     """
 *     if isinstance(port_name, Info): # backward compatibility             # <<<<<<<<<<<<<<
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL
 */
  }

  /* "mpi4py/MPI/Comm.pyx":2290
 *     if isinstance(port_name, Info): # backward compatibility
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL             # <<<<<<<<<<<<<<
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef char *cportname = NULL
 */
  __pyx_v_csrvcname = NULL;

  /* "mpi4py/MPI/Comm.pyx":2291
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)             # <<<<<<<<<<<<<<
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_service_name, (&__pyx_v_csrvcname)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 2291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_service_name, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/Comm.pyx":2292
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef char *cportname = NULL             # <<<<<<<<<<<<<<
 *     port_name = asmpistr(port_name, &cportname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 */
  __pyx_v_cportname = NULL;

  /* "mpi4py/MPI/Comm.pyx":2293
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)             # <<<<<<<<<<<<<<
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_port_name, (&__pyx_v_cportname)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 2293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_port_name, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/Comm.pyx":2294
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )
 * 
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_info, __pyx_ptype_6mpi4py_3MPI_Info)))) __PYX_ERR(7, 2294, __pyx_L1_error)
  __pyx_v_cinfo = __pyx_f_6mpi4py_3MPI_arg_Info(__pyx_v_info);

  /* "mpi4py/MPI/Comm.pyx":2295
 *     port_name = asmpistr(port_name, &cportname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )             # <<<<<<<<<<<<<<
 * 
 * def Unpublish_name(service_name, port_name, info=INFO_NULL):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_6 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Publish_name(__pyx_v_csrvcname, __pyx_v_cinfo, __pyx_v_cportname)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(7, 2295, __pyx_L5_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2284
 * # ---------------
 * 
 * def Publish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Publish a service name
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Publish_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_service_name);
  __Pyx_XDECREF(__pyx_v_port_name);
  __Pyx_XDECREF(__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2297
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )
 * 
 * def Unpublish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Unpublish a service name
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_35Unpublish_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_34Unpublish_name[] = "Unpublish_name(service_name, port_name, info=INFO_NULL)\n\n    Unpublish a service name\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_35Unpublish_name = {"Unpublish_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_35Unpublish_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_34Unpublish_name};
static PyObject *__pyx_pw_6mpi4py_3MPI_35Unpublish_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_service_name = 0;
  PyObject *__pyx_v_port_name = 0;
  PyObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Unpublish_name (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_service_name,&__pyx_n_s_port_name,&__pyx_n_s_info,0};
    PyObject* values[3] = {0,0,0};
    values[2] = __pyx_k__104;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_service_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_port_name)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Unpublish_name", 0, 2, 3, 1); __PYX_ERR(7, 2297, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Unpublish_name") < 0)) __PYX_ERR(7, 2297, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_service_name = values[0];
    __pyx_v_port_name = values[1];
    __pyx_v_info = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Unpublish_name", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2297, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Unpublish_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_34Unpublish_name(__pyx_self, __pyx_v_service_name, __pyx_v_port_name, __pyx_v_info);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_34Unpublish_name(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_service_name, PyObject *__pyx_v_port_name, PyObject *__pyx_v_info) {
  char *__pyx_v_csrvcname;
  char *__pyx_v_cportname;
  MPI_Info __pyx_v_cinfo;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("Unpublish_name", 0);
  __Pyx_INCREF(__pyx_v_service_name);
  __Pyx_INCREF(__pyx_v_port_name);
  __Pyx_INCREF(__pyx_v_info);

  /* "mpi4py/MPI/Comm.pyx":2301
 *     Unpublish a service name
 *     """
 *     if isinstance(port_name, Info): # backward compatibility             # <<<<<<<<<<<<<<
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_port_name, __pyx_ptype_6mpi4py_3MPI_Info); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Comm.pyx":2302
 *     """
 *     if isinstance(port_name, Info): # backward compatibility
 *         port_name, info = info, port_name             # <<<<<<<<<<<<<<
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)
 */
    __pyx_t_3 = __pyx_v_info;
    __pyx_t_4 = __pyx_v_port_name;
    __pyx_v_port_name = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_info = __pyx_t_4;
    __pyx_t_4 = 0;

    /* "mpi4py/MPI/Comm.pyx":2301
 *     Unpublish a service name
 *     """
 *     if isinstance(port_name, Info): # backward compatibility             # <<<<<<<<<<<<<<
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL
 */
  }

  /* "mpi4py/MPI/Comm.pyx":2303
 *     if isinstance(port_name, Info): # backward compatibility
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL             # <<<<<<<<<<<<<<
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef char *cportname = NULL
 */
  __pyx_v_csrvcname = NULL;

  /* "mpi4py/MPI/Comm.pyx":2304
 *         port_name, info = info, port_name
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)             # <<<<<<<<<<<<<<
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_service_name, (&__pyx_v_csrvcname)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 2304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_service_name, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/Comm.pyx":2305
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef char *cportname = NULL             # <<<<<<<<<<<<<<
 *     port_name = asmpistr(port_name, &cportname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 */
  __pyx_v_cportname = NULL;

  /* "mpi4py/MPI/Comm.pyx":2306
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)             # <<<<<<<<<<<<<<
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_port_name, (&__pyx_v_cportname)); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 2306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_port_name, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "mpi4py/MPI/Comm.pyx":2307
 *     cdef char *cportname = NULL
 *     port_name = asmpistr(port_name, &cportname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)             # <<<<<<<<<<<<<<
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )
 * 
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_info, __pyx_ptype_6mpi4py_3MPI_Info)))) __PYX_ERR(7, 2307, __pyx_L1_error)
  __pyx_v_cinfo = __pyx_f_6mpi4py_3MPI_arg_Info(__pyx_v_info);

  /* "mpi4py/MPI/Comm.pyx":2308
 *     port_name = asmpistr(port_name, &cportname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )             # <<<<<<<<<<<<<<
 * 
 * def Lookup_name(service_name, info=INFO_NULL):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_6 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Unpublish_name(__pyx_v_csrvcname, __pyx_v_cinfo, __pyx_v_cportname)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(7, 2308, __pyx_L5_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2297
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )
 * 
 * def Unpublish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Unpublish a service name
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Unpublish_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_service_name);
  __Pyx_XDECREF(__pyx_v_port_name);
  __Pyx_XDECREF(__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Comm.pyx":2310
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )
 * 
 * def Lookup_name(service_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Lookup a port name given a service name
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_37Lookup_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_36Lookup_name[] = "Lookup_name(service_name, info=INFO_NULL)\n\n    Lookup a port name given a service name\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_37Lookup_name = {"Lookup_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_37Lookup_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_36Lookup_name};
static PyObject *__pyx_pw_6mpi4py_3MPI_37Lookup_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_service_name = 0;
  PyObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Lookup_name (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_service_name,&__pyx_n_s_info,0};
    PyObject* values[2] = {0,0};
    values[1] = __pyx_k__105;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_service_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Lookup_name") < 0)) __PYX_ERR(7, 2310, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_service_name = values[0];
    __pyx_v_info = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Lookup_name", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 2310, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Lookup_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_36Lookup_name(__pyx_self, __pyx_v_service_name, __pyx_v_info);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_36Lookup_name(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_service_name, PyObject *__pyx_v_info) {
  char *__pyx_v_csrvcname;
  MPI_Info __pyx_v_cinfo;
  char __pyx_v_cportname[(MPI_MAX_PORT_NAME + 1)];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Lookup_name", 0);
  __Pyx_INCREF(__pyx_v_service_name);

  /* "mpi4py/MPI/Comm.pyx":2314
 *     Lookup a port name given a service name
 *     """
 *     cdef char *csrvcname = NULL             # <<<<<<<<<<<<<<
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 */
  __pyx_v_csrvcname = NULL;

  /* "mpi4py/MPI/Comm.pyx":2315
 *     """
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)             # <<<<<<<<<<<<<<
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 *     cdef char cportname[MPI_MAX_PORT_NAME+1]
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_service_name, (&__pyx_v_csrvcname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_service_name, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2316
 *     cdef char *csrvcname = NULL
 *     service_name = asmpistr(service_name, &csrvcname)
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)             # <<<<<<<<<<<<<<
 *     cdef char cportname[MPI_MAX_PORT_NAME+1]
 *     with nogil: CHKERR( MPI_Lookup_name(csrvcname, cinfo, cportname) )
 */
  if (!(likely(__Pyx_TypeTest(__pyx_v_info, __pyx_ptype_6mpi4py_3MPI_Info)))) __PYX_ERR(7, 2316, __pyx_L1_error)
  __pyx_v_cinfo = __pyx_f_6mpi4py_3MPI_arg_Info(__pyx_v_info);

  /* "mpi4py/MPI/Comm.pyx":2318
 *     cdef MPI_Info cinfo = arg_Info(<Info?>info)
 *     cdef char cportname[MPI_MAX_PORT_NAME+1]
 *     with nogil: CHKERR( MPI_Lookup_name(csrvcname, cinfo, cportname) )             # <<<<<<<<<<<<<<
 *     cportname[MPI_MAX_PORT_NAME] = 0 # just in case
 *     return mpistr(cportname)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Lookup_name(__pyx_v_csrvcname, __pyx_v_cinfo, __pyx_v_cportname)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(7, 2318, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Comm.pyx":2319
 *     cdef char cportname[MPI_MAX_PORT_NAME+1]
 *     with nogil: CHKERR( MPI_Lookup_name(csrvcname, cinfo, cportname) )
 *     cportname[MPI_MAX_PORT_NAME] = 0 # just in case             # <<<<<<<<<<<<<<
 *     return mpistr(cportname)
 */
  (__pyx_v_cportname[MPI_MAX_PORT_NAME]) = 0;

  /* "mpi4py/MPI/Comm.pyx":2320
 *     with nogil: CHKERR( MPI_Lookup_name(csrvcname, cinfo, cportname) )
 *     cportname[MPI_MAX_PORT_NAME] = 0 # just in case
 *     return mpistr(cportname)             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_mpistr(__pyx_v_cportname); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Comm.pyx":2310
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )
 * 
 * def Lookup_name(service_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Lookup a port name given a service name
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Lookup_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_service_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":33
 *     """
 * 
 *     def __cinit__(self, Win win=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_WIN_NULL
 *         if win is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_3Win_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_3Win_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIWinObject *__pyx_v_win = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_win,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIWinObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_win);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(30, 33, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_win = ((struct PyMPIWinObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 33, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_win), __pyx_ptype_6mpi4py_3MPI_Win, 1, "win", 0))) __PYX_ERR(30, 33, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win___cinit__(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_win);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_3Win___cinit__(struct PyMPIWinObject *__pyx_v_self, struct PyMPIWinObject *__pyx_v_win) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_Win __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/Win.pyx":34
 * 
 *     def __cinit__(self, Win win=None):
 *         self.ob_mpi = MPI_WIN_NULL             # <<<<<<<<<<<<<<
 *         if win is None: return
 *         self.ob_mpi =  win.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_WIN_NULL;

  /* "mpi4py/MPI/Win.pyx":35
 *     def __cinit__(self, Win win=None):
 *         self.ob_mpi = MPI_WIN_NULL
 *         if win is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi =  win.ob_mpi
 *         self.ob_mem =  win.ob_mem
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_win) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":36
 *         self.ob_mpi = MPI_WIN_NULL
 *         if win is None: return
 *         self.ob_mpi =  win.ob_mpi             # <<<<<<<<<<<<<<
 *         self.ob_mem =  win.ob_mem
 * 
 */
  __pyx_t_3 = __pyx_v_win->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/Win.pyx":37
 *         if win is None: return
 *         self.ob_mpi =  win.ob_mpi
 *         self.ob_mem =  win.ob_mem             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_4 = __pyx_v_win->ob_mem;
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->ob_mem);
  __Pyx_DECREF(__pyx_v_self->ob_mem);
  __pyx_v_self->ob_mem = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Win.pyx":33
 *     """
 * 
 *     def __cinit__(self, Win win=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_WIN_NULL
 *         if win is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":39
 *         self.ob_mem =  win.ob_mem
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Win(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_3Win_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_3Win_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_3Win_2__dealloc__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_3Win_2__dealloc__(struct PyMPIWinObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/Win.pyx":40
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_Win(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":41
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Win(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_Win((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 41, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":39
 *         self.ob_mem =  win.ob_mem
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_Win(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.Win.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/Win.pyx":43
 *         CHKERR( del_Win(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Win): return NotImplemented
 *         cdef Win s = <Win>self, o = <Win>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_4__richcmp__(((struct PyMPIWinObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_4__richcmp__(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIWinObject *__pyx_v_s = 0;
  struct PyMPIWinObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/Win.pyx":44
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Win): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef Win s = <Win>self, o = <Win>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_Win); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":45
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, Win): return NotImplemented
 *         cdef Win s = <Win>self, o = <Win>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIWinObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIWinObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":46
 *         if not isinstance(other, Win): return NotImplemented
 *         cdef Win s = <Win>self, o = <Win>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 46, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":47
 *         cdef Win s = <Win>self, o = <Win>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 47, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":48
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":49
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":50
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(30, 50, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":43
 *         CHKERR( del_Win(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, Win): return NotImplemented
 *         cdef Win s = <Win>self, o = <Win>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Win.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":52
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_WIN_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_3Win_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_3Win_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_6__bool__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_3Win_6__bool__(struct PyMPIWinObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/Win.pyx":53
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_WIN_NULL             # <<<<<<<<<<<<<<
 * 
 *     # Window Creation
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_WIN_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":52
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_WIN_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":59
 * 
 *     @classmethod
 *     def Create(cls, memory, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_9Create(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_8Create[] = "Win.Create(type cls, memory, int disp_unit=1, Info info=INFO_NULL, Intracomm comm=COMM_SELF)\n\n        Create an window object for one-sided communication\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_9Create(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_memory = 0;
  int __pyx_v_disp_unit;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_memory,&__pyx_n_s_disp_unit,&__pyx_n_s_info,&__pyx_n_s_comm,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = (PyObject *)__pyx_k__106;
    values[3] = (PyObject *)__pyx_k__107;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_disp_unit);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create") < 0)) __PYX_ERR(30, 59, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_memory = values[0];
    if (values[1]) {
      __pyx_v_disp_unit = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_disp_unit == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 59, __pyx_L3_error)
    } else {
      __pyx_v_disp_unit = ((int)1);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[2]);
    __pyx_v_comm = ((struct PyMPIIntracommObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 59, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(30, 60, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Intracomm, 0, "comm", 0))) __PYX_ERR(30, 60, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_8Create(((PyTypeObject*)__pyx_v_cls), __pyx_v_memory, __pyx_v_disp_unit, __pyx_v_info, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_8Create(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_memory, int __pyx_v_disp_unit, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm) {
  void *__pyx_v_base;
  MPI_Aint __pyx_v_size;
  struct PyMPIWinObject *__pyx_v_win = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Create", 0);
  __Pyx_INCREF(__pyx_v_memory);

  /* "mpi4py/MPI/Win.pyx":64
 *         Create an window object for one-sided communication
 *         """
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         if memory is __BOTTOM__:
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":65
 *         """
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         if memory is __BOTTOM__:
 *             base = MPI_BOTTOM
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":66
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0
 *         if memory is __BOTTOM__:             # <<<<<<<<<<<<<<
 *             base = MPI_BOTTOM
 *             memory = None
 */
  __pyx_t_1 = (__pyx_v_memory == __pyx_v_6mpi4py_3MPI___BOTTOM__);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Win.pyx":67
 *         cdef MPI_Aint size = 0
 *         if memory is __BOTTOM__:
 *             base = MPI_BOTTOM             # <<<<<<<<<<<<<<
 *             memory = None
 *         elif memory is not None:
 */
    __pyx_v_base = MPI_BOTTOM;

    /* "mpi4py/MPI/Win.pyx":68
 *         if memory is __BOTTOM__:
 *             base = MPI_BOTTOM
 *             memory = None             # <<<<<<<<<<<<<<
 *         elif memory is not None:
 *             memory = getbuffer_w(memory, &base, &size)
 */
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_memory, Py_None);

    /* "mpi4py/MPI/Win.pyx":66
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0
 *         if memory is __BOTTOM__:             # <<<<<<<<<<<<<<
 *             base = MPI_BOTTOM
 *             memory = None
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/Win.pyx":69
 *             base = MPI_BOTTOM
 *             memory = None
 *         elif memory is not None:             # <<<<<<<<<<<<<<
 *             memory = getbuffer_w(memory, &base, &size)
 *         cdef Win win = <Win>Win.__new__(Win)
 */
  __pyx_t_2 = (__pyx_v_memory != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Win.pyx":70
 *             memory = None
 *         elif memory is not None:
 *             memory = getbuffer_w(memory, &base, &size)             # <<<<<<<<<<<<<<
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_create(
 */
    __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_memory, (&__pyx_v_base), (&__pyx_v_size))); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_memory, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "mpi4py/MPI/Win.pyx":69
 *             base = MPI_BOTTOM
 *             memory = None
 *         elif memory is not None:             # <<<<<<<<<<<<<<
 *             memory = getbuffer_w(memory, &base, &size)
 *         cdef Win win = <Win>Win.__new__(Win)
 */
  }
  __pyx_L3:;

  /* "mpi4py/MPI/Win.pyx":71
 *         elif memory is not None:
 *             memory = getbuffer_w(memory, &base, &size)
 *         cdef Win win = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_create(
 *             base, size, disp_unit,
 */
  __pyx_t_3 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 71, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_3));
  __pyx_t_4 = ((PyObject *)__pyx_t_3);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
  __pyx_v_win = ((struct PyMPIWinObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "mpi4py/MPI/Win.pyx":72
 *             memory = getbuffer_w(memory, &base, &size)
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_create(             # <<<<<<<<<<<<<<
 *             base, size, disp_unit,
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":74
 *         with nogil: CHKERR( MPI_Win_create(
 *             base, size, disp_unit,
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )             # <<<<<<<<<<<<<<
 *         win_set_eh(win.ob_mpi)
 *         win.ob_mem = memory
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_create(__pyx_v_base, __pyx_v_size, __pyx_v_disp_unit, __pyx_v_info->ob_mpi, __pyx_v_comm->__pyx_base.ob_mpi, (&__pyx_v_win->ob_mpi))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(30, 72, __pyx_L5_error)
      }

      /* "mpi4py/MPI/Win.pyx":72
 *             memory = getbuffer_w(memory, &base, &size)
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_create(             # <<<<<<<<<<<<<<
 *             base, size, disp_unit,
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":75
 *             base, size, disp_unit,
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)             # <<<<<<<<<<<<<<
 *         win.ob_mem = memory
 *         return win
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_win_set_eh(__pyx_v_win->ob_mpi); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(30, 75, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":76
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)
 *         win.ob_mem = memory             # <<<<<<<<<<<<<<
 *         return win
 * 
 */
  __Pyx_INCREF(__pyx_v_memory);
  __Pyx_GIVEREF(__pyx_v_memory);
  __Pyx_GOTREF(__pyx_v_win->ob_mem);
  __Pyx_DECREF(__pyx_v_win->ob_mem);
  __pyx_v_win->ob_mem = __pyx_v_memory;

  /* "mpi4py/MPI/Win.pyx":77
 *         win_set_eh(win.ob_mpi)
 *         win.ob_mem = memory
 *         return win             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_win));
  __pyx_r = ((PyObject *)__pyx_v_win);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":59
 * 
 *     @classmethod
 *     def Create(cls, memory, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_win);
  __Pyx_XDECREF(__pyx_v_memory);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":80
 * 
 *     @classmethod
 *     def Allocate(cls, Aint size, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                  Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_11Allocate(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_10Allocate[] = "Win.Allocate(type cls, Aint size, int disp_unit=1, Info info=INFO_NULL, Intracomm comm=COMM_SELF)\n\n        Create an window object for one-sided communication\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_11Allocate(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Aint __pyx_v_size;
  int __pyx_v_disp_unit;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Allocate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_disp_unit,&__pyx_n_s_info,&__pyx_n_s_comm,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = (PyObject *)__pyx_k__108;
    values[3] = (PyObject *)__pyx_k__109;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_disp_unit);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Allocate") < 0)) __PYX_ERR(30, 80, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = __Pyx_PyInt_As_MPI_Aint(values[0]); if (unlikely((__pyx_v_size == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(30, 80, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_disp_unit = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_disp_unit == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 80, __pyx_L3_error)
    } else {
      __pyx_v_disp_unit = ((int)1);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[2]);
    __pyx_v_comm = ((struct PyMPIIntracommObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Allocate", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 80, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(30, 81, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Intracomm, 0, "comm", 0))) __PYX_ERR(30, 81, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_10Allocate(((PyTypeObject*)__pyx_v_cls), __pyx_v_size, __pyx_v_disp_unit, __pyx_v_info, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_10Allocate(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, MPI_Aint __pyx_v_size, int __pyx_v_disp_unit, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm) {
  void *__pyx_v_base;
  struct PyMPIWinObject *__pyx_v_win = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Allocate", 0);

  /* "mpi4py/MPI/Win.pyx":85
 *         Create an window object for one-sided communication
 *         """
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_allocate(
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":86
 *         """
 *         cdef void *base = NULL
 *         cdef Win win = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_allocate(
 *             size, disp_unit, info.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 86, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_win = ((struct PyMPIWinObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":87
 *         cdef void *base = NULL
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_allocate(             # <<<<<<<<<<<<<<
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":89
 *         with nogil: CHKERR( MPI_Win_allocate(
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )             # <<<<<<<<<<<<<<
 *         win_set_eh(win.ob_mpi)
 *         return win
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_allocate(__pyx_v_size, __pyx_v_disp_unit, __pyx_v_info->ob_mpi, __pyx_v_comm->__pyx_base.ob_mpi, (&__pyx_v_base), (&__pyx_v_win->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 87, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":87
 *         cdef void *base = NULL
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_allocate(             # <<<<<<<<<<<<<<
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":90
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)             # <<<<<<<<<<<<<<
 *         return win
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_set_eh(__pyx_v_win->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 90, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":91
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)
 *         return win             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_win));
  __pyx_r = ((PyObject *)__pyx_v_win);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":80
 * 
 *     @classmethod
 *     def Allocate(cls, Aint size, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                  Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Allocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_win);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":94
 * 
 *     @classmethod
 *     def Allocate_shared(cls, Aint size, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                         Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_13Allocate_shared(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_12Allocate_shared[] = "Win.Allocate_shared(type cls, Aint size, int disp_unit=1, Info info=INFO_NULL, Intracomm comm=COMM_SELF)\n\n        Create an window object for one-sided communication\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_13Allocate_shared(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Aint __pyx_v_size;
  int __pyx_v_disp_unit;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Allocate_shared (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_disp_unit,&__pyx_n_s_info,&__pyx_n_s_comm,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = (PyObject *)__pyx_k__110;
    values[3] = (PyObject *)__pyx_k__111;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_disp_unit);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Allocate_shared") < 0)) __PYX_ERR(30, 94, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = __Pyx_PyInt_As_MPI_Aint(values[0]); if (unlikely((__pyx_v_size == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(30, 94, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_disp_unit = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_disp_unit == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 94, __pyx_L3_error)
    } else {
      __pyx_v_disp_unit = ((int)1);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[2]);
    __pyx_v_comm = ((struct PyMPIIntracommObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Allocate_shared", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 94, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Allocate_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(30, 95, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Intracomm, 0, "comm", 0))) __PYX_ERR(30, 95, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_12Allocate_shared(((PyTypeObject*)__pyx_v_cls), __pyx_v_size, __pyx_v_disp_unit, __pyx_v_info, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_12Allocate_shared(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, MPI_Aint __pyx_v_size, int __pyx_v_disp_unit, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm) {
  void *__pyx_v_base;
  struct PyMPIWinObject *__pyx_v_win = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Allocate_shared", 0);

  /* "mpi4py/MPI/Win.pyx":99
 *         Create an window object for one-sided communication
 *         """
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_allocate_shared(
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":100
 *         """
 *         cdef void *base = NULL
 *         cdef Win win = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_allocate_shared(
 *             size, disp_unit, info.ob_mpi,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 100, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_win = ((struct PyMPIWinObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":101
 *         cdef void *base = NULL
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_allocate_shared(             # <<<<<<<<<<<<<<
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":103
 *         with nogil: CHKERR( MPI_Win_allocate_shared(
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )             # <<<<<<<<<<<<<<
 *         win_set_eh(win.ob_mpi)
 *         return win
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_allocate_shared(__pyx_v_size, __pyx_v_disp_unit, __pyx_v_info->ob_mpi, __pyx_v_comm->__pyx_base.ob_mpi, (&__pyx_v_base), (&__pyx_v_win->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 101, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":101
 *         cdef void *base = NULL
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_allocate_shared(             # <<<<<<<<<<<<<<
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":104
 *             size, disp_unit, info.ob_mpi,
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)             # <<<<<<<<<<<<<<
 *         return win
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_set_eh(__pyx_v_win->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 104, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":105
 *             comm.ob_mpi, &base, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)
 *         return win             # <<<<<<<<<<<<<<
 * 
 *     def Shared_query(self, int rank):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_win));
  __pyx_r = ((PyObject *)__pyx_v_win);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":94
 * 
 *     @classmethod
 *     def Allocate_shared(cls, Aint size, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                         Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Allocate_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_win);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":107
 *         return win
 * 
 *     def Shared_query(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Query the process-local address
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_15Shared_query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_14Shared_query[] = "Win.Shared_query(self, int rank)\n\n        Query the process-local address\n        for remote memory segments\n        created with `Win.Allocate_shared()`\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_15Shared_query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Shared_query (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Shared_query") < 0)) __PYX_ERR(30, 107, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 107, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Shared_query", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 107, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Shared_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_14Shared_query(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_14Shared_query(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank) {
  void *__pyx_v_base;
  MPI_Aint __pyx_v_size;
  int __pyx_v_disp_unit;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Shared_query", 0);

  /* "mpi4py/MPI/Win.pyx":113
 *         created with `Win.Allocate_shared()`
 *         """
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         cdef int disp_unit = 1
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":114
 *         """
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         cdef int disp_unit = 1
 *         with nogil: CHKERR( MPI_Win_shared_query(
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":115
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0
 *         cdef int disp_unit = 1             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_shared_query(
 *             self.ob_mpi, rank,
 */
  __pyx_v_disp_unit = 1;

  /* "mpi4py/MPI/Win.pyx":116
 *         cdef MPI_Aint size = 0
 *         cdef int disp_unit = 1
 *         with nogil: CHKERR( MPI_Win_shared_query(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, rank,
 *             &size, &disp_unit, &base) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":118
 *         with nogil: CHKERR( MPI_Win_shared_query(
 *             self.ob_mpi, rank,
 *             &size, &disp_unit, &base) )             # <<<<<<<<<<<<<<
 *         return (asbuffer(self, base, size, 0), disp_unit)
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_shared_query(__pyx_v_self->ob_mpi, __pyx_v_rank, (&__pyx_v_size), (&__pyx_v_disp_unit), (&__pyx_v_base))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 116, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":116
 *         cdef MPI_Aint size = 0
 *         cdef int disp_unit = 1
 *         with nogil: CHKERR( MPI_Win_shared_query(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, rank,
 *             &size, &disp_unit, &base) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":119
 *             self.ob_mpi, rank,
 *             &size, &disp_unit, &base) )
 *         return (asbuffer(self, base, size, 0), disp_unit)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_asbuffer(((PyObject *)__pyx_v_self), __pyx_v_base, __pyx_v_size, 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_disp_unit); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":107
 *         return win
 * 
 *     def Shared_query(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Query the process-local address
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Shared_query", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":122
 * 
 *     @classmethod
 *     def Create_dynamic(cls, Info info=INFO_NULL, Intracomm comm=COMM_SELF):             # <<<<<<<<<<<<<<
 *         """
 *         Create an window object for one-sided communication
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_17Create_dynamic(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_16Create_dynamic[] = "Win.Create_dynamic(type cls, Info info=INFO_NULL, Intracomm comm=COMM_SELF)\n\n        Create an window object for one-sided communication\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_17Create_dynamic(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_dynamic (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,&__pyx_n_s_comm,0};
    PyObject* values[2] = {0,0};
    values[0] = (PyObject *)__pyx_k__112;
    values[1] = (PyObject *)__pyx_k__113;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_dynamic") < 0)) __PYX_ERR(30, 122, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
    __pyx_v_comm = ((struct PyMPIIntracommObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_dynamic", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 122, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Create_dynamic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(30, 122, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Intracomm, 0, "comm", 0))) __PYX_ERR(30, 122, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_16Create_dynamic(((PyTypeObject*)__pyx_v_cls), __pyx_v_info, __pyx_v_comm);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_16Create_dynamic(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIInfoObject *__pyx_v_info, struct PyMPIIntracommObject *__pyx_v_comm) {
  struct PyMPIWinObject *__pyx_v_win = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_dynamic", 0);

  /* "mpi4py/MPI/Win.pyx":126
 *         Create an window object for one-sided communication
 *         """
 *         cdef Win win = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_create_dynamic(
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 126, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_win = ((struct PyMPIWinObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":127
 *         """
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_create_dynamic(             # <<<<<<<<<<<<<<
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":128
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_create_dynamic(
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )             # <<<<<<<<<<<<<<
 *         win_set_eh(win.ob_mpi)
 *         win.ob_mem = {}
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_create_dynamic(__pyx_v_info->ob_mpi, __pyx_v_comm->__pyx_base.ob_mpi, (&__pyx_v_win->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 127, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":127
 *         """
 *         cdef Win win = <Win>Win.__new__(Win)
 *         with nogil: CHKERR( MPI_Win_create_dynamic(             # <<<<<<<<<<<<<<
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":129
 *         with nogil: CHKERR( MPI_Win_create_dynamic(
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)             # <<<<<<<<<<<<<<
 *         win.ob_mem = {}
 *         return win
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_set_eh(__pyx_v_win->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 129, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":130
 *             info.ob_mpi, comm.ob_mpi, &win.ob_mpi) )
 *         win_set_eh(win.ob_mpi)
 *         win.ob_mem = {}             # <<<<<<<<<<<<<<
 *         return win
 * 
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __Pyx_GOTREF(__pyx_v_win->ob_mem);
  __Pyx_DECREF(__pyx_v_win->ob_mem);
  __pyx_v_win->ob_mem = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":131
 *         win_set_eh(win.ob_mpi)
 *         win.ob_mem = {}
 *         return win             # <<<<<<<<<<<<<<
 * 
 *     def Attach(self, memory):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_win));
  __pyx_r = ((PyObject *)__pyx_v_win);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":122
 * 
 *     @classmethod
 *     def Create_dynamic(cls, Info info=INFO_NULL, Intracomm comm=COMM_SELF):             # <<<<<<<<<<<<<<
 *         """
 *         Create an window object for one-sided communication
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Create_dynamic", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_win);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":133
 *         return win
 * 
 *     def Attach(self, memory):             # <<<<<<<<<<<<<<
 *         """
 *         Attach a local memory region
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_19Attach(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_18Attach[] = "Win.Attach(self, memory)\n\n        Attach a local memory region\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_19Attach(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_memory = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Attach (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_memory,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Attach") < 0)) __PYX_ERR(30, 133, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_memory = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Attach", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 133, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Attach", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_18Attach(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_memory);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_18Attach(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_memory) {
  void *__pyx_v_base;
  MPI_Aint __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Attach", 0);
  __Pyx_INCREF(__pyx_v_memory);

  /* "mpi4py/MPI/Win.pyx":137
 *         Attach a local memory region
 *         """
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         memory = getbuffer_w(memory, &base, &size)
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":138
 *         """
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         memory = getbuffer_w(memory, &base, &size)
 *         with nogil: CHKERR( MPI_Win_attach(self.ob_mpi, base, size) )
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":139
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0
 *         memory = getbuffer_w(memory, &base, &size)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_attach(self.ob_mpi, base, size) )
 *         try: (<dict>self.ob_mem)[<MPI_Aint>base] = memory
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_memory, (&__pyx_v_base), (&__pyx_v_size))); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_memory, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":140
 *         cdef MPI_Aint size = 0
 *         memory = getbuffer_w(memory, &base, &size)
 *         with nogil: CHKERR( MPI_Win_attach(self.ob_mpi, base, size) )             # <<<<<<<<<<<<<<
 *         try: (<dict>self.ob_mem)[<MPI_Aint>base] = memory
 *         except: pass
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_attach(__pyx_v_self->ob_mpi, __pyx_v_base, __pyx_v_size)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 140, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":141
 *         memory = getbuffer_w(memory, &base, &size)
 *         with nogil: CHKERR( MPI_Win_attach(self.ob_mpi, base, size) )
 *         try: (<dict>self.ob_mem)[<MPI_Aint>base] = memory             # <<<<<<<<<<<<<<
 *         except: pass
 * 
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {
      if (unlikely(__pyx_v_self->ob_mem == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(30, 141, __pyx_L6_error)
      }
      __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)__pyx_v_base)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 141, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(PyDict_SetItem(((PyObject*)__pyx_v_self->ob_mem), __pyx_t_1, __pyx_v_memory) < 0)) __PYX_ERR(30, 141, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L11_try_end;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/Win.pyx":142
 *         with nogil: CHKERR( MPI_Win_attach(self.ob_mpi, base, size) )
 *         try: (<dict>self.ob_mem)[<MPI_Aint>base] = memory
 *         except: pass             # <<<<<<<<<<<<<<
 * 
 *     def Detach(self, memory):
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L7_exception_handled;
    }
    __pyx_L7_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L11_try_end:;
  }

  /* "mpi4py/MPI/Win.pyx":133
 *         return win
 * 
 *     def Attach(self, memory):             # <<<<<<<<<<<<<<
 *         """
 *         Attach a local memory region
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Attach", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_memory);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":144
 *         except: pass
 * 
 *     def Detach(self, memory):             # <<<<<<<<<<<<<<
 *         """
 *         Detach a local memory region
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_21Detach(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_20Detach[] = "Win.Detach(self, memory)\n\n        Detach a local memory region\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_21Detach(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_memory = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Detach (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_memory,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Detach") < 0)) __PYX_ERR(30, 144, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_memory = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Detach", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 144, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Detach", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_20Detach(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_memory);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_20Detach(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_memory) {
  void *__pyx_v_base;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Detach", 0);
  __Pyx_INCREF(__pyx_v_memory);

  /* "mpi4py/MPI/Win.pyx":148
 *         Detach a local memory region
 *         """
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         memory = getbuffer_w(memory, &base, NULL)
 *         with nogil: CHKERR( MPI_Win_detach(self.ob_mpi, base) )
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":149
 *         """
 *         cdef void *base = NULL
 *         memory = getbuffer_w(memory, &base, NULL)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_detach(self.ob_mpi, base) )
 *         try: del (<dict>self.ob_mem)[<MPI_Aint>base]
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer_w(__pyx_v_memory, (&__pyx_v_base), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_memory, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":150
 *         cdef void *base = NULL
 *         memory = getbuffer_w(memory, &base, NULL)
 *         with nogil: CHKERR( MPI_Win_detach(self.ob_mpi, base) )             # <<<<<<<<<<<<<<
 *         try: del (<dict>self.ob_mem)[<MPI_Aint>base]
 *         except: pass
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_detach(__pyx_v_self->ob_mpi, __pyx_v_base)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 150, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":151
 *         memory = getbuffer_w(memory, &base, NULL)
 *         with nogil: CHKERR( MPI_Win_detach(self.ob_mpi, base) )
 *         try: del (<dict>self.ob_mem)[<MPI_Aint>base]             # <<<<<<<<<<<<<<
 *         except: pass
 * 
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {
      if (unlikely(__pyx_v_self->ob_mem == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(30, 151, __pyx_L6_error)
      }
      __pyx_t_1 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)__pyx_v_base)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 151, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(PyDict_DelItem(((PyObject*)__pyx_v_self->ob_mem), __pyx_t_1) < 0)) __PYX_ERR(30, 151, __pyx_L6_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L11_try_end;
    __pyx_L6_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/Win.pyx":152
 *         with nogil: CHKERR( MPI_Win_detach(self.ob_mpi, base) )
 *         try: del (<dict>self.ob_mem)[<MPI_Aint>base]
 *         except: pass             # <<<<<<<<<<<<<<
 * 
 *     def Free(self):
 */
    /*except:*/ {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L7_exception_handled;
    }
    __pyx_L7_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    __pyx_L11_try_end:;
  }

  /* "mpi4py/MPI/Win.pyx":144
 *         except: pass
 * 
 *     def Detach(self, memory):             # <<<<<<<<<<<<<<
 *         """
 *         Detach a local memory region
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Detach", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_memory);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":154
 *         except: pass
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_23Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_22Free[] = "Win.Free(self)\n\n        Free a window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_23Free(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Free", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Free", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_22Free(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_22Free(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Free", 0);

  /* "mpi4py/MPI/Win.pyx":158
 *         Free a window
 *         """
 *         with nogil: CHKERR( MPI_Win_free(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 *         self.ob_mem = None
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_free((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 158, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":159
 *         """
 *         with nogil: CHKERR( MPI_Win_free(&self.ob_mpi) )
 *         self.ob_mem = None             # <<<<<<<<<<<<<<
 * 
 *     # Window Info
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->ob_mem);
  __Pyx_DECREF(__pyx_v_self->ob_mem);
  __pyx_v_self->ob_mem = Py_None;

  /* "mpi4py/MPI/Win.pyx":154
 *         except: pass
 * 
 *     def Free(self):             # <<<<<<<<<<<<<<
 *         """
 *         Free a window
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":164
 *     # -----------
 * 
 *     def Set_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Set new values for the hints
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_25Set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_24Set_info[] = "Win.Set_info(self, Info info)\n\n        Set new values for the hints\n        associated with a window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_25Set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_info (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_info") < 0)) __PYX_ERR(30, 164, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_info", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 164, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(30, 164, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_24Set_info(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_24Set_info(struct PyMPIWinObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_info", 0);

  /* "mpi4py/MPI/Win.pyx":169
 *         associated with a window
 *         """
 *         with nogil: CHKERR( MPI_Win_set_info(self.ob_mpi, info.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_info(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_set_info(__pyx_v_self->ob_mpi, __pyx_v_info->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 169, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":164
 *     # -----------
 * 
 *     def Set_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Set new values for the hints
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":171
 *         with nogil: CHKERR( MPI_Win_set_info(self.ob_mpi, info.ob_mpi) )
 * 
 *     def Get_info(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the hints for a windows
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_27Get_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_26Get_info[] = "Win.Get_info(self)\n\n        Return the hints for a windows\n        that are currently in use\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_27Get_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_info (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_info", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_info", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_26Get_info(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_26Get_info(struct PyMPIWinObject *__pyx_v_self) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_info", 0);

  /* "mpi4py/MPI/Win.pyx":176
 *         that are currently in use
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_get_info( self.ob_mpi, &info.ob_mpi) )
 *         return info
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 176, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":177
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_Win_get_info( self.ob_mpi, &info.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return info
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_info(__pyx_v_self->ob_mpi, (&__pyx_v_info->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 177, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":178
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_Win_get_info( self.ob_mpi, &info.ob_mpi) )
 *         return info             # <<<<<<<<<<<<<<
 * 
 *     property info:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = ((PyObject *)__pyx_v_info);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":171
 *         with nogil: CHKERR( MPI_Win_set_info(self.ob_mpi, info.ob_mpi) )
 * 
 *     def Get_info(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the hints for a windows
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":182
 *     property info:
 *         """window info"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_info()
 *         def __set__(self, info):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_4info_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_4info_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_4info___get__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_4info___get__(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Win.pyx":183
 *         """window info"""
 *         def __get__(self):
 *             return self.Get_info()             # <<<<<<<<<<<<<<
 *         def __set__(self, info):
 *             self.Set_info(info)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":182
 *     property info:
 *         """window info"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_info()
 *         def __set__(self, info):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.info.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":184
 *         def __get__(self):
 *             return self.Get_info()
 *         def __set__(self, info):             # <<<<<<<<<<<<<<
 *             self.Set_info(info)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_3Win_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_info); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_3Win_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_4info_2__set__(((struct PyMPIWinObject *)__pyx_v_self), ((PyObject *)__pyx_v_info));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_3Win_4info_2__set__(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Win.pyx":185
 *             return self.Get_info()
 *         def __set__(self, info):
 *             self.Set_info(info)             # <<<<<<<<<<<<<<
 * 
 *     # Window Group
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_info) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_info);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":184
 *         def __get__(self):
 *             return self.Get_info()
 *         def __set__(self, info):             # <<<<<<<<<<<<<<
 *             self.Set_info(info)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.info.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":190
 *     # -------------
 * 
 *     def Get_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a duplicate of the group of the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_29Get_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_28Get_group[] = "Win.Get_group(self)\n\n        Return a duplicate of the group of the\n        communicator used to create the window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_29Get_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_group (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_group", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_group", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_28Get_group(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_28Get_group(struct PyMPIWinObject *__pyx_v_self) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Get_group", 0);

  /* "mpi4py/MPI/Win.pyx":195
 *         communicator used to create the window
 *         """
 *         cdef Group group = Group()             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_get_group(self.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":196
 *         """
 *         cdef Group group = Group()
 *         with nogil: CHKERR( MPI_Win_get_group(self.ob_mpi, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_group(__pyx_v_self->ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 196, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":197
 *         cdef Group group = Group()
 *         with nogil: CHKERR( MPI_Win_get_group(self.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     property group:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":190
 *     # -------------
 * 
 *     def Get_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return a duplicate of the group of the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":201
 *     property group:
 *         """window group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_group()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5group_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_5group___get__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_5group___get__(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Win.pyx":202
 *         """window group"""
 *         def __get__(self):
 *             return self.Get_group()             # <<<<<<<<<<<<<<
 * 
 *     # Window Attributes
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":201
 *     property group:
 *         """window group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_group()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.group.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":207
 *     # -----------------
 * 
 *     def Get_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve attribute value by key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_31Get_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_30Get_attr[] = "Win.Get_attr(self, int keyval)\n\n        Retrieve attribute value by key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_31Get_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_attr") < 0)) __PYX_ERR(30, 207, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 207, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_attr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 207, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_30Get_attr(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_30Get_attr(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_keyval) {
  void *__pyx_v_attrval;
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Get_attr", 0);

  /* "mpi4py/MPI/Win.pyx":211
 *         Retrieve attribute value by key
 *         """
 *         cdef void *attrval = NULL             # <<<<<<<<<<<<<<
 *         cdef int flag = 0
 *         CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 */
  __pyx_v_attrval = NULL;

  /* "mpi4py/MPI/Win.pyx":212
 *         """
 *         cdef void *attrval = NULL
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if flag == 0: return None
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Win.pyx":213
 *         cdef void *attrval = NULL
 *         cdef int flag = 0
 *         CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval, &attrval, &flag) )             # <<<<<<<<<<<<<<
 *         if flag == 0: return None
 *         if attrval == NULL: return 0
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval, (&__pyx_v_attrval), (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 213, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":214
 *         cdef int flag = 0
 *         CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if flag == 0: return None             # <<<<<<<<<<<<<<
 *         if attrval == NULL: return 0
 *         # MPI-2 predefined attribute keyvals
 */
  __pyx_t_2 = ((__pyx_v_flag == 0) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":215
 *         CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval, &attrval, &flag) )
 *         if flag == 0: return None
 *         if attrval == NULL: return 0             # <<<<<<<<<<<<<<
 *         # MPI-2 predefined attribute keyvals
 *         if keyval == MPI_WIN_BASE:
 */
  __pyx_t_2 = ((__pyx_v_attrval == NULL) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_0);
    __pyx_r = __pyx_int_0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":217
 *         if attrval == NULL: return 0
 *         # MPI-2 predefined attribute keyvals
 *         if keyval == MPI_WIN_BASE:             # <<<<<<<<<<<<<<
 *             return <MPI_Aint>attrval
 *         elif keyval == MPI_WIN_SIZE:
 */
  __pyx_t_2 = ((__pyx_v_keyval == MPI_WIN_BASE) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Win.pyx":218
 *         # MPI-2 predefined attribute keyvals
 *         if keyval == MPI_WIN_BASE:
 *             return <MPI_Aint>attrval             # <<<<<<<<<<<<<<
 *         elif keyval == MPI_WIN_SIZE:
 *             return (<MPI_Aint*>attrval)[0]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)__pyx_v_attrval)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Win.pyx":217
 *         if attrval == NULL: return 0
 *         # MPI-2 predefined attribute keyvals
 *         if keyval == MPI_WIN_BASE:             # <<<<<<<<<<<<<<
 *             return <MPI_Aint>attrval
 *         elif keyval == MPI_WIN_SIZE:
 */
  }

  /* "mpi4py/MPI/Win.pyx":219
 *         if keyval == MPI_WIN_BASE:
 *             return <MPI_Aint>attrval
 *         elif keyval == MPI_WIN_SIZE:             # <<<<<<<<<<<<<<
 *             return (<MPI_Aint*>attrval)[0]
 *         elif keyval == MPI_WIN_DISP_UNIT:
 */
  __pyx_t_2 = ((__pyx_v_keyval == MPI_WIN_SIZE) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Win.pyx":220
 *             return <MPI_Aint>attrval
 *         elif keyval == MPI_WIN_SIZE:
 *             return (<MPI_Aint*>attrval)[0]             # <<<<<<<<<<<<<<
 *         elif keyval == MPI_WIN_DISP_UNIT:
 *             return (<int*>attrval)[0]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint((((MPI_Aint *)__pyx_v_attrval)[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Win.pyx":219
 *         if keyval == MPI_WIN_BASE:
 *             return <MPI_Aint>attrval
 *         elif keyval == MPI_WIN_SIZE:             # <<<<<<<<<<<<<<
 *             return (<MPI_Aint*>attrval)[0]
 *         elif keyval == MPI_WIN_DISP_UNIT:
 */
  }

  /* "mpi4py/MPI/Win.pyx":221
 *         elif keyval == MPI_WIN_SIZE:
 *             return (<MPI_Aint*>attrval)[0]
 *         elif keyval == MPI_WIN_DISP_UNIT:             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         # MPI-3 predefined attribute keyvals
 */
  __pyx_t_2 = ((__pyx_v_keyval == MPI_WIN_DISP_UNIT) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Win.pyx":222
 *             return (<MPI_Aint*>attrval)[0]
 *         elif keyval == MPI_WIN_DISP_UNIT:
 *             return (<int*>attrval)[0]             # <<<<<<<<<<<<<<
 *         # MPI-3 predefined attribute keyvals
 *         elif keyval == MPI_WIN_CREATE_FLAVOR:
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_int((((int *)__pyx_v_attrval)[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Win.pyx":221
 *         elif keyval == MPI_WIN_SIZE:
 *             return (<MPI_Aint*>attrval)[0]
 *         elif keyval == MPI_WIN_DISP_UNIT:             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         # MPI-3 predefined attribute keyvals
 */
  }

  /* "mpi4py/MPI/Win.pyx":224
 *             return (<int*>attrval)[0]
 *         # MPI-3 predefined attribute keyvals
 *         elif keyval == MPI_WIN_CREATE_FLAVOR:             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         elif keyval == MPI_WIN_MODEL:
 */
  __pyx_t_2 = ((__pyx_v_keyval == MPI_WIN_CREATE_FLAVOR) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Win.pyx":225
 *         # MPI-3 predefined attribute keyvals
 *         elif keyval == MPI_WIN_CREATE_FLAVOR:
 *             return (<int*>attrval)[0]             # <<<<<<<<<<<<<<
 *         elif keyval == MPI_WIN_MODEL:
 *             return (<int*>attrval)[0]
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_int((((int *)__pyx_v_attrval)[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Win.pyx":224
 *             return (<int*>attrval)[0]
 *         # MPI-3 predefined attribute keyvals
 *         elif keyval == MPI_WIN_CREATE_FLAVOR:             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         elif keyval == MPI_WIN_MODEL:
 */
  }

  /* "mpi4py/MPI/Win.pyx":226
 *         elif keyval == MPI_WIN_CREATE_FLAVOR:
 *             return (<int*>attrval)[0]
 *         elif keyval == MPI_WIN_MODEL:             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         # user-defined attribute keyval
 */
  __pyx_t_2 = ((__pyx_v_keyval == MPI_WIN_MODEL) != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/Win.pyx":227
 *             return (<int*>attrval)[0]
 *         elif keyval == MPI_WIN_MODEL:
 *             return (<int*>attrval)[0]             # <<<<<<<<<<<<<<
 *         # user-defined attribute keyval
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_int((((int *)__pyx_v_attrval)[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/Win.pyx":226
 *         elif keyval == MPI_WIN_CREATE_FLAVOR:
 *             return (<int*>attrval)[0]
 *         elif keyval == MPI_WIN_MODEL:             # <<<<<<<<<<<<<<
 *             return (<int*>attrval)[0]
 *         # user-defined attribute keyval
 */
  }

  /* "mpi4py/MPI/Win.pyx":229
 *             return (<int*>attrval)[0]
 *         # user-defined attribute keyval
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)             # <<<<<<<<<<<<<<
 * 
 *     def Set_attr(self, int keyval, object attrval):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_get(__pyx_v_self->ob_mpi, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":207
 *     # -----------------
 * 
 *     def Get_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Retrieve attribute value by key
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":231
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 * 
 *     def Set_attr(self, int keyval, object attrval):             # <<<<<<<<<<<<<<
 *         """
 *         Store attribute value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_33Set_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_32Set_attr[] = "Win.Set_attr(self, int keyval, attrval)\n\n        Store attribute value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_33Set_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_v_attrval = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,&__pyx_n_s_attrval,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_attrval)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Set_attr", 1, 2, 2, 1); __PYX_ERR(30, 231, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_attr") < 0)) __PYX_ERR(30, 231, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 231, __pyx_L3_error)
    __pyx_v_attrval = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_attr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 231, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_32Set_attr(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_keyval, __pyx_v_attrval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_32Set_attr(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_keyval, PyObject *__pyx_v_attrval) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_attr", 0);

  /* "mpi4py/MPI/Win.pyx":235
 *         Store attribute value associated with a key
 *         """
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)             # <<<<<<<<<<<<<<
 * 
 *     def Delete_attr(self, int keyval):
 */
  __pyx_t_1 = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_set(__pyx_v_self->ob_mpi, __pyx_v_keyval, __pyx_v_attrval); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 235, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":231
 *         return PyMPI_attr_get(self.ob_mpi, keyval, attrval)
 * 
 *     def Set_attr(self, int keyval, object attrval):             # <<<<<<<<<<<<<<
 *         """
 *         Store attribute value associated with a key
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":237
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)
 * 
 *     def Delete_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Delete attribute value associated with a key
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_35Delete_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_34Delete_attr[] = "Win.Delete_attr(self, int keyval)\n\n        Delete attribute value associated with a key\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_35Delete_attr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Delete_attr (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Delete_attr") < 0)) __PYX_ERR(30, 237, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 237, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Delete_attr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 237, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Delete_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_34Delete_attr(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_34Delete_attr(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_keyval) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Delete_attr", 0);

  /* "mpi4py/MPI/Win.pyx":241
 *         Delete attribute value associated with a key
 *         """
 *         CHKERR( MPI_Win_delete_attr(self.ob_mpi, keyval) )             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_delete_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 241, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":237
 *         PyMPI_attr_set(self.ob_mpi, keyval, attrval)
 * 
 *     def Delete_attr(self, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Delete attribute value associated with a key
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Delete_attr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":244
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for windows
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_37Create_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_36Create_keyval[] = "Win.Create_keyval(type cls, copy_fn=None, delete_fn=None, nopython=False)\n\n        Create a new attribute key for windows\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_37Create_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_copy_fn = 0;
  PyObject *__pyx_v_delete_fn = 0;
  PyObject *__pyx_v_nopython = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Create_keyval (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_copy_fn,&__pyx_n_s_delete_fn,&__pyx_n_s_nopython,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy_fn);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_delete_fn);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nopython);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Create_keyval") < 0)) __PYX_ERR(30, 244, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_copy_fn = values[0];
    __pyx_v_delete_fn = values[1];
    __pyx_v_nopython = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Create_keyval", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 244, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Create_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_36Create_keyval(((PyTypeObject*)__pyx_v_cls), __pyx_v_copy_fn, __pyx_v_delete_fn, __pyx_v_nopython);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_36Create_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_copy_fn, PyObject *__pyx_v_delete_fn, PyObject *__pyx_v_nopython) {
  PyObject *__pyx_v_state = 0;
  int __pyx_v_keyval;
  MPI_Win_copy_attr_function *__pyx_v__copy;
  MPI_Win_delete_attr_function *__pyx_v__del;
  void *__pyx_v_extra_state;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Create_keyval", 0);

  /* "mpi4py/MPI/Win.pyx":248
 *         Create a new attribute key for windows
 *         """
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)             # <<<<<<<<<<<<<<
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Win_copy_attr_function *_copy = PyMPI_attr_copy_fn
 */
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_copy_fn);
  __Pyx_GIVEREF(__pyx_v_copy_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_copy_fn);
  __Pyx_INCREF(__pyx_v_delete_fn);
  __Pyx_GIVEREF(__pyx_v_delete_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_delete_fn);
  __Pyx_INCREF(__pyx_v_nopython);
  __Pyx_GIVEREF(__pyx_v_nopython);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_nopython);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6mpi4py_3MPI__p_keyval), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_state = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":249
 *         """
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)
 *         cdef int keyval = MPI_KEYVAL_INVALID             # <<<<<<<<<<<<<<
 *         cdef MPI_Win_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Win_delete_attr_function *_del = PyMPI_attr_delete_fn
 */
  __pyx_v_keyval = MPI_KEYVAL_INVALID;

  /* "mpi4py/MPI/Win.pyx":250
 *         cdef object state = _p_keyval(copy_fn, delete_fn, nopython)
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Win_copy_attr_function *_copy = PyMPI_attr_copy_fn             # <<<<<<<<<<<<<<
 *         cdef MPI_Win_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state
 */
  __pyx_v__copy = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_copy_fn;

  /* "mpi4py/MPI/Win.pyx":251
 *         cdef int keyval = MPI_KEYVAL_INVALID
 *         cdef MPI_Win_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Win_delete_attr_function *_del = PyMPI_attr_delete_fn             # <<<<<<<<<<<<<<
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Win_create_keyval(_copy, _del, &keyval, extra_state) )
 */
  __pyx_v__del = __pyx_fuse_2__pyx_f_6mpi4py_3MPI_PyMPI_attr_delete_fn;

  /* "mpi4py/MPI/Win.pyx":252
 *         cdef MPI_Win_copy_attr_function *_copy = PyMPI_attr_copy_fn
 *         cdef MPI_Win_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Win_create_keyval(_copy, _del, &keyval, extra_state) )
 *         win_keyval[keyval] = state
 */
  __pyx_v_extra_state = ((void *)__pyx_v_state);

  /* "mpi4py/MPI/Win.pyx":253
 *         cdef MPI_Win_delete_attr_function *_del = PyMPI_attr_delete_fn
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Win_create_keyval(_copy, _del, &keyval, extra_state) )             # <<<<<<<<<<<<<<
 *         win_keyval[keyval] = state
 *         return keyval
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_create_keyval(__pyx_v__copy, __pyx_v__del, (&__pyx_v_keyval), __pyx_v_extra_state)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 253, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":254
 *         cdef void *extra_state = <void *>state
 *         CHKERR( MPI_Win_create_keyval(_copy, _del, &keyval, extra_state) )
 *         win_keyval[keyval] = state             # <<<<<<<<<<<<<<
 *         return keyval
 * 
 */
  if (unlikely(__pyx_v_6mpi4py_3MPI_win_keyval == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(30, 254, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(PyDict_SetItem(__pyx_v_6mpi4py_3MPI_win_keyval, __pyx_t_2, __pyx_v_state) < 0)) __PYX_ERR(30, 254, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":255
 *         CHKERR( MPI_Win_create_keyval(_copy, _del, &keyval, extra_state) )
 *         win_keyval[keyval] = state
 *         return keyval             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":244
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for windows
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Create_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":258
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for windows
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_39Free_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_38Free_keyval[] = "Win.Free_keyval(type cls, int keyval)\n\n        Free and attribute key for windows\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_39Free_keyval(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_keyval;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free_keyval (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyval,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_keyval)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Free_keyval") < 0)) __PYX_ERR(30, 258, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_keyval = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_keyval == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 258, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Free_keyval", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 258, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Free_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_38Free_keyval(((PyTypeObject*)__pyx_v_cls), __pyx_v_keyval);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_38Free_keyval(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, int __pyx_v_keyval) {
  int __pyx_v_keyval_save;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("Free_keyval", 0);

  /* "mpi4py/MPI/Win.pyx":262
 *         Free and attribute key for windows
 *         """
 *         cdef int keyval_save = keyval             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Win_free_keyval(&keyval) )
 *         try: del win_keyval[keyval_save]
 */
  __pyx_v_keyval_save = __pyx_v_keyval;

  /* "mpi4py/MPI/Win.pyx":263
 *         """
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Win_free_keyval(&keyval) )             # <<<<<<<<<<<<<<
 *         try: del win_keyval[keyval_save]
 *         except KeyError: pass
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_free_keyval((&__pyx_v_keyval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 263, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":264
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Win_free_keyval(&keyval) )
 *         try: del win_keyval[keyval_save]             # <<<<<<<<<<<<<<
 *         except KeyError: pass
 *         return keyval
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {
      if (unlikely(__pyx_v_6mpi4py_3MPI_win_keyval == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(30, 264, __pyx_L3_error)
      }
      __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_keyval_save); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 264, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(PyDict_DelItem(__pyx_v_6mpi4py_3MPI_win_keyval, __pyx_t_5) < 0)) __PYX_ERR(30, 264, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "mpi4py/MPI/Win.pyx":265
 *         CHKERR( MPI_Win_free_keyval(&keyval) )
 *         try: del win_keyval[keyval_save]
 *         except KeyError: pass             # <<<<<<<<<<<<<<
 *         return keyval
 * 
 */
    __pyx_t_1 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_1) {
      __Pyx_ErrRestore(0,0,0);
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "mpi4py/MPI/Win.pyx":264
 *         cdef int keyval_save = keyval
 *         CHKERR( MPI_Win_free_keyval(&keyval) )
 *         try: del win_keyval[keyval_save]             # <<<<<<<<<<<<<<
 *         except KeyError: pass
 *         return keyval
 */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    __pyx_L8_try_end:;
  }

  /* "mpi4py/MPI/Win.pyx":266
 *         try: del win_keyval[keyval_save]
 *         except KeyError: pass
 *         return keyval             # <<<<<<<<<<<<<<
 * 
 *     property attrs:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_keyval); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":258
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for windows
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Free_keyval", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":270
 *     property attrs:
 *         "window attributes"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef void *base = NULL
 *             cdef MPI_Aint size = 0
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5attrs_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5attrs_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_5attrs___get__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_5attrs___get__(struct PyMPIWinObject *__pyx_v_self) {
  void *__pyx_v_base;
  MPI_Aint __pyx_v_size;
  int __pyx_v_disp_unit;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Win.pyx":271
 *         "window attributes"
 *         def __get__(self):
 *             cdef void *base = NULL             # <<<<<<<<<<<<<<
 *             cdef MPI_Aint size = 0
 *             cdef int disp_unit = 1
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":272
 *         def __get__(self):
 *             cdef void *base = NULL
 *             cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *             cdef int disp_unit = 1
 *             win_get_base(self.ob_mpi, &base)
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":273
 *             cdef void *base = NULL
 *             cdef MPI_Aint size = 0
 *             cdef int disp_unit = 1             # <<<<<<<<<<<<<<
 *             win_get_base(self.ob_mpi, &base)
 *             win_get_size(self.ob_mpi, &size)
 */
  __pyx_v_disp_unit = 1;

  /* "mpi4py/MPI/Win.pyx":274
 *             cdef MPI_Aint size = 0
 *             cdef int disp_unit = 1
 *             win_get_base(self.ob_mpi, &base)             # <<<<<<<<<<<<<<
 *             win_get_size(self.ob_mpi, &size)
 *             win_get_unit(self.ob_mpi, &disp_unit)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_win_get_base(__pyx_v_self->ob_mpi, (&__pyx_v_base)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 274, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":275
 *             cdef int disp_unit = 1
 *             win_get_base(self.ob_mpi, &base)
 *             win_get_size(self.ob_mpi, &size)             # <<<<<<<<<<<<<<
 *             win_get_unit(self.ob_mpi, &disp_unit)
 *             return (<MPI_Aint>base, size, disp_unit)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_win_get_size(__pyx_v_self->ob_mpi, (&__pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 275, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":276
 *             win_get_base(self.ob_mpi, &base)
 *             win_get_size(self.ob_mpi, &size)
 *             win_get_unit(self.ob_mpi, &disp_unit)             # <<<<<<<<<<<<<<
 *             return (<MPI_Aint>base, size, disp_unit)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_win_get_unit(__pyx_v_self->ob_mpi, (&__pyx_v_disp_unit)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 276, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":277
 *             win_get_size(self.ob_mpi, &size)
 *             win_get_unit(self.ob_mpi, &disp_unit)
 *             return (<MPI_Aint>base, size, disp_unit)             # <<<<<<<<<<<<<<
 * 
 *     property flavor:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)__pyx_v_base)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_disp_unit); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":270
 *     property attrs:
 *         "window attributes"
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef void *base = NULL
 *             cdef MPI_Aint size = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("mpi4py.MPI.Win.attrs.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":281
 *     property flavor:
 *         """window create flavor"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int keyval = MPI_WIN_CREATE_FLAVOR
 *             cdef int *attrval = NULL
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_6flavor_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_6flavor_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_6flavor___get__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_6flavor___get__(struct PyMPIWinObject *__pyx_v_self) {
  int __pyx_v_keyval;
  int *__pyx_v_attrval;
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Win.pyx":282
 *         """window create flavor"""
 *         def __get__(self):
 *             cdef int keyval = MPI_WIN_CREATE_FLAVOR             # <<<<<<<<<<<<<<
 *             cdef int *attrval = NULL
 *             cdef int flag = 0
 */
  __pyx_v_keyval = MPI_WIN_CREATE_FLAVOR;

  /* "mpi4py/MPI/Win.pyx":283
 *         def __get__(self):
 *             cdef int keyval = MPI_WIN_CREATE_FLAVOR
 *             cdef int *attrval = NULL             # <<<<<<<<<<<<<<
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:
 */
  __pyx_v_attrval = NULL;

  /* "mpi4py/MPI/Win.pyx":284
 *             cdef int keyval = MPI_WIN_CREATE_FLAVOR
 *             cdef int *attrval = NULL
 *             cdef int flag = 0             # <<<<<<<<<<<<<<
 *             if keyval != MPI_KEYVAL_INVALID:
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Win.pyx":285
 *             cdef int *attrval = NULL
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 *                                          <void*>&attrval, &flag) )
 */
  __pyx_t_1 = ((__pyx_v_keyval != MPI_KEYVAL_INVALID) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Win.pyx":286
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,             # <<<<<<<<<<<<<<
 *                                          <void*>&attrval, &flag) )
 *                 if flag and attrval != NULL: return attrval[0]
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval, ((void *)(&__pyx_v_attrval)), (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 286, __pyx_L1_error)

    /* "mpi4py/MPI/Win.pyx":288
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 *                                          <void*>&attrval, &flag) )
 *                 if flag and attrval != NULL: return attrval[0]             # <<<<<<<<<<<<<<
 *             return MPI_WIN_FLAVOR_CREATE
 * 
 */
    __pyx_t_3 = (__pyx_v_flag != 0);
    if (__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_3 = ((__pyx_v_attrval != NULL) != 0);
    __pyx_t_1 = __pyx_t_3;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_1) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_attrval[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/Win.pyx":285
 *             cdef int *attrval = NULL
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 *                                          <void*>&attrval, &flag) )
 */
  }

  /* "mpi4py/MPI/Win.pyx":289
 *                                          <void*>&attrval, &flag) )
 *                 if flag and attrval != NULL: return attrval[0]
 *             return MPI_WIN_FLAVOR_CREATE             # <<<<<<<<<<<<<<
 * 
 *     property model:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyInt_From_int(MPI_WIN_FLAVOR_CREATE); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":281
 *     property flavor:
 *         """window create flavor"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int keyval = MPI_WIN_CREATE_FLAVOR
 *             cdef int *attrval = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Win.flavor.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":293
 *     property model:
 *         """window memory model"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int keyval = MPI_WIN_MODEL
 *             cdef int *attrval = NULL
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5model_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_5model_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_5model___get__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_5model___get__(struct PyMPIWinObject *__pyx_v_self) {
  int __pyx_v_keyval;
  int *__pyx_v_attrval;
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Win.pyx":294
 *         """window memory model"""
 *         def __get__(self):
 *             cdef int keyval = MPI_WIN_MODEL             # <<<<<<<<<<<<<<
 *             cdef int *attrval = NULL
 *             cdef int flag = 0
 */
  __pyx_v_keyval = MPI_WIN_MODEL;

  /* "mpi4py/MPI/Win.pyx":295
 *         def __get__(self):
 *             cdef int keyval = MPI_WIN_MODEL
 *             cdef int *attrval = NULL             # <<<<<<<<<<<<<<
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:
 */
  __pyx_v_attrval = NULL;

  /* "mpi4py/MPI/Win.pyx":296
 *             cdef int keyval = MPI_WIN_MODEL
 *             cdef int *attrval = NULL
 *             cdef int flag = 0             # <<<<<<<<<<<<<<
 *             if keyval != MPI_KEYVAL_INVALID:
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Win.pyx":297
 *             cdef int *attrval = NULL
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 *                                          <void*>&attrval, &flag) )
 */
  __pyx_t_1 = ((__pyx_v_keyval != MPI_KEYVAL_INVALID) != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/Win.pyx":298
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,             # <<<<<<<<<<<<<<
 *                                          <void*>&attrval, &flag) )
 *                 if flag and attrval != NULL: return attrval[0]
 */
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_attr(__pyx_v_self->ob_mpi, __pyx_v_keyval, ((void *)(&__pyx_v_attrval)), (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 298, __pyx_L1_error)

    /* "mpi4py/MPI/Win.pyx":300
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 *                                          <void*>&attrval, &flag) )
 *                 if flag and attrval != NULL: return attrval[0]             # <<<<<<<<<<<<<<
 *             return MPI_WIN_SEPARATE
 * 
 */
    __pyx_t_3 = (__pyx_v_flag != 0);
    if (__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_3 = ((__pyx_v_attrval != NULL) != 0);
    __pyx_t_1 = __pyx_t_3;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_1) {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_attrval[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/Win.pyx":297
 *             cdef int *attrval = NULL
 *             cdef int flag = 0
 *             if keyval != MPI_KEYVAL_INVALID:             # <<<<<<<<<<<<<<
 *                 CHKERR( MPI_Win_get_attr(self.ob_mpi, keyval,
 *                                          <void*>&attrval, &flag) )
 */
  }

  /* "mpi4py/MPI/Win.pyx":301
 *                                          <void*>&attrval, &flag) )
 *                 if flag and attrval != NULL: return attrval[0]
 *             return MPI_WIN_SEPARATE             # <<<<<<<<<<<<<<
 * 
 *     def tomemory(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyInt_From_int(MPI_WIN_SEPARATE); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":293
 *     property model:
 *         """window memory model"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             cdef int keyval = MPI_WIN_MODEL
 *             cdef int *attrval = NULL
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Win.model.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":303
 *             return MPI_WIN_SEPARATE
 * 
 *     def tomemory(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return window memory buffer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_41tomemory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_40tomemory[] = "Win.tomemory(self)\n\n        Return window memory buffer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_41tomemory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tomemory (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("tomemory", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "tomemory", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_40tomemory(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_40tomemory(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("tomemory", 0);

  /* "mpi4py/MPI/Win.pyx":307
 *         Return window memory buffer
 *         """
 *         return getbuffer(self, 0, 1)             # <<<<<<<<<<<<<<
 * 
 *     # buffer interface (PEP 3118)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_getbuffer(((PyObject *)__pyx_v_self), 0, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":303
 *             return MPI_WIN_SEPARATE
 * 
 *     def tomemory(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return window memory buffer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.tomemory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":311
 *     # buffer interface (PEP 3118)
 * 
 *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         cdef void *base = NULL
 */

/* Python wrapper */
static CYTHON_UNUSED int __pyx_pw_6mpi4py_3MPI_3Win_43__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags); /*proto*/
static CYTHON_UNUSED int __pyx_pw_6mpi4py_3MPI_3Win_43__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_42__getbuffer__(((struct PyMPIWinObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_view), ((int)__pyx_v_flags));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_3Win_42__getbuffer__(struct PyMPIWinObject *__pyx_v_self, Py_buffer *__pyx_v_view, int __pyx_v_flags) {
  void *__pyx_v_base;
  MPI_Aint __pyx_v_size;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  if (__pyx_v_view == NULL) {
    PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
    return -1;
  }
  __Pyx_RefNannySetupContext("__getbuffer__", 0);
  __pyx_v_view->obj = NULL;

  /* "mpi4py/MPI/Win.pyx":312
 * 
 *     def __getbuffer__(self, Py_buffer *view, int flags):
 *         if view.obj == Py_None: Py_CLEAR(view.obj)             # <<<<<<<<<<<<<<
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0
 */
  __pyx_t_1 = ((__pyx_v_view->obj == Py_None) != 0);
  if (__pyx_t_1) {
    Py_CLEAR(__pyx_v_view->obj);
  }

  /* "mpi4py/MPI/Win.pyx":313
 *     def __getbuffer__(self, Py_buffer *view, int flags):
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         cdef void *base = NULL             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, &base)
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/Win.pyx":314
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         win_get_base(self.ob_mpi, &base)
 *         win_get_size(self.ob_mpi, &size)
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":315
 *         cdef void *base = NULL
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, &base)             # <<<<<<<<<<<<<<
 *         win_get_size(self.ob_mpi, &size)
 *         PyBuffer_FillInfo(view, self, base, size, 0, flags)
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_win_get_base(__pyx_v_self->ob_mpi, (&__pyx_v_base)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 315, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":316
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, &base)
 *         win_get_size(self.ob_mpi, &size)             # <<<<<<<<<<<<<<
 *         PyBuffer_FillInfo(view, self, base, size, 0, flags)
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_win_get_size(__pyx_v_self->ob_mpi, (&__pyx_v_size)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 316, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":317
 *         win_get_base(self.ob_mpi, &base)
 *         win_get_size(self.ob_mpi, &size)
 *         PyBuffer_FillInfo(view, self, base, size, 0, flags)             # <<<<<<<<<<<<<<
 * 
 *     # buffer interface (legacy)
 */
  __pyx_t_2 = PyBuffer_FillInfo(__pyx_v_view, ((PyObject *)__pyx_v_self), __pyx_v_base, __pyx_v_size, 0, __pyx_v_flags); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 317, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":311
 *     # buffer interface (PEP 3118)
 * 
 *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
 *         if view.obj == Py_None: Py_CLEAR(view.obj)
 *         cdef void *base = NULL
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  Py_CLEAR(__pyx_v_view->obj);
  goto __pyx_L2;
  __pyx_L0:;
  __pyx_L2:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":321
 *     # buffer interface (legacy)
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
 *         if lenp == NULL: return 1
 *         cdef MPI_Aint size = 0
 */

/* Python wrapper */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_3Win_45__getsegcount__(PyObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_3Win_45__getsegcount__(PyObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getsegcount__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_44__getsegcount__(((struct PyMPIWinObject *)__pyx_v_self), ((Py_ssize_t *)__pyx_v_lenp));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_3Win_44__getsegcount__(struct PyMPIWinObject *__pyx_v_self, Py_ssize_t *__pyx_v_lenp) {
  MPI_Aint __pyx_v_size;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__getsegcount__", 0);

  /* "mpi4py/MPI/Win.pyx":322
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 *         if lenp == NULL: return 1             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         win_get_size(self.ob_mpi, &size)
 */
  __pyx_t_1 = ((__pyx_v_lenp == NULL) != 0);
  if (__pyx_t_1) {
    __pyx_r = 1;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/Win.pyx":323
 *     def __getsegcount__(self, Py_ssize_t *lenp):
 *         if lenp == NULL: return 1
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         win_get_size(self.ob_mpi, &size)
 *         lenp[0] = <Py_ssize_t>size
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":324
 *         if lenp == NULL: return 1
 *         cdef MPI_Aint size = 0
 *         win_get_size(self.ob_mpi, &size)             # <<<<<<<<<<<<<<
 *         lenp[0] = <Py_ssize_t>size
 *         return 1
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_win_get_size(__pyx_v_self->ob_mpi, (&__pyx_v_size)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 324, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":325
 *         cdef MPI_Aint size = 0
 *         win_get_size(self.ob_mpi, &size)
 *         lenp[0] = <Py_ssize_t>size             # <<<<<<<<<<<<<<
 *         return 1
 * 
 */
  (__pyx_v_lenp[0]) = ((Py_ssize_t)__pyx_v_size);

  /* "mpi4py/MPI/Win.pyx":326
 *         win_get_size(self.ob_mpi, &size)
 *         lenp[0] = <Py_ssize_t>size
 *         return 1             # <<<<<<<<<<<<<<
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **bufp):
 */
  __pyx_r = 1;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":321
 *     # buffer interface (legacy)
 * 
 *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
 *         if lenp == NULL: return 1
 *         cdef MPI_Aint size = 0
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.__getsegcount__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "mpi4py/MPI/Win.pyx":328
 *         return 1
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **bufp):             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */

/* Python wrapper */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_3Win_47__getreadbuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_3Win_47__getreadbuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getreadbuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_46__getreadbuffer__(((struct PyMPIWinObject *)__pyx_v_self), ((Py_ssize_t)__pyx_v_idx), ((void **)__pyx_v_bufp));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_3Win_46__getreadbuffer__(struct PyMPIWinObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp) {
  MPI_Aint __pyx_v_size;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("__getreadbuffer__", 0);

  /* "mpi4py/MPI/Win.pyx":329
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **bufp):
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0
 */
  __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/Win.pyx":330
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **bufp):
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, bufp)
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 330, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(30, 330, __pyx_L1_error)

    /* "mpi4py/MPI/Win.pyx":329
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **bufp):
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0
 */
  }

  /* "mpi4py/MPI/Win.pyx":331
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         win_get_base(self.ob_mpi, bufp)
 *         win_get_size(self.ob_mpi, &size)
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":332
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, bufp)             # <<<<<<<<<<<<<<
 *         win_get_size(self.ob_mpi, &size)
 *         return <Py_ssize_t>size
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_get_base(__pyx_v_self->ob_mpi, __pyx_v_bufp); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 332, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":333
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, bufp)
 *         win_get_size(self.ob_mpi, &size)             # <<<<<<<<<<<<<<
 *         return <Py_ssize_t>size
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_get_size(__pyx_v_self->ob_mpi, (&__pyx_v_size)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 333, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":334
 *         win_get_base(self.ob_mpi, bufp)
 *         win_get_size(self.ob_mpi, &size)
 *         return <Py_ssize_t>size             # <<<<<<<<<<<<<<
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **bufp):
 */
  __pyx_r = ((Py_ssize_t)__pyx_v_size);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":328
 *         return 1
 * 
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **bufp):             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.__getreadbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "mpi4py/MPI/Win.pyx":336
 *         return <Py_ssize_t>size
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **bufp):             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */

/* Python wrapper */
#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_3Win_49__getwritebuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp); /*proto*/
static Py_ssize_t __pyx_pw_6mpi4py_3MPI_3Win_49__getwritebuffer__(PyObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getwritebuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_48__getwritebuffer__(((struct PyMPIWinObject *)__pyx_v_self), ((Py_ssize_t)__pyx_v_idx), ((void **)__pyx_v_bufp));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

#if PY_MAJOR_VERSION < 3
static Py_ssize_t __pyx_pf_6mpi4py_3MPI_3Win_48__getwritebuffer__(struct PyMPIWinObject *__pyx_v_self, Py_ssize_t __pyx_v_idx, void **__pyx_v_bufp) {
  MPI_Aint __pyx_v_size;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("__getwritebuffer__", 0);

  /* "mpi4py/MPI/Win.pyx":337
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **bufp):
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0
 */
  __pyx_t_1 = ((__pyx_v_idx != 0) != 0);
  if (unlikely(__pyx_t_1)) {

    /* "mpi4py/MPI/Win.pyx":338
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **bufp):
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, bufp)
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 338, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(30, 338, __pyx_L1_error)

    /* "mpi4py/MPI/Win.pyx":337
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **bufp):
 *         if idx != 0:             # <<<<<<<<<<<<<<
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0
 */
  }

  /* "mpi4py/MPI/Win.pyx":339
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0             # <<<<<<<<<<<<<<
 *         win_get_base(self.ob_mpi, bufp)
 *         win_get_size(self.ob_mpi, &size)
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/Win.pyx":340
 *             raise SystemError("accessing non-existent buffer segment")
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, bufp)             # <<<<<<<<<<<<<<
 *         win_get_size(self.ob_mpi, &size)
 *         return <Py_ssize_t>size
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_get_base(__pyx_v_self->ob_mpi, __pyx_v_bufp); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 340, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":341
 *         cdef MPI_Aint size = 0
 *         win_get_base(self.ob_mpi, bufp)
 *         win_get_size(self.ob_mpi, &size)             # <<<<<<<<<<<<<<
 *         return <Py_ssize_t>size
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_win_get_size(__pyx_v_self->ob_mpi, (&__pyx_v_size)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 341, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":342
 *         win_get_base(self.ob_mpi, bufp)
 *         win_get_size(self.ob_mpi, &size)
 *         return <Py_ssize_t>size             # <<<<<<<<<<<<<<
 * 
 *     # Communication Operations
 */
  __pyx_r = ((Py_ssize_t)__pyx_v_size);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":336
 *         return <Py_ssize_t>size
 * 
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **bufp):             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.__getwritebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if PY_MAJOR_VERSION < 3)*/

/* "mpi4py/MPI/Win.pyx":347
 *     # ------------------------
 * 
 *     def Put(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Put data into a memory window on a remote process.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_51Put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_50Put[] = "Win.Put(self, origin, int target_rank, target=None)\n\n        Put data into a memory window on a remote process.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_51Put(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Put (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_target_rank,&__pyx_n_s_target,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Put", 0, 2, 3, 1); __PYX_ERR(30, 347, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Put") < 0)) __PYX_ERR(30, 347, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 347, __pyx_L3_error)
    __pyx_v_target = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Put", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 347, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Put", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_50Put(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_50Put(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Put", 0);

  /* "mpi4py/MPI/Win.pyx":351
 *         Put data into a memory window on a remote process.
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_put(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Put(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":352
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_put(origin, target_rank, target)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Put(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_put(__pyx_v_msg, __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 352, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":353
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_put(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Put(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":357
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get(self, origin, int target_rank, target=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Put(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 353, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":353
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_put(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Put(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":347
 *     # ------------------------
 * 
 *     def Put(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Put data into a memory window on a remote process.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Put", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":359
 *             self.ob_mpi) )
 * 
 *     def Get(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Get data from a memory window on a remote process.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_53Get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_52Get[] = "Win.Get(self, origin, int target_rank, target=None)\n\n        Get data from a memory window on a remote process.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_53Get(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_target_rank,&__pyx_n_s_target,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Get", 0, 2, 3, 1); __PYX_ERR(30, 359, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get") < 0)) __PYX_ERR(30, 359, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 359, __pyx_L3_error)
    __pyx_v_target = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 359, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_52Get(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_52Get(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Get", 0);

  /* "mpi4py/MPI/Win.pyx":363
 *         Get data from a memory window on a remote process.
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_get(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Get(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":364
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get(origin, target_rank, target)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Get(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get(__pyx_v_msg, __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 364, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":365
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Get(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":369
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Accumulate(self, origin, int target_rank,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 365, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":365
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Get(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":359
 *             self.ob_mpi) )
 * 
 *     def Get(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Get data from a memory window on a remote process.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":371
 *             self.ob_mpi) )
 * 
 *     def Accumulate(self, origin, int target_rank,             # <<<<<<<<<<<<<<
 *                    target=None, Op op=SUM):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_55Accumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_54Accumulate[] = "Win.Accumulate(self, origin, int target_rank, target=None, Op op=SUM)\n\n        Accumulate data into the target process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_55Accumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Accumulate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_target_rank,&__pyx_n_s_target,&__pyx_n_s_op,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Win.pyx":372
 * 
 *     def Accumulate(self, origin, int target_rank,
 *                    target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Accumulate data into the target process
 */
    values[2] = ((PyObject *)Py_None);
    values[3] = (PyObject *)__pyx_k__114;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Accumulate", 0, 2, 4, 1); __PYX_ERR(30, 371, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Accumulate") < 0)) __PYX_ERR(30, 371, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 371, __pyx_L3_error)
    __pyx_v_target = values[2];
    __pyx_v_op = ((struct PyMPIOpObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Accumulate", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 371, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(30, 372, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_54Accumulate(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target, __pyx_v_op);

  /* "mpi4py/MPI/Win.pyx":371
 *             self.ob_mpi) )
 * 
 *     def Accumulate(self, origin, int target_rank,             # <<<<<<<<<<<<<<
 *                    target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_54Accumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Accumulate", 0);

  /* "mpi4py/MPI/Win.pyx":376
 *         Accumulate data into the target process
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_acc(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Accumulate(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":377
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_acc(origin, target_rank, target)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Accumulate(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_acc(__pyx_v_msg, __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 377, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":378
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_acc(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Accumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":382
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_accumulate(self, origin, result, int target_rank,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Accumulate(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 378, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":378
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_acc(origin, target_rank, target)
 *         with nogil: CHKERR( MPI_Accumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":371
 *             self.ob_mpi) )
 * 
 *     def Accumulate(self, origin, int target_rank,             # <<<<<<<<<<<<<<
 *                    target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":384
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Get_accumulate(self, origin, result, int target_rank,             # <<<<<<<<<<<<<<
 *                        target=None, Op op=SUM):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_57Get_accumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_56Get_accumulate[] = "Win.Get_accumulate(self, origin, result, int target_rank, target=None, Op op=SUM)\n\n        Fetch-and-accumulate data into the target process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_57Get_accumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_result = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_accumulate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_result,&__pyx_n_s_target_rank,&__pyx_n_s_target,&__pyx_n_s_op,0};
    PyObject* values[5] = {0,0,0,0,0};

    /* "mpi4py/MPI/Win.pyx":385
 * 
 *     def Get_accumulate(self, origin, result, int target_rank,
 *                        target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Fetch-and-accumulate data into the target process
 */
    values[3] = ((PyObject *)Py_None);
    values[4] = (PyObject *)__pyx_k__115;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Get_accumulate", 0, 3, 5, 1); __PYX_ERR(30, 384, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Get_accumulate", 0, 3, 5, 2); __PYX_ERR(30, 384, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_accumulate") < 0)) __PYX_ERR(30, 384, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_result = values[1];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 384, __pyx_L3_error)
    __pyx_v_target = values[3];
    __pyx_v_op = ((struct PyMPIOpObject *)values[4]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_accumulate", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 384, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(30, 385, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_56Get_accumulate(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target, __pyx_v_op);

  /* "mpi4py/MPI/Win.pyx":384
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Get_accumulate(self, origin, result, int target_rank,             # <<<<<<<<<<<<<<
 *                        target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_56Get_accumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Get_accumulate", 0);

  /* "mpi4py/MPI/Win.pyx":389
 *         Fetch-and-accumulate data into the target process
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         with nogil: CHKERR( MPI_Get_accumulate(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":390
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get_acc(origin, result, target_rank, target)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Get_accumulate(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get_acc(__pyx_v_msg, __pyx_v_origin, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 390, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":391
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         with nogil: CHKERR( MPI_Get_accumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             msg.raddr, msg.rcount, msg.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":396
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Fetch_and_op(self, origin, result,int target_rank,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_accumulate(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_msg->raddr, __pyx_v_msg->rcount, __pyx_v_msg->rtype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 391, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":391
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         with nogil: CHKERR( MPI_Get_accumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             msg.raddr, msg.rcount, msg.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":384
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Get_accumulate(self, origin, result, int target_rank,             # <<<<<<<<<<<<<<
 *                        target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":398
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Fetch_and_op(self, origin, result,int target_rank,             # <<<<<<<<<<<<<<
 *                      Aint target_disp=0, Op op=SUM):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_59Fetch_and_op(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_58Fetch_and_op[] = "Win.Fetch_and_op(self, origin, result, int target_rank, Aint target_disp=0, Op op=SUM)\n\n        Perform one-sided read-modify-write\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_59Fetch_and_op(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_result = 0;
  int __pyx_v_target_rank;
  MPI_Aint __pyx_v_target_disp;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Fetch_and_op (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_result,&__pyx_n_s_target_rank,&__pyx_n_s_target_disp,&__pyx_n_s_op,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[4] = (PyObject *)__pyx_k__116;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Fetch_and_op", 0, 3, 5, 1); __PYX_ERR(30, 398, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Fetch_and_op", 0, 3, 5, 2); __PYX_ERR(30, 398, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_disp);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Fetch_and_op") < 0)) __PYX_ERR(30, 398, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_result = values[1];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 398, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_target_disp = __Pyx_PyInt_As_MPI_Aint(values[3]); if (unlikely((__pyx_v_target_disp == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(30, 399, __pyx_L3_error)
    } else {
      __pyx_v_target_disp = ((MPI_Aint)0);
    }
    __pyx_v_op = ((struct PyMPIOpObject *)values[4]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Fetch_and_op", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 398, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Fetch_and_op", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(30, 399, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_58Fetch_and_op(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target_disp, __pyx_v_op);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_58Fetch_and_op(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_target_rank, MPI_Aint __pyx_v_target_disp, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Fetch_and_op", 0);

  /* "mpi4py/MPI/Win.pyx":403
 *         Perform one-sided read-modify-write
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_fetch_op(origin, result, target_rank, target_disp)
 *         with nogil: CHKERR( MPI_Fetch_and_op(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 403, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":404
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_fetch_op(origin, result, target_rank, target_disp)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Fetch_and_op(
 *                 msg.oaddr, msg.raddr, msg.ttype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_fetch_op(__pyx_v_msg, __pyx_v_origin, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target_disp); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 404, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":405
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_fetch_op(origin, result, target_rank, target_disp)
 *         with nogil: CHKERR( MPI_Fetch_and_op(             # <<<<<<<<<<<<<<
 *                 msg.oaddr, msg.raddr, msg.ttype,
 *                 target_rank, target_disp,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":408
 *                 msg.oaddr, msg.raddr, msg.ttype,
 *                 target_rank, target_disp,
 *                 op.ob_mpi, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Compare_and_swap(self, origin, compare, result,
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Fetch_and_op(__pyx_v_msg->oaddr, __pyx_v_msg->raddr, __pyx_v_msg->ttype, __pyx_v_target_rank, __pyx_v_target_disp, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 405, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":405
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_fetch_op(origin, result, target_rank, target_disp)
 *         with nogil: CHKERR( MPI_Fetch_and_op(             # <<<<<<<<<<<<<<
 *                 msg.oaddr, msg.raddr, msg.ttype,
 *                 target_rank, target_disp,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":398
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Fetch_and_op(self, origin, result,int target_rank,             # <<<<<<<<<<<<<<
 *                      Aint target_disp=0, Op op=SUM):
 *         """
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Fetch_and_op", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":410
 *                 op.ob_mpi, self.ob_mpi) )
 * 
 *     def Compare_and_swap(self, origin, compare, result,             # <<<<<<<<<<<<<<
 *                          int target_rank, Aint target_disp=0):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_61Compare_and_swap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_60Compare_and_swap[] = "Win.Compare_and_swap(self, origin, compare, result, int target_rank, Aint target_disp=0)\n\n        Perform one-sided atomic compare-and-swap\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_61Compare_and_swap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_compare = 0;
  PyObject *__pyx_v_result = 0;
  int __pyx_v_target_rank;
  MPI_Aint __pyx_v_target_disp;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Compare_and_swap (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_compare,&__pyx_n_s_result,&__pyx_n_s_target_rank,&__pyx_n_s_target_disp,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compare)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Compare_and_swap", 0, 4, 5, 1); __PYX_ERR(30, 410, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Compare_and_swap", 0, 4, 5, 2); __PYX_ERR(30, 410, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Compare_and_swap", 0, 4, 5, 3); __PYX_ERR(30, 410, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_disp);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Compare_and_swap") < 0)) __PYX_ERR(30, 410, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_compare = values[1];
    __pyx_v_result = values[2];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 411, __pyx_L3_error)
    if (values[4]) {
      __pyx_v_target_disp = __Pyx_PyInt_As_MPI_Aint(values[4]); if (unlikely((__pyx_v_target_disp == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(30, 411, __pyx_L3_error)
    } else {
      __pyx_v_target_disp = ((MPI_Aint)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Compare_and_swap", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 410, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Compare_and_swap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_60Compare_and_swap(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_compare, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target_disp);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_60Compare_and_swap(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_compare, PyObject *__pyx_v_result, int __pyx_v_target_rank, MPI_Aint __pyx_v_target_disp) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Compare_and_swap", 0);

  /* "mpi4py/MPI/Win.pyx":415
 *         Perform one-sided atomic compare-and-swap
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_cmp_swap(origin, compare, result, target_rank, target_disp)
 *         with nogil: CHKERR( MPI_Compare_and_swap(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":416
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_cmp_swap(origin, compare, result, target_rank, target_disp)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Compare_and_swap(
 *                 msg.oaddr, msg.caddr, msg.raddr, msg.ttype,
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_cmp_swap(__pyx_v_msg, __pyx_v_origin, __pyx_v_compare, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target_disp); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 416, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":417
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_cmp_swap(origin, compare, result, target_rank, target_disp)
 *         with nogil: CHKERR( MPI_Compare_and_swap(             # <<<<<<<<<<<<<<
 *                 msg.oaddr, msg.caddr, msg.raddr, msg.ttype,
 *                 target_rank, target_disp, self.ob_mpi) )
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":419
 *         with nogil: CHKERR( MPI_Compare_and_swap(
 *                 msg.oaddr, msg.caddr, msg.raddr, msg.ttype,
 *                 target_rank, target_disp, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Request-based RMA Communication Operations
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Compare_and_swap(__pyx_v_msg->oaddr, __pyx_v_msg->caddr, __pyx_v_msg->raddr, __pyx_v_msg->ttype, __pyx_v_target_rank, __pyx_v_target_disp, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 417, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":417
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_cmp_swap(origin, compare, result, target_rank, target_disp)
 *         with nogil: CHKERR( MPI_Compare_and_swap(             # <<<<<<<<<<<<<<
 *                 msg.oaddr, msg.caddr, msg.raddr, msg.ttype,
 *                 target_rank, target_disp, self.ob_mpi) )
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":410
 *                 op.ob_mpi, self.ob_mpi) )
 * 
 *     def Compare_and_swap(self, origin, compare, result,             # <<<<<<<<<<<<<<
 *                          int target_rank, Aint target_disp=0):
 *         """
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Compare_and_swap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":424
 *     # ------------------------------------------
 * 
 *     def Rput(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Put data into a memory window on a remote process.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_63Rput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_62Rput[] = "Win.Rput(self, origin, int target_rank, target=None)\n\n        Put data into a memory window on a remote process.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_63Rput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rput (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_target_rank,&__pyx_n_s_target,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Rput", 0, 2, 3, 1); __PYX_ERR(30, 424, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Rput") < 0)) __PYX_ERR(30, 424, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 424, __pyx_L3_error)
    __pyx_v_target = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Rput", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 424, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Rput", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_62Rput(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_62Rput(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Rput", 0);

  /* "mpi4py/MPI/Win.pyx":428
 *         Put data into a memory window on a remote process.
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_put(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":429
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_put(origin, target_rank, target)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rput(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_put(__pyx_v_msg, __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 429, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":430
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_put(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Rput(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 430, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":431
 *         msg.for_put(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rput(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":435
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = msg
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Rput(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 431, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":431
 *         msg.for_put(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rput(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":436
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_msg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_msg);

  /* "mpi4py/MPI/Win.pyx":437
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Rget(self, origin, int target_rank, target=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":424
 *     # ------------------------------------------
 * 
 *     def Rput(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Put data into a memory window on a remote process.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Rput", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":439
 *         return request
 * 
 *     def Rget(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Get data from a memory window on a remote process.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_65Rget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_64Rget[] = "Win.Rget(self, origin, int target_rank, target=None)\n\n        Get data from a memory window on a remote process.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_65Rget(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rget (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_target_rank,&__pyx_n_s_target,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Rget", 0, 2, 3, 1); __PYX_ERR(30, 439, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Rget") < 0)) __PYX_ERR(30, 439, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 439, __pyx_L3_error)
    __pyx_v_target = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Rget", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 439, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Rget", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_64Rget(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_64Rget(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Rget", 0);

  /* "mpi4py/MPI/Win.pyx":443
 *         Get data from a memory window on a remote process.
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_get(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":444
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get(origin, target_rank, target)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rget(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get(__pyx_v_msg, __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 444, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":445
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Rget(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 445, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":446
 *         msg.for_get(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rget(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":450
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = msg
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Rget(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 446, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":446
 *         msg.for_get(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rget(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":451
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_msg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_msg);

  /* "mpi4py/MPI/Win.pyx":452
 *             self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Raccumulate(self, origin, int target_rank,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":439
 *         return request
 * 
 *     def Rget(self, origin, int target_rank, target=None):             # <<<<<<<<<<<<<<
 *         """
 *         Get data from a memory window on a remote process.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Rget", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":454
 *         return request
 * 
 *     def Raccumulate(self, origin, int target_rank,             # <<<<<<<<<<<<<<
 *                    target=None, Op op=SUM):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_67Raccumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_66Raccumulate[] = "Win.Raccumulate(self, origin, int target_rank, target=None, Op op=SUM)\n\n        Fetch-and-accumulate data into the target process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_67Raccumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Raccumulate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_target_rank,&__pyx_n_s_target,&__pyx_n_s_op,0};
    PyObject* values[4] = {0,0,0,0};

    /* "mpi4py/MPI/Win.pyx":455
 * 
 *     def Raccumulate(self, origin, int target_rank,
 *                    target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Fetch-and-accumulate data into the target process
 */
    values[2] = ((PyObject *)Py_None);
    values[3] = (PyObject *)__pyx_k__117;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Raccumulate", 0, 2, 4, 1); __PYX_ERR(30, 454, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Raccumulate") < 0)) __PYX_ERR(30, 454, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 454, __pyx_L3_error)
    __pyx_v_target = values[2];
    __pyx_v_op = ((struct PyMPIOpObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Raccumulate", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 454, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Raccumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(30, 455, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_66Raccumulate(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target, __pyx_v_op);

  /* "mpi4py/MPI/Win.pyx":454
 *         return request
 * 
 *     def Raccumulate(self, origin, int target_rank,             # <<<<<<<<<<<<<<
 *                    target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_66Raccumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Raccumulate", 0);

  /* "mpi4py/MPI/Win.pyx":459
 *         Fetch-and-accumulate data into the target process
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_acc(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 459, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":460
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_acc(origin, target_rank, target)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Raccumulate(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_acc(__pyx_v_msg, __pyx_v_origin, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 460, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":461
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_acc(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Raccumulate(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 461, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":462
 *         msg.for_acc(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Raccumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":466
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = msg
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Raccumulate(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 462, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":462
 *         msg.for_acc(origin, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Raccumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             target_rank,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":467
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_msg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_msg);

  /* "mpi4py/MPI/Win.pyx":468
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Rget_accumulate(self, origin, result, int target_rank,
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":454
 *         return request
 * 
 *     def Raccumulate(self, origin, int target_rank,             # <<<<<<<<<<<<<<
 *                    target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Raccumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":470
 *         return request
 * 
 *     def Rget_accumulate(self, origin, result, int target_rank,             # <<<<<<<<<<<<<<
 *                         target=None, Op op=SUM):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_69Rget_accumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_68Rget_accumulate[] = "Win.Rget_accumulate(self, origin, result, int target_rank, target=None, Op op=SUM)\n\n        Accumulate data into the target process\n        using remote memory access.\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_69Rget_accumulate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_origin = 0;
  PyObject *__pyx_v_result = 0;
  int __pyx_v_target_rank;
  PyObject *__pyx_v_target = 0;
  struct PyMPIOpObject *__pyx_v_op = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rget_accumulate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_origin,&__pyx_n_s_result,&__pyx_n_s_target_rank,&__pyx_n_s_target,&__pyx_n_s_op,0};
    PyObject* values[5] = {0,0,0,0,0};

    /* "mpi4py/MPI/Win.pyx":471
 * 
 *     def Rget_accumulate(self, origin, result, int target_rank,
 *                         target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Accumulate data into the target process
 */
    values[3] = ((PyObject *)Py_None);
    values[4] = (PyObject *)__pyx_k__118;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_origin)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_result)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Rget_accumulate", 0, 3, 5, 1); __PYX_ERR(30, 470, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target_rank)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Rget_accumulate", 0, 3, 5, 2); __PYX_ERR(30, 470, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_target);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Rget_accumulate") < 0)) __PYX_ERR(30, 470, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_origin = values[0];
    __pyx_v_result = values[1];
    __pyx_v_target_rank = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_target_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 470, __pyx_L3_error)
    __pyx_v_target = values[3];
    __pyx_v_op = ((struct PyMPIOpObject *)values[4]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Rget_accumulate", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 470, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Rget_accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_op), __pyx_ptype_6mpi4py_3MPI_Op, 0, "op", 0))) __PYX_ERR(30, 471, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_68Rget_accumulate(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_origin, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target, __pyx_v_op);

  /* "mpi4py/MPI/Win.pyx":470
 *         return request
 * 
 *     def Rget_accumulate(self, origin, result, int target_rank,             # <<<<<<<<<<<<<<
 *                         target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_68Rget_accumulate(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_origin, PyObject *__pyx_v_result, int __pyx_v_target_rank, PyObject *__pyx_v_target, struct PyMPIOpObject *__pyx_v_op) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *__pyx_v_msg = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("Rget_accumulate", 0);

  /* "mpi4py/MPI/Win.pyx":476
 *         using remote memory access.
 *         """
 *         cdef _p_msg_rma msg = message_rma()             # <<<<<<<<<<<<<<
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_rma()); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_msg = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":477
 *         """
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get_acc(origin, result, target_rank, target)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rget_accumulate(
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get_acc(__pyx_v_msg, __pyx_v_origin, __pyx_v_result, __pyx_v_target_rank, __pyx_v_target); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 477, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":478
 *         cdef _p_msg_rma msg = message_rma()
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Rget_accumulate(
 *             msg.oaddr, msg.ocount, msg.otype,
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 478, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_3 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":479
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rget_accumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             msg.raddr, msg.rcount, msg.rtype,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":484
 *             target_rank,
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = msg
 *         return request
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Rget_accumulate(__pyx_v_msg->oaddr, __pyx_v_msg->ocount, __pyx_v_msg->otype, __pyx_v_msg->raddr, __pyx_v_msg->rcount, __pyx_v_msg->rtype, __pyx_v_target_rank, __pyx_v_msg->tdisp, __pyx_v_msg->tcount, __pyx_v_msg->ttype, __pyx_v_op->ob_mpi, __pyx_v_self->ob_mpi, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 479, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":479
 *         msg.for_get_acc(origin, result, target_rank, target)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_Rget_accumulate(             # <<<<<<<<<<<<<<
 *             msg.oaddr, msg.ocount, msg.otype,
 *             msg.raddr, msg.rcount, msg.rtype,
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":485
 *             msg.tdisp, msg.tcount, msg.ttype,
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_msg));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_msg));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_msg);

  /* "mpi4py/MPI/Win.pyx":486
 *             op.ob_mpi, self.ob_mpi, &request.ob_mpi) )
 *         request.ob_buf = msg
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Synchronization Calls
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":470
 *         return request
 * 
 *     def Rget_accumulate(self, origin, result, int target_rank,             # <<<<<<<<<<<<<<
 *                         target=None, Op op=SUM):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Rget_accumulate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_msg);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":494
 *     # -----
 * 
 *     def Fence(self, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Perform an MPI fence synchronization on a window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_71Fence(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_70Fence[] = "Win.Fence(self, int assertion=0)\n\n        Perform an MPI fence synchronization on a window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_71Fence(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_assertion;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Fence (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_assertion,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_assertion);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Fence") < 0)) __PYX_ERR(30, 494, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_assertion = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_assertion == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 494, __pyx_L3_error)
    } else {
      __pyx_v_assertion = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Fence", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 494, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Fence", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_70Fence(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_assertion);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_70Fence(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_assertion) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Fence", 0);

  /* "mpi4py/MPI/Win.pyx":498
 *         Perform an MPI fence synchronization on a window
 *         """
 *         with nogil: CHKERR( MPI_Win_fence(assertion, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # General Active Target Synchronization
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_fence(__pyx_v_assertion, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 498, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":494
 *     # -----
 * 
 *     def Fence(self, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Perform an MPI fence synchronization on a window
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Fence", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":503
 *     # -------------------------------------
 * 
 *     def Start(self, Group group, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Start an RMA access epoch for MPI
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_73Start(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_72Start[] = "Win.Start(self, Group group, int assertion=0)\n\n        Start an RMA access epoch for MPI\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_73Start(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  int __pyx_v_assertion;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Start (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_assertion,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_assertion);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Start") < 0)) __PYX_ERR(30, 503, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_group = ((struct PyMPIGroupObject *)values[0]);
    if (values[1]) {
      __pyx_v_assertion = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_assertion == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 503, __pyx_L3_error)
    } else {
      __pyx_v_assertion = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Start", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 503, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group", 0))) __PYX_ERR(30, 503, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_72Start(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_group, __pyx_v_assertion);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_72Start(struct PyMPIWinObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group, int __pyx_v_assertion) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Start", 0);

  /* "mpi4py/MPI/Win.pyx":507
 *         Start an RMA access epoch for MPI
 *         """
 *         with nogil: CHKERR( MPI_Win_start(             # <<<<<<<<<<<<<<
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":508
 *         """
 *         with nogil: CHKERR( MPI_Win_start(
 *             group.ob_mpi, assertion, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Complete(self):
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_start(__pyx_v_group->ob_mpi, __pyx_v_assertion, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 507, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":507
 *         Start an RMA access epoch for MPI
 *         """
 *         with nogil: CHKERR( MPI_Win_start(             # <<<<<<<<<<<<<<
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":503
 *     # -------------------------------------
 * 
 *     def Start(self, Group group, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Start an RMA access epoch for MPI
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":510
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 *     def Complete(self):             # <<<<<<<<<<<<<<
 *         """
 *         Completes an RMA operations begun after an `Win.Start()`
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_75Complete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_74Complete[] = "Win.Complete(self)\n\n        Completes an RMA operations begun after an `Win.Start()`\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_75Complete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Complete (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Complete", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Complete", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_74Complete(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_74Complete(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Complete", 0);

  /* "mpi4py/MPI/Win.pyx":514
 *         Completes an RMA operations begun after an `Win.Start()`
 *         """
 *         with nogil: CHKERR( MPI_Win_complete(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Post(self, Group group, int assertion=0):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_complete(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 514, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":510
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 *     def Complete(self):             # <<<<<<<<<<<<<<
 *         """
 *         Completes an RMA operations begun after an `Win.Start()`
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Complete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":516
 *         with nogil: CHKERR( MPI_Win_complete(self.ob_mpi) )
 * 
 *     def Post(self, Group group, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Start an RMA exposure epoch
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_77Post(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_76Post[] = "Win.Post(self, Group group, int assertion=0)\n\n        Start an RMA exposure epoch\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_77Post(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  int __pyx_v_assertion;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Post (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_group,&__pyx_n_s_assertion,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_group)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_assertion);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Post") < 0)) __PYX_ERR(30, 516, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_group = ((struct PyMPIGroupObject *)values[0]);
    if (values[1]) {
      __pyx_v_assertion = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_assertion == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 516, __pyx_L3_error)
    } else {
      __pyx_v_assertion = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Post", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 516, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Post", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_group), __pyx_ptype_6mpi4py_3MPI_Group, 0, "group", 0))) __PYX_ERR(30, 516, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_76Post(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_group, __pyx_v_assertion);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_76Post(struct PyMPIWinObject *__pyx_v_self, struct PyMPIGroupObject *__pyx_v_group, int __pyx_v_assertion) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Post", 0);

  /* "mpi4py/MPI/Win.pyx":520
 *         Start an RMA exposure epoch
 *         """
 *         with nogil: CHKERR( MPI_Win_post(             # <<<<<<<<<<<<<<
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":521
 *         """
 *         with nogil: CHKERR( MPI_Win_post(
 *             group.ob_mpi, assertion, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Wait(self):
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_post(__pyx_v_group->ob_mpi, __pyx_v_assertion, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 520, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":520
 *         Start an RMA exposure epoch
 *         """
 *         with nogil: CHKERR( MPI_Win_post(             # <<<<<<<<<<<<<<
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":516
 *         with nogil: CHKERR( MPI_Win_complete(self.ob_mpi) )
 * 
 *     def Post(self, Group group, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Start an RMA exposure epoch
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Post", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":523
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 *     def Wait(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete an RMA exposure epoch begun with `Win.Post()`
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_79Wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_78Wait[] = "Win.Wait(self)\n\n        Complete an RMA exposure epoch begun with `Win.Post()`\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_79Wait(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Wait (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Wait", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Wait", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_78Wait(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_78Wait(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Wait", 0);

  /* "mpi4py/MPI/Win.pyx":527
 *         Complete an RMA exposure epoch begun with `Win.Post()`
 *         """
 *         with nogil: CHKERR( MPI_Win_wait(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Test(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_wait(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 527, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":523
 *             group.ob_mpi, assertion, self.ob_mpi) )
 * 
 *     def Wait(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete an RMA exposure epoch begun with `Win.Post()`
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Wait", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":529
 *         with nogil: CHKERR( MPI_Win_wait(self.ob_mpi) )
 * 
 *     def Test(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test whether an RMA exposure epoch has completed
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_81Test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_80Test[] = "Win.Test(self)\n\n        Test whether an RMA exposure epoch has completed\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_81Test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Test (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Test", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Test", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_80Test(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_80Test(struct PyMPIWinObject *__pyx_v_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Test", 0);

  /* "mpi4py/MPI/Win.pyx":533
 *         Test whether an RMA exposure epoch has completed
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_Win_test(self.ob_mpi, &flag) )
 *         return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/Win.pyx":534
 *         """
 *         cdef int flag = 0
 *         with nogil: CHKERR( MPI_Win_test(self.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_test(__pyx_v_self->ob_mpi, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 534, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":535
 *         cdef int flag = 0
 *         with nogil: CHKERR( MPI_Win_test(self.ob_mpi, &flag) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     # Lock
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":529
 *         with nogil: CHKERR( MPI_Win_wait(self.ob_mpi) )
 * 
 *     def Test(self):             # <<<<<<<<<<<<<<
 *         """
 *         Test whether an RMA exposure epoch has completed
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Test", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":540
 *     # ----
 * 
 *     def Lock(self, int rank, int lock_type=LOCK_EXCLUSIVE, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Begin an RMA access epoch at the target process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_83Lock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_82Lock[] = "Win.Lock(self, int rank, int lock_type=LOCK_EXCLUSIVE, int assertion=0)\n\n        Begin an RMA access epoch at the target process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_83Lock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  int __pyx_v_lock_type;
  int __pyx_v_assertion;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Lock (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,&__pyx_n_s_lock_type,&__pyx_n_s_assertion,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lock_type);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_assertion);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Lock") < 0)) __PYX_ERR(30, 540, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 540, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_lock_type = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_lock_type == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 540, __pyx_L3_error)
    } else {
      __pyx_v_lock_type = __pyx_k__119;
    }
    if (values[2]) {
      __pyx_v_assertion = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_assertion == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 540, __pyx_L3_error)
    } else {
      __pyx_v_assertion = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Lock", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 540, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_82Lock(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_rank, __pyx_v_lock_type, __pyx_v_assertion);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_82Lock(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank, int __pyx_v_lock_type, int __pyx_v_assertion) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Lock", 0);

  /* "mpi4py/MPI/Win.pyx":544
 *         Begin an RMA access epoch at the target process
 *         """
 *         with nogil: CHKERR( MPI_Win_lock(             # <<<<<<<<<<<<<<
 *             lock_type, rank, assertion, self.ob_mpi) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/Win.pyx":545
 *         """
 *         with nogil: CHKERR( MPI_Win_lock(
 *             lock_type, rank, assertion, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Unlock(self, int rank):
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_lock(__pyx_v_lock_type, __pyx_v_rank, __pyx_v_assertion, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 544, __pyx_L4_error)
      }

      /* "mpi4py/MPI/Win.pyx":544
 *         Begin an RMA access epoch at the target process
 *         """
 *         with nogil: CHKERR( MPI_Win_lock(             # <<<<<<<<<<<<<<
 *             lock_type, rank, assertion, self.ob_mpi) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":540
 *     # ----
 * 
 *     def Lock(self, int rank, int lock_type=LOCK_EXCLUSIVE, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Begin an RMA access epoch at the target process
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Lock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":547
 *             lock_type, rank, assertion, self.ob_mpi) )
 * 
 *     def Unlock(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Complete an RMA access epoch at the target process
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_85Unlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_84Unlock[] = "Win.Unlock(self, int rank)\n\n        Complete an RMA access epoch at the target process\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_85Unlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Unlock (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Unlock") < 0)) __PYX_ERR(30, 547, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 547, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Unlock", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 547, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Unlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_84Unlock(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_84Unlock(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Unlock", 0);

  /* "mpi4py/MPI/Win.pyx":551
 *         Complete an RMA access epoch at the target process
 *         """
 *         with nogil: CHKERR( MPI_Win_unlock(rank, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Lock_all(self, int assertion=0):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_unlock(__pyx_v_rank, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 551, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":547
 *             lock_type, rank, assertion, self.ob_mpi) )
 * 
 *     def Unlock(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Complete an RMA access epoch at the target process
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Unlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":553
 *         with nogil: CHKERR( MPI_Win_unlock(rank, self.ob_mpi) )
 * 
 *     def Lock_all(self, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Begin an RMA access epoch at all processes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_87Lock_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_86Lock_all[] = "Win.Lock_all(self, int assertion=0)\n\n        Begin an RMA access epoch at all processes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_87Lock_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_assertion;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Lock_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_assertion,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_assertion);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Lock_all") < 0)) __PYX_ERR(30, 553, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_assertion = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_assertion == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 553, __pyx_L3_error)
    } else {
      __pyx_v_assertion = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Lock_all", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 553, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Lock_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_86Lock_all(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_assertion);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_86Lock_all(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_assertion) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Lock_all", 0);

  /* "mpi4py/MPI/Win.pyx":557
 *         Begin an RMA access epoch at all processes
 *         """
 *         with nogil: CHKERR( MPI_Win_lock_all(assertion, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Unlock_all(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_lock_all(__pyx_v_assertion, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 557, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":553
 *         with nogil: CHKERR( MPI_Win_unlock(rank, self.ob_mpi) )
 * 
 *     def Lock_all(self, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Begin an RMA access epoch at all processes
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Lock_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":559
 *         with nogil: CHKERR( MPI_Win_lock_all(assertion, self.ob_mpi) )
 * 
 *     def Unlock_all(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete an RMA access epoch at all processes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_89Unlock_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_88Unlock_all[] = "Win.Unlock_all(self)\n\n        Complete an RMA access epoch at all processes\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_89Unlock_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Unlock_all (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Unlock_all", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Unlock_all", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_88Unlock_all(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_88Unlock_all(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Unlock_all", 0);

  /* "mpi4py/MPI/Win.pyx":563
 *         Complete an RMA access epoch at all processes
 *         """
 *         with nogil: CHKERR( MPI_Win_unlock_all(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Flush and Sync
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_unlock_all(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 563, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":559
 *         with nogil: CHKERR( MPI_Win_lock_all(assertion, self.ob_mpi) )
 * 
 *     def Unlock_all(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete an RMA access epoch at all processes
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Unlock_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":568
 *     # --------------
 * 
 *     def Flush(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Complete all outstanding RMA operations at the given target
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_91Flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_90Flush[] = "Win.Flush(self, int rank)\n\n        Complete all outstanding RMA operations at the given target\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_91Flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Flush (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Flush") < 0)) __PYX_ERR(30, 568, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 568, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Flush", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 568, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_90Flush(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_90Flush(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Flush", 0);

  /* "mpi4py/MPI/Win.pyx":572
 *         Complete all outstanding RMA operations at the given target
 *         """
 *         with nogil: CHKERR( MPI_Win_flush(rank, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Flush_all(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_flush(__pyx_v_rank, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 572, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":568
 *     # --------------
 * 
 *     def Flush(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Complete all outstanding RMA operations at the given target
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Flush", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":574
 *         with nogil: CHKERR( MPI_Win_flush(rank, self.ob_mpi) )
 * 
 *     def Flush_all(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete  all  outstanding RMA operations at all targets
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_93Flush_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_92Flush_all[] = "Win.Flush_all(self)\n\n        Complete  all  outstanding RMA operations at all targets\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_93Flush_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Flush_all (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Flush_all", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Flush_all", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_92Flush_all(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_92Flush_all(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Flush_all", 0);

  /* "mpi4py/MPI/Win.pyx":578
 *         Complete  all  outstanding RMA operations at all targets
 *         """
 *         with nogil: CHKERR( MPI_Win_flush_all(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Flush_local(self, int rank):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_flush_all(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 578, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":574
 *         with nogil: CHKERR( MPI_Win_flush(rank, self.ob_mpi) )
 * 
 *     def Flush_all(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete  all  outstanding RMA operations at all targets
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Flush_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":580
 *         with nogil: CHKERR( MPI_Win_flush_all(self.ob_mpi) )
 * 
 *     def Flush_local(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Complete locally all outstanding RMA operations at the given target
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_95Flush_local(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_94Flush_local[] = "Win.Flush_local(self, int rank)\n\n        Complete locally all outstanding RMA operations at the given target\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_95Flush_local(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_rank;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Flush_local (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_rank,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rank)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Flush_local") < 0)) __PYX_ERR(30, 580, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_rank = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_rank == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 580, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Flush_local", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 580, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Flush_local", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_94Flush_local(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_rank);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_94Flush_local(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_rank) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Flush_local", 0);

  /* "mpi4py/MPI/Win.pyx":584
 *         Complete locally all outstanding RMA operations at the given target
 *         """
 *         with nogil: CHKERR( MPI_Win_flush_local(rank, self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Flush_local_all(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_flush_local(__pyx_v_rank, __pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 584, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":580
 *         with nogil: CHKERR( MPI_Win_flush_all(self.ob_mpi) )
 * 
 *     def Flush_local(self, int rank):             # <<<<<<<<<<<<<<
 *         """
 *         Complete locally all outstanding RMA operations at the given target
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Flush_local", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":586
 *         with nogil: CHKERR( MPI_Win_flush_local(rank, self.ob_mpi) )
 * 
 *     def Flush_local_all(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete locally all outstanding RMA opera- tions at all targets
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_97Flush_local_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_96Flush_local_all[] = "Win.Flush_local_all(self)\n\n        Complete locally all outstanding RMA opera- tions at all targets\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_97Flush_local_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Flush_local_all (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Flush_local_all", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Flush_local_all", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_96Flush_local_all(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_96Flush_local_all(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Flush_local_all", 0);

  /* "mpi4py/MPI/Win.pyx":590
 *         Complete locally all outstanding RMA opera- tions at all targets
 *         """
 *         with nogil: CHKERR( MPI_Win_flush_local_all(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Sync(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_flush_local_all(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 590, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":586
 *         with nogil: CHKERR( MPI_Win_flush_local(rank, self.ob_mpi) )
 * 
 *     def Flush_local_all(self):             # <<<<<<<<<<<<<<
 *         """
 *         Complete locally all outstanding RMA opera- tions at all targets
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Flush_local_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":592
 *         with nogil: CHKERR( MPI_Win_flush_local_all(self.ob_mpi) )
 * 
 *     def Sync(self):             # <<<<<<<<<<<<<<
 *         """
 *         Synchronize public and private copies of the given window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_99Sync(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_98Sync[] = "Win.Sync(self)\n\n        Synchronize public and private copies of the given window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_99Sync(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sync (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Sync", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Sync", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_98Sync(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_98Sync(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Sync", 0);

  /* "mpi4py/MPI/Win.pyx":596
 *         Synchronize public and private copies of the given window
 *         """
 *         with nogil: CHKERR( MPI_Win_sync(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_sync(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 596, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/Win.pyx":592
 *         with nogil: CHKERR( MPI_Win_flush_local_all(self.ob_mpi) )
 * 
 *     def Sync(self):             # <<<<<<<<<<<<<<
 *         """
 *         Synchronize public and private copies of the given window
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Sync", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":602
 *     # --------------
 * 
 *     def Get_errhandler(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the error handler for a window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_101Get_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_100Get_errhandler[] = "Win.Get_errhandler(self)\n\n        Get the error handler for a window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_101Get_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_errhandler (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_errhandler", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_errhandler", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_100Get_errhandler(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_100Get_errhandler(struct PyMPIWinObject *__pyx_v_self) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_errhandler", 0);

  /* "mpi4py/MPI/Win.pyx":606
 *         Get the error handler for a window
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Win_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )
 *         return errhandler
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Errhandler(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 606, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":607
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         CHKERR( MPI_Win_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return errhandler
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_errhandler(__pyx_v_self->ob_mpi, (&__pyx_v_errhandler->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 607, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":608
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         CHKERR( MPI_Win_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )
 *         return errhandler             # <<<<<<<<<<<<<<
 * 
 *     def Set_errhandler(self, Errhandler errhandler):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_errhandler));
  __pyx_r = ((PyObject *)__pyx_v_errhandler);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":602
 *     # --------------
 * 
 *     def Get_errhandler(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the error handler for a window
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_errhandler);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":610
 *         return errhandler
 * 
 *     def Set_errhandler(self, Errhandler errhandler):             # <<<<<<<<<<<<<<
 *         """
 *         Set the error handler for a window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_103Set_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_102Set_errhandler[] = "Win.Set_errhandler(self, Errhandler errhandler)\n\n        Set the error handler for a window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_103Set_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_errhandler (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errhandler,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errhandler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_errhandler") < 0)) __PYX_ERR(30, 610, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_errhandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 610, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_errhandler), __pyx_ptype_6mpi4py_3MPI_Errhandler, 0, "errhandler", 0))) __PYX_ERR(30, 610, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_102Set_errhandler(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_errhandler);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_102Set_errhandler(struct PyMPIWinObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_errhandler", 0);

  /* "mpi4py/MPI/Win.pyx":614
 *         Set the error handler for a window
 *         """
 *         CHKERR( MPI_Win_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Call_errhandler(self, int errorcode):
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_set_errhandler(__pyx_v_self->ob_mpi, __pyx_v_errhandler->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 614, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":610
 *         return errhandler
 * 
 *     def Set_errhandler(self, Errhandler errhandler):             # <<<<<<<<<<<<<<
 *         """
 *         Set the error handler for a window
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":616
 *         CHKERR( MPI_Win_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )
 * 
 *     def Call_errhandler(self, int errorcode):             # <<<<<<<<<<<<<<
 *         """
 *         Call the error handler installed on a window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_105Call_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_104Call_errhandler[] = "Win.Call_errhandler(self, int errorcode)\n\n        Call the error handler installed on a window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_105Call_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Call_errhandler (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Call_errhandler") < 0)) __PYX_ERR(30, 616, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 616, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Call_errhandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 616, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Call_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_104Call_errhandler(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_errorcode);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_104Call_errhandler(struct PyMPIWinObject *__pyx_v_self, int __pyx_v_errorcode) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Call_errhandler", 0);

  /* "mpi4py/MPI/Win.pyx":620
 *         Call the error handler installed on a window
 *         """
 *         CHKERR( MPI_Win_call_errhandler(self.ob_mpi, errorcode) )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_call_errhandler(__pyx_v_self->ob_mpi, __pyx_v_errorcode)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 620, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":616
 *         CHKERR( MPI_Win_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )
 * 
 *     def Call_errhandler(self, int errorcode):             # <<<<<<<<<<<<<<
 *         """
 *         Call the error handler installed on a window
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Call_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":626
 *     # --------------
 * 
 *     def Get_name(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the print name associated with the window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_107Get_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_106Get_name[] = "Win.Get_name(self)\n\n        Get the print name associated with the window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_107Get_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_name (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_name", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_name", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_106Get_name(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_106Get_name(struct PyMPIWinObject *__pyx_v_self) {
  char __pyx_v_name[(MPI_MAX_OBJECT_NAME + 1)];
  int __pyx_v_nlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_name", 0);

  /* "mpi4py/MPI/Win.pyx":631
 *         """
 *         cdef char name[MPI_MAX_OBJECT_NAME+1]
 *         cdef int nlen = 0             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Win_get_name(self.ob_mpi, name, &nlen) )
 *         return tompistr(name, nlen)
 */
  __pyx_v_nlen = 0;

  /* "mpi4py/MPI/Win.pyx":632
 *         cdef char name[MPI_MAX_OBJECT_NAME+1]
 *         cdef int nlen = 0
 *         CHKERR( MPI_Win_get_name(self.ob_mpi, name, &nlen) )             # <<<<<<<<<<<<<<
 *         return tompistr(name, nlen)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_get_name(__pyx_v_self->ob_mpi, __pyx_v_name, (&__pyx_v_nlen))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 632, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":633
 *         cdef int nlen = 0
 *         CHKERR( MPI_Win_get_name(self.ob_mpi, name, &nlen) )
 *         return tompistr(name, nlen)             # <<<<<<<<<<<<<<
 * 
 *     def Set_name(self, name):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_name, __pyx_v_nlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":626
 *     # --------------
 * 
 *     def Get_name(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the print name associated with the window
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Get_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":635
 *         return tompistr(name, nlen)
 * 
 *     def Set_name(self, name):             # <<<<<<<<<<<<<<
 *         """
 *         Set the print name associated with the window
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_109Set_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_108Set_name[] = "Win.Set_name(self, name)\n\n        Set the print name associated with the window\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_109Set_name(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_name (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name_2,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name_2)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_name") < 0)) __PYX_ERR(30, 635, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_name", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 635, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_108Set_name(((struct PyMPIWinObject *)__pyx_v_self), __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_108Set_name(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_name) {
  char *__pyx_v_cname;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Set_name", 0);
  __Pyx_INCREF(__pyx_v_name);

  /* "mpi4py/MPI/Win.pyx":639
 *         Set the print name associated with the window
 *         """
 *         cdef char *cname = NULL             # <<<<<<<<<<<<<<
 *         name = asmpistr(name, &cname)
 *         CHKERR( MPI_Win_set_name(self.ob_mpi, cname) )
 */
  __pyx_v_cname = NULL;

  /* "mpi4py/MPI/Win.pyx":640
 *         """
 *         cdef char *cname = NULL
 *         name = asmpistr(name, &cname)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_Win_set_name(self.ob_mpi, cname) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":641
 *         cdef char *cname = NULL
 *         name = asmpistr(name, &cname)
 *         CHKERR( MPI_Win_set_name(self.ob_mpi, cname) )             # <<<<<<<<<<<<<<
 * 
 *     property name:
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Win_set_name(__pyx_v_self->ob_mpi, __pyx_v_cname)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 641, __pyx_L1_error)

  /* "mpi4py/MPI/Win.pyx":635
 *         return tompistr(name, nlen)
 * 
 *     def Set_name(self, name):             # <<<<<<<<<<<<<<
 *         """
 *         Set the print name associated with the window
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.Set_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":645
 *     property name:
 *         """window name"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_name()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_4name___get__(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_4name___get__(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/Win.pyx":646
 *         """window name"""
 *         def __get__(self):
 *             return self.Get_name()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_name(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":645
 *     property name:
 *         """window name"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_name()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":647
 *         def __get__(self):
 *             return self.Get_name()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_name(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_3Win_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_3Win_4name_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_4name_2__set__(((struct PyMPIWinObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_3Win_4name_2__set__(struct PyMPIWinObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/Win.pyx":648
 *             return self.Get_name()
 *         def __set__(self, value):
 *             self.Set_name(value)             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":647
 *         def __get__(self):
 *             return self.Get_name()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_name(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.Win.name.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":653
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_111py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_110py2f[] = "Win.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_111py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_110py2f(((struct PyMPIWinObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_110py2f(struct PyMPIWinObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/Win.pyx":656
 *         """
 *         """
 *         return MPI_Win_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_Win_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 656, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":653
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Win.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/Win.pyx":659
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_113f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_3Win_112f2py[] = "Win.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_3Win_113f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(30, 659, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 659, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Win.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_3Win_112f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_3Win_112f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIWinObject *__pyx_v_win = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/Win.pyx":662
 *         """
 *         """
 *         cdef Win win = <Win>Win.__new__(Win)             # <<<<<<<<<<<<<<
 *         win.ob_mpi = MPI_Win_f2c(arg)
 *         return win
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Win(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Win), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 662, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_win = ((struct PyMPIWinObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/Win.pyx":663
 *         """
 *         cdef Win win = <Win>Win.__new__(Win)
 *         win.ob_mpi = MPI_Win_f2c(arg)             # <<<<<<<<<<<<<<
 *         return win
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(30, 663, __pyx_L1_error)
  __pyx_v_win->ob_mpi = MPI_Win_f2c(__pyx_t_3);

  /* "mpi4py/MPI/Win.pyx":664
 *         cdef Win win = <Win>Win.__new__(Win)
 *         win.ob_mpi = MPI_Win_f2c(arg)
 *         return win             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_win));
  __pyx_r = ((PyObject *)__pyx_v_win);
  goto __pyx_L0;

  /* "mpi4py/MPI/Win.pyx":659
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Win.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_win);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":57
 *     """
 * 
 *     def __cinit__(self, File file=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_FILE_NULL
 *         if file is None: return
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4File_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4File_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIFileObject *__pyx_v_file = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_file,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct PyMPIFileObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_file);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(31, 57, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_file = ((struct PyMPIFileObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 57, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file), __pyx_ptype_6mpi4py_3MPI_File, 1, "file", 0))) __PYX_ERR(31, 57, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File___cinit__(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_file);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4File___cinit__(struct PyMPIFileObject *__pyx_v_self, struct PyMPIFileObject *__pyx_v_file) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  MPI_File __pyx_t_3;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "mpi4py/MPI/File.pyx":58
 * 
 *     def __cinit__(self, File file=None):
 *         self.ob_mpi = MPI_FILE_NULL             # <<<<<<<<<<<<<<
 *         if file is None: return
 *         self.ob_mpi = file.ob_mpi
 */
  __pyx_v_self->ob_mpi = MPI_FILE_NULL;

  /* "mpi4py/MPI/File.pyx":59
 *     def __cinit__(self, File file=None):
 *         self.ob_mpi = MPI_FILE_NULL
 *         if file is None: return             # <<<<<<<<<<<<<<
 *         self.ob_mpi = file.ob_mpi
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_file) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/File.pyx":60
 *         self.ob_mpi = MPI_FILE_NULL
 *         if file is None: return
 *         self.ob_mpi = file.ob_mpi             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
 */
  __pyx_t_3 = __pyx_v_file->ob_mpi;
  __pyx_v_self->ob_mpi = __pyx_t_3;

  /* "mpi4py/MPI/File.pyx":57
 *     """
 * 
 *     def __cinit__(self, File file=None):             # <<<<<<<<<<<<<<
 *         self.ob_mpi = MPI_FILE_NULL
 *         if file is None: return
 */

  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":62
 *         self.ob_mpi = file.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_File(&self.ob_mpi) )
 */

/* Python wrapper */
static void __pyx_pw_6mpi4py_3MPI_4File_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_6mpi4py_3MPI_4File_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_6mpi4py_3MPI_4File_2__dealloc__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_6mpi4py_3MPI_4File_2__dealloc__(struct PyMPIFileObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "mpi4py/MPI/File.pyx":63
 * 
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return             # <<<<<<<<<<<<<<
 *         CHKERR( del_File(&self.ob_mpi) )
 * 
 */
  __pyx_t_1 = ((!((__pyx_v_self->flags & __pyx_e_6mpi4py_3MPI_PyMPI_OWNED) != 0)) != 0);
  if (__pyx_t_1) {
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/File.pyx":64
 *     def __dealloc__(self):
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_File(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(__pyx_f_6mpi4py_3MPI_del_File((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 64, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":62
 *         self.ob_mpi = file.ob_mpi
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if not (self.flags & PyMPI_OWNED): return
 *         CHKERR( del_File(&self.ob_mpi) )
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("mpi4py.MPI.File.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "mpi4py/MPI/File.pyx":66
 *         CHKERR( del_File(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, File): return NotImplemented
 *         cdef File s = <File>self, o = <File>other
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_5__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_4__richcmp__(((struct PyMPIFileObject *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_4__richcmp__(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  struct PyMPIFileObject *__pyx_v_s = 0;
  struct PyMPIFileObject *__pyx_v_o = 0;
  PyObject *__pyx_v_mod = 0;
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__richcmp__", 0);

  /* "mpi4py/MPI/File.pyx":67
 * 
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, File): return NotImplemented             # <<<<<<<<<<<<<<
 *         cdef File s = <File>self, o = <File>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_6mpi4py_3MPI_File); 
  __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/File.pyx":68
 *     def __richcmp__(self, other, int op):
 *         if not isinstance(other, File): return NotImplemented
 *         cdef File s = <File>self, o = <File>other             # <<<<<<<<<<<<<<
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 */
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_s = ((struct PyMPIFileObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_v_other;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_v_o = ((struct PyMPIFileObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":69
 *         if not isinstance(other, File): return NotImplemented
 *         cdef File s = <File>self, o = <File>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)             # <<<<<<<<<<<<<<
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_EQ) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi == __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/File.pyx":70
 *         cdef File s = <File>self, o = <File>other
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)             # <<<<<<<<<<<<<<
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 */
  __pyx_t_2 = ((__pyx_v_op == Py_NE) != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_s->ob_mpi != __pyx_v_o->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/File.pyx":71
 *         if   op == Py_EQ: return (s.ob_mpi == o.ob_mpi)
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__             # <<<<<<<<<<<<<<
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_module); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_mod = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":72
 *         elif op == Py_NE: return (s.ob_mpi != o.ob_mpi)
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__             # <<<<<<<<<<<<<<
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_cls = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":73
 *         cdef mod = type(self).__module__
 *         cdef cls = type(self).__name__
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self):
 */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_mod);
  __Pyx_GIVEREF(__pyx_v_mod);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mod);
  __Pyx_INCREF(__pyx_v_cls);
  __Pyx_GIVEREF(__pyx_v_cls);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_cls);
  __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_unorderable_type_s_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(31, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(31, 73, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":66
 *         CHKERR( del_File(&self.ob_mpi) )
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         if not isinstance(other, File): return NotImplemented
 *         cdef File s = <File>self, o = <File>other
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.File.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_mod);
  __Pyx_XDECREF(__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":75
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_FILE_NULL
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4File_7__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4File_7__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_6__bool__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4File_6__bool__(struct PyMPIFileObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);

  /* "mpi4py/MPI/File.pyx":76
 * 
 *     def __bool__(self):
 *         return self.ob_mpi != MPI_FILE_NULL             # <<<<<<<<<<<<<<
 * 
 *     # File Manipulation
 */
  __pyx_r = (__pyx_v_self->ob_mpi != MPI_FILE_NULL);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":75
 *         raise TypeError("unorderable type: '%s.%s'" % (mod, cls))
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi != MPI_FILE_NULL
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":82
 * 
 *     @classmethod
 *     def Open(cls, Intracomm comm, filename,             # <<<<<<<<<<<<<<
 *              int amode=MODE_RDONLY, Info info=INFO_NULL):
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_9Open(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_8Open[] = "File.Open(type cls, Intracomm comm, filename, int amode=MODE_RDONLY, Info info=INFO_NULL)\n\n        Open a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_9Open(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIIntracommObject *__pyx_v_comm = 0;
  PyObject *__pyx_v_filename = 0;
  int __pyx_v_amode;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Open (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_comm,&__pyx_n_s_filename,&__pyx_n_s_amode,&__pyx_n_s_info,0};
    PyObject* values[4] = {0,0,0,0};
    values[3] = (PyObject *)__pyx_k__120;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_comm)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Open", 0, 2, 4, 1); __PYX_ERR(31, 82, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_amode);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Open") < 0)) __PYX_ERR(31, 82, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_comm = ((struct PyMPIIntracommObject *)values[0]);
    __pyx_v_filename = values[1];
    if (values[2]) {
      __pyx_v_amode = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_amode == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 83, __pyx_L3_error)
    } else {
      __pyx_v_amode = __pyx_k__121;
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Open", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 82, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_comm), __pyx_ptype_6mpi4py_3MPI_Intracomm, 0, "comm", 0))) __PYX_ERR(31, 82, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(31, 83, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_8Open(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm, __pyx_v_filename, __pyx_v_amode, __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_8Open(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct PyMPIIntracommObject *__pyx_v_comm, PyObject *__pyx_v_filename, int __pyx_v_amode, struct PyMPIInfoObject *__pyx_v_info) {
  char *__pyx_v_cfilename;
  struct PyMPIFileObject *__pyx_v_file = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Open", 0);
  __Pyx_INCREF(__pyx_v_filename);

  /* "mpi4py/MPI/File.pyx":87
 *         Open a file
 *         """
 *         cdef char *cfilename = NULL             # <<<<<<<<<<<<<<
 *         filename = asmpistr(filename, &cfilename)
 *         cdef File file = <File>File.__new__(File)
 */
  __pyx_v_cfilename = NULL;

  /* "mpi4py/MPI/File.pyx":88
 *         """
 *         cdef char *cfilename = NULL
 *         filename = asmpistr(filename, &cfilename)             # <<<<<<<<<<<<<<
 *         cdef File file = <File>File.__new__(File)
 *         with nogil: CHKERR( MPI_File_open(
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_filename, (&__pyx_v_cfilename)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":89
 *         cdef char *cfilename = NULL
 *         filename = asmpistr(filename, &cfilename)
 *         cdef File file = <File>File.__new__(File)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_open(
 *             comm.ob_mpi, cfilename, amode, info.ob_mpi, &file.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_File(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_File), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 89, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_file = ((struct PyMPIFileObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":90
 *         filename = asmpistr(filename, &cfilename)
 *         cdef File file = <File>File.__new__(File)
 *         with nogil: CHKERR( MPI_File_open(             # <<<<<<<<<<<<<<
 *             comm.ob_mpi, cfilename, amode, info.ob_mpi, &file.ob_mpi) )
 *         file_set_eh(file.ob_mpi)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":91
 *         cdef File file = <File>File.__new__(File)
 *         with nogil: CHKERR( MPI_File_open(
 *             comm.ob_mpi, cfilename, amode, info.ob_mpi, &file.ob_mpi) )             # <<<<<<<<<<<<<<
 *         file_set_eh(file.ob_mpi)
 *         return file
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_open(__pyx_v_comm->__pyx_base.ob_mpi, __pyx_v_cfilename, __pyx_v_amode, __pyx_v_info->ob_mpi, (&__pyx_v_file->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 90, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":90
 *         filename = asmpistr(filename, &cfilename)
 *         cdef File file = <File>File.__new__(File)
 *         with nogil: CHKERR( MPI_File_open(             # <<<<<<<<<<<<<<
 *             comm.ob_mpi, cfilename, amode, info.ob_mpi, &file.ob_mpi) )
 *         file_set_eh(file.ob_mpi)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":92
 *         with nogil: CHKERR( MPI_File_open(
 *             comm.ob_mpi, cfilename, amode, info.ob_mpi, &file.ob_mpi) )
 *         file_set_eh(file.ob_mpi)             # <<<<<<<<<<<<<<
 *         return file
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_file_set_eh(__pyx_v_file->ob_mpi); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 92, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":93
 *             comm.ob_mpi, cfilename, amode, info.ob_mpi, &file.ob_mpi) )
 *         file_set_eh(file.ob_mpi)
 *         return file             # <<<<<<<<<<<<<<
 * 
 *     def Close(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_file));
  __pyx_r = ((PyObject *)__pyx_v_file);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":82
 * 
 *     @classmethod
 *     def Open(cls, Intracomm comm, filename,             # <<<<<<<<<<<<<<
 *              int amode=MODE_RDONLY, Info info=INFO_NULL):
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_file);
  __Pyx_XDECREF(__pyx_v_filename);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":95
 *         return file
 * 
 *     def Close(self):             # <<<<<<<<<<<<<<
 *         """
 *         Close a file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_11Close(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_10Close[] = "File.Close(self)\n\n        Close a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_11Close(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Close (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Close", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Close", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_10Close(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_10Close(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Close", 0);

  /* "mpi4py/MPI/File.pyx":99
 *         Close a file
 *         """
 *         with nogil: CHKERR( MPI_File_close(&self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_close((&__pyx_v_self->ob_mpi))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 99, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":95
 *         return file
 * 
 *     def Close(self):             # <<<<<<<<<<<<<<
 *         """
 *         Close a file
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":102
 * 
 *     @classmethod
 *     def Delete(cls, filename, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Delete a file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_13Delete(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_12Delete[] = "File.Delete(type cls, filename, Info info=INFO_NULL)\n\n        Delete a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_13Delete(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_filename = 0;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Delete (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filename,&__pyx_n_s_info,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)__pyx_k__122;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Delete") < 0)) __PYX_ERR(31, 102, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filename = values[0];
    __pyx_v_info = ((struct PyMPIInfoObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Delete", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 102, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(31, 102, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_12Delete(((PyTypeObject*)__pyx_v_cls), __pyx_v_filename, __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_12Delete(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_filename, struct PyMPIInfoObject *__pyx_v_info) {
  char *__pyx_v_cfilename;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Delete", 0);
  __Pyx_INCREF(__pyx_v_filename);

  /* "mpi4py/MPI/File.pyx":106
 *         Delete a file
 *         """
 *         cdef char *cfilename = NULL             # <<<<<<<<<<<<<<
 *         filename = asmpistr(filename, &cfilename)
 *         with nogil: CHKERR( MPI_File_delete(cfilename, info.ob_mpi) )
 */
  __pyx_v_cfilename = NULL;

  /* "mpi4py/MPI/File.pyx":107
 *         """
 *         cdef char *cfilename = NULL
 *         filename = asmpistr(filename, &cfilename)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_delete(cfilename, info.ob_mpi) )
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_filename, (&__pyx_v_cfilename)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":108
 *         cdef char *cfilename = NULL
 *         filename = asmpistr(filename, &cfilename)
 *         with nogil: CHKERR( MPI_File_delete(cfilename, info.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Set_size(self, Offset size):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_delete(__pyx_v_cfilename, __pyx_v_info->ob_mpi)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 108, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":102
 * 
 *     @classmethod
 *     def Delete(cls, filename, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Delete a file
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_filename);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":110
 *         with nogil: CHKERR( MPI_File_delete(cfilename, info.ob_mpi) )
 * 
 *     def Set_size(self, Offset size):             # <<<<<<<<<<<<<<
 *         """
 *         Sets the file size
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_15Set_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_14Set_size[] = "File.Set_size(self, Offset size)\n\n        Sets the file size\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_15Set_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_size;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_size (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_size") < 0)) __PYX_ERR(31, 110, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_size = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_size == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 110, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_size", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 110, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_14Set_size(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_14Set_size(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_size", 0);

  /* "mpi4py/MPI/File.pyx":114
 *         Sets the file size
 *         """
 *         with nogil: CHKERR( MPI_File_set_size(self.ob_mpi, size) )             # <<<<<<<<<<<<<<
 * 
 *     def Preallocate(self, Offset size):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_size(__pyx_v_self->ob_mpi, __pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 114, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":110
 *         with nogil: CHKERR( MPI_File_delete(cfilename, info.ob_mpi) )
 * 
 *     def Set_size(self, Offset size):             # <<<<<<<<<<<<<<
 *         """
 *         Sets the file size
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":116
 *         with nogil: CHKERR( MPI_File_set_size(self.ob_mpi, size) )
 * 
 *     def Preallocate(self, Offset size):             # <<<<<<<<<<<<<<
 *         """
 *         Preallocate storage space for a file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_17Preallocate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_16Preallocate[] = "File.Preallocate(self, Offset size)\n\n        Preallocate storage space for a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_17Preallocate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_size;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Preallocate (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Preallocate") < 0)) __PYX_ERR(31, 116, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_size = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_size == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 116, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Preallocate", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 116, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Preallocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_16Preallocate(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_size);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_16Preallocate(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_size) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Preallocate", 0);

  /* "mpi4py/MPI/File.pyx":120
 *         Preallocate storage space for a file
 *         """
 *         with nogil: CHKERR( MPI_File_preallocate(self.ob_mpi, size) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_size(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_preallocate(__pyx_v_self->ob_mpi, __pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 120, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":116
 *         with nogil: CHKERR( MPI_File_set_size(self.ob_mpi, size) )
 * 
 *     def Preallocate(self, Offset size):             # <<<<<<<<<<<<<<
 *         """
 *         Preallocate storage space for a file
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Preallocate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":122
 *         with nogil: CHKERR( MPI_File_preallocate(self.ob_mpi, size) )
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the file size
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_19Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_18Get_size[] = "File.Get_size(self)\n\n        Return the file size\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_19Get_size(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_size (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_size", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_size", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_18Get_size(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_18Get_size(struct PyMPIFileObject *__pyx_v_self) {
  MPI_Offset __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_size", 0);

  /* "mpi4py/MPI/File.pyx":126
 *         Return the file size
 *         """
 *         cdef MPI_Offset size = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_size(self.ob_mpi, &size) )
 *         return size
 */
  __pyx_v_size = 0;

  /* "mpi4py/MPI/File.pyx":127
 *         """
 *         cdef MPI_Offset size = 0
 *         with nogil: CHKERR( MPI_File_get_size(self.ob_mpi, &size) )             # <<<<<<<<<<<<<<
 *         return size
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_size(__pyx_v_self->ob_mpi, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 127, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":128
 *         cdef MPI_Offset size = 0
 *         with nogil: CHKERR( MPI_File_get_size(self.ob_mpi, &size) )
 *         return size             # <<<<<<<<<<<<<<
 * 
 *     property size:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":122
 *         with nogil: CHKERR( MPI_File_preallocate(self.ob_mpi, size) )
 * 
 *     def Get_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the file size
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":132
 *     property size:
 *         """file size"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_4size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_4size___get__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_4size___get__(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/File.pyx":133
 *         """file size"""
 *         def __get__(self):
 *             return self.Get_size()             # <<<<<<<<<<<<<<
 * 
 *     def Get_amode(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":132
 *     property size:
 *         """file size"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":135
 *             return self.Get_size()
 * 
 *     def Get_amode(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the file access mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_21Get_amode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_20Get_amode[] = "File.Get_amode(self)\n\n        Return the file access mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_21Get_amode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_amode (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_amode", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_amode", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_20Get_amode(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_20Get_amode(struct PyMPIFileObject *__pyx_v_self) {
  int __pyx_v_amode;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_amode", 0);

  /* "mpi4py/MPI/File.pyx":139
 *         Return the file access mode
 *         """
 *         cdef int amode = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_amode(self.ob_mpi, &amode) )
 *         return amode
 */
  __pyx_v_amode = 0;

  /* "mpi4py/MPI/File.pyx":140
 *         """
 *         cdef int amode = 0
 *         with nogil: CHKERR( MPI_File_get_amode(self.ob_mpi, &amode) )             # <<<<<<<<<<<<<<
 *         return amode
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_amode(__pyx_v_self->ob_mpi, (&__pyx_v_amode))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 140, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":141
 *         cdef int amode = 0
 *         with nogil: CHKERR( MPI_File_get_amode(self.ob_mpi, &amode) )
 *         return amode             # <<<<<<<<<<<<<<
 * 
 *     property amode:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_amode); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":135
 *             return self.Get_size()
 * 
 *     def Get_amode(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the file access mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_amode", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":145
 *     property amode:
 *         """file access mode"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_amode()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_5amode_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_5amode_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_5amode___get__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_5amode___get__(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/File.pyx":146
 *         """file access mode"""
 *         def __get__(self):
 *             return self.Get_amode()             # <<<<<<<<<<<<<<
 * 
 *     # File Group
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_amode); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":145
 *     property amode:
 *         """file access mode"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_amode()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.amode.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":151
 *     # ----------
 * 
 *     def Get_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the group of processes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_23Get_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_22Get_group[] = "File.Get_group(self)\n\n        Return the group of processes\n        that opened the file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_23Get_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_group (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_group", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_group", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_22Get_group(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_22Get_group(struct PyMPIFileObject *__pyx_v_self) {
  struct PyMPIGroupObject *__pyx_v_group = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_group", 0);

  /* "mpi4py/MPI/File.pyx":156
 *         that opened the file
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_group(self.ob_mpi, &group.ob_mpi) )
 *         return group
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Group(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Group), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 156, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_group = ((struct PyMPIGroupObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":157
 *         """
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_File_get_group(self.ob_mpi, &group.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return group
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_group(__pyx_v_self->ob_mpi, (&__pyx_v_group->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 157, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":158
 *         cdef Group group = <Group>Group.__new__(Group)
 *         with nogil: CHKERR( MPI_File_get_group(self.ob_mpi, &group.ob_mpi) )
 *         return group             # <<<<<<<<<<<<<<
 * 
 *     property group:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_group));
  __pyx_r = ((PyObject *)__pyx_v_group);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":151
 *     # ----------
 * 
 *     def Get_group(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the group of processes
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_group);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":162
 *     property group:
 *         """file group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_group()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_5group_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_5group_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_5group___get__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_5group___get__(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/File.pyx":163
 *         """file group"""
 *         def __get__(self):
 *             return self.Get_group()             # <<<<<<<<<<<<<<
 * 
 *     # File Info
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_group); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":162
 *     property group:
 *         """file group"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_group()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.group.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":168
 *     # ---------
 * 
 *     def Set_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Set new values for the hints
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_25Set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_24Set_info[] = "File.Set_info(self, Info info)\n\n        Set new values for the hints\n        associated with a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_25Set_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_info (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_info,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_info") < 0)) __PYX_ERR(31, 168, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_info = ((struct PyMPIInfoObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_info", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 168, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(31, 168, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_24Set_info(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_24Set_info(struct PyMPIFileObject *__pyx_v_self, struct PyMPIInfoObject *__pyx_v_info) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_info", 0);

  /* "mpi4py/MPI/File.pyx":173
 *         associated with a file
 *         """
 *         with nogil: CHKERR( MPI_File_set_info(self.ob_mpi, info.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_info(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_info(__pyx_v_self->ob_mpi, __pyx_v_info->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 173, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":168
 *     # ---------
 * 
 *     def Set_info(self, Info info):             # <<<<<<<<<<<<<<
 *         """
 *         Set new values for the hints
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":175
 *         with nogil: CHKERR( MPI_File_set_info(self.ob_mpi, info.ob_mpi) )
 * 
 *     def Get_info(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the hints for a file that
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_27Get_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_26Get_info[] = "File.Get_info(self)\n\n        Return the hints for a file that\n        that are currently in use\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_27Get_info(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_info (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_info", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_info", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_26Get_info(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_26Get_info(struct PyMPIFileObject *__pyx_v_self) {
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_info", 0);

  /* "mpi4py/MPI/File.pyx":180
 *         that are currently in use
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_info(self.ob_mpi, &info.ob_mpi) )
 *         return info
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Info(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Info), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 180, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_info = ((struct PyMPIInfoObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":181
 *         """
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_File_get_info(self.ob_mpi, &info.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return info
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_info(__pyx_v_self->ob_mpi, (&__pyx_v_info->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 181, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":182
 *         cdef Info info = <Info>Info.__new__(Info)
 *         with nogil: CHKERR( MPI_File_get_info(self.ob_mpi, &info.ob_mpi) )
 *         return info             # <<<<<<<<<<<<<<
 * 
 *     property info:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_info));
  __pyx_r = ((PyObject *)__pyx_v_info);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":175
 *         with nogil: CHKERR( MPI_File_set_info(self.ob_mpi, info.ob_mpi) )
 * 
 *     def Get_info(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the hints for a file that
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_info", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":186
 *     property info:
 *         """file info"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_info()
 *         def __set__(self, info):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_4info_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_4info_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_4info___get__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_4info___get__(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/File.pyx":187
 *         """file info"""
 *         def __get__(self):
 *             return self.Get_info()             # <<<<<<<<<<<<<<
 *         def __set__(self, info):
 *             self.Set_info(info)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":186
 *     property info:
 *         """file info"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_info()
 *         def __set__(self, info):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.info.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":188
 *         def __get__(self):
 *             return self.Get_info()
 *         def __set__(self, info):             # <<<<<<<<<<<<<<
 *             self.Set_info(info)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4File_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_info); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4File_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_4info_2__set__(((struct PyMPIFileObject *)__pyx_v_self), ((PyObject *)__pyx_v_info));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4File_4info_2__set__(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_info) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/File.pyx":189
 *             return self.Get_info()
 *         def __set__(self, info):
 *             self.Set_info(info)             # <<<<<<<<<<<<<<
 * 
 *     # File Views
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_info) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_info);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":188
 *         def __get__(self):
 *             return self.Get_info()
 *         def __set__(self, info):             # <<<<<<<<<<<<<<
 *             self.Set_info(info)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.info.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":194
 *     # ----------
 * 
 *     def Set_view(self, Offset disp=0,             # <<<<<<<<<<<<<<
 *                  Datatype etype=None, Datatype filetype=None,
 *                  object datarep=None, Info info=INFO_NULL):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_29Set_view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_28Set_view[] = "File.Set_view(self, Offset disp=0, Datatype etype=None, Datatype filetype=None, datarep=None, Info info=INFO_NULL)\n\n        Set the file view\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_29Set_view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_disp;
  struct PyMPIDatatypeObject *__pyx_v_etype = 0;
  struct PyMPIDatatypeObject *__pyx_v_filetype = 0;
  PyObject *__pyx_v_datarep = 0;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_view (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_disp,&__pyx_n_s_etype,&__pyx_n_s_filetype,&__pyx_n_s_datarep,&__pyx_n_s_info,0};
    PyObject* values[5] = {0,0,0,0,0};

    /* "mpi4py/MPI/File.pyx":195
 * 
 *     def Set_view(self, Offset disp=0,
 *                  Datatype etype=None, Datatype filetype=None,             # <<<<<<<<<<<<<<
 *                  object datarep=None, Info info=INFO_NULL):
 *         """
 */
    values[1] = (PyObject *)((struct PyMPIDatatypeObject *)Py_None);
    values[2] = (PyObject *)((struct PyMPIDatatypeObject *)Py_None);

    /* "mpi4py/MPI/File.pyx":196
 *     def Set_view(self, Offset disp=0,
 *                  Datatype etype=None, Datatype filetype=None,
 *                  object datarep=None, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Set the file view
 */
    values[3] = ((PyObject *)Py_None);
    values[4] = (PyObject *)__pyx_k__123;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_disp);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_etype);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_filetype);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datarep);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_view") < 0)) __PYX_ERR(31, 194, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_disp = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_disp == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 194, __pyx_L3_error)
    } else {
      __pyx_v_disp = ((MPI_Offset)0);
    }
    __pyx_v_etype = ((struct PyMPIDatatypeObject *)values[1]);
    __pyx_v_filetype = ((struct PyMPIDatatypeObject *)values[2]);
    __pyx_v_datarep = values[3];
    __pyx_v_info = ((struct PyMPIInfoObject *)values[4]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_view", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 194, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_view", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_etype), __pyx_ptype_6mpi4py_3MPI_Datatype, 1, "etype", 0))) __PYX_ERR(31, 195, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filetype), __pyx_ptype_6mpi4py_3MPI_Datatype, 1, "filetype", 0))) __PYX_ERR(31, 195, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(31, 196, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_28Set_view(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_disp, __pyx_v_etype, __pyx_v_filetype, __pyx_v_datarep, __pyx_v_info);

  /* "mpi4py/MPI/File.pyx":194
 *     # ----------
 * 
 *     def Set_view(self, Offset disp=0,             # <<<<<<<<<<<<<<
 *                  Datatype etype=None, Datatype filetype=None,
 *                  object datarep=None, Info info=INFO_NULL):
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_28Set_view(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_disp, struct PyMPIDatatypeObject *__pyx_v_etype, struct PyMPIDatatypeObject *__pyx_v_filetype, PyObject *__pyx_v_datarep, struct PyMPIInfoObject *__pyx_v_info) {
  char *__pyx_v_cdatarep;
  MPI_Datatype __pyx_v_cetype;
  MPI_Datatype __pyx_v_cftype;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  MPI_Datatype __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Set_view", 0);
  __Pyx_INCREF(__pyx_v_datarep);

  /* "mpi4py/MPI/File.pyx":200
 *         Set the file view
 *         """
 *         cdef char *cdatarep = b"native"             # <<<<<<<<<<<<<<
 *         if datarep is not None: datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Datatype cetype = MPI_BYTE
 */
  __pyx_v_cdatarep = ((char *)"native");

  /* "mpi4py/MPI/File.pyx":201
 *         """
 *         cdef char *cdatarep = b"native"
 *         if datarep is not None: datarep = asmpistr(datarep, &cdatarep)             # <<<<<<<<<<<<<<
 *         cdef MPI_Datatype cetype = MPI_BYTE
 *         if etype is not None: cetype = etype.ob_mpi
 */
  __pyx_t_1 = (__pyx_v_datarep != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_datarep, (&__pyx_v_cdatarep)); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 201, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_datarep, __pyx_t_3);
    __pyx_t_3 = 0;
  }

  /* "mpi4py/MPI/File.pyx":202
 *         cdef char *cdatarep = b"native"
 *         if datarep is not None: datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Datatype cetype = MPI_BYTE             # <<<<<<<<<<<<<<
 *         if etype is not None: cetype = etype.ob_mpi
 *         cdef MPI_Datatype cftype = cetype
 */
  __pyx_v_cetype = MPI_BYTE;

  /* "mpi4py/MPI/File.pyx":203
 *         if datarep is not None: datarep = asmpistr(datarep, &cdatarep)
 *         cdef MPI_Datatype cetype = MPI_BYTE
 *         if etype is not None: cetype = etype.ob_mpi             # <<<<<<<<<<<<<<
 *         cdef MPI_Datatype cftype = cetype
 *         if filetype is not None: cftype = filetype.ob_mpi
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_etype) != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_etype->ob_mpi;
    __pyx_v_cetype = __pyx_t_4;
  }

  /* "mpi4py/MPI/File.pyx":204
 *         cdef MPI_Datatype cetype = MPI_BYTE
 *         if etype is not None: cetype = etype.ob_mpi
 *         cdef MPI_Datatype cftype = cetype             # <<<<<<<<<<<<<<
 *         if filetype is not None: cftype = filetype.ob_mpi
 *         with nogil: CHKERR( MPI_File_set_view(
 */
  __pyx_v_cftype = __pyx_v_cetype;

  /* "mpi4py/MPI/File.pyx":205
 *         if etype is not None: cetype = etype.ob_mpi
 *         cdef MPI_Datatype cftype = cetype
 *         if filetype is not None: cftype = filetype.ob_mpi             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_set_view(
 *             self.ob_mpi, disp, cetype, cftype, cdatarep, info.ob_mpi) )
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_filetype) != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __pyx_v_filetype->ob_mpi;
    __pyx_v_cftype = __pyx_t_4;
  }

  /* "mpi4py/MPI/File.pyx":206
 *         cdef MPI_Datatype cftype = cetype
 *         if filetype is not None: cftype = filetype.ob_mpi
 *         with nogil: CHKERR( MPI_File_set_view(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, disp, cetype, cftype, cdatarep, info.ob_mpi) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":207
 *         if filetype is not None: cftype = filetype.ob_mpi
 *         with nogil: CHKERR( MPI_File_set_view(
 *             self.ob_mpi, disp, cetype, cftype, cdatarep, info.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_view(self):
 */
        __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_view(__pyx_v_self->ob_mpi, __pyx_v_disp, __pyx_v_cetype, __pyx_v_cftype, __pyx_v_cdatarep, __pyx_v_info->ob_mpi)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(31, 206, __pyx_L7_error)
      }

      /* "mpi4py/MPI/File.pyx":206
 *         cdef MPI_Datatype cftype = cetype
 *         if filetype is not None: cftype = filetype.ob_mpi
 *         with nogil: CHKERR( MPI_File_set_view(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, disp, cetype, cftype, cdatarep, info.ob_mpi) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }

  /* "mpi4py/MPI/File.pyx":194
 *     # ----------
 * 
 *     def Set_view(self, Offset disp=0,             # <<<<<<<<<<<<<<
 *                  Datatype etype=None, Datatype filetype=None,
 *                  object datarep=None, Info info=INFO_NULL):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_view", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_datarep);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":209
 *             self.ob_mpi, disp, cetype, cftype, cdatarep, info.ob_mpi) )
 * 
 *     def Get_view(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the file view
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_31Get_view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_30Get_view[] = "File.Get_view(self)\n\n        Return the file view\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_31Get_view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_view (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_view", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_view", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_30Get_view(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_30Get_view(struct PyMPIFileObject *__pyx_v_self) {
  MPI_Offset __pyx_v_disp;
  struct PyMPIDatatypeObject *__pyx_v_etype = 0;
  struct PyMPIDatatypeObject *__pyx_v_ftype = 0;
  char __pyx_v_cdatarep[(MPI_MAX_DATAREP_STRING + 1)];
  PyObject *__pyx_v_datarep = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_view", 0);

  /* "mpi4py/MPI/File.pyx":213
 *         Return the file view
 *         """
 *         cdef MPI_Offset disp = 0             # <<<<<<<<<<<<<<
 *         cdef Datatype etype = <Datatype>Datatype.__new__(Datatype)
 *         cdef Datatype ftype = <Datatype>Datatype.__new__(Datatype)
 */
  __pyx_v_disp = 0;

  /* "mpi4py/MPI/File.pyx":214
 *         """
 *         cdef MPI_Offset disp = 0
 *         cdef Datatype etype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         cdef Datatype ftype = <Datatype>Datatype.__new__(Datatype)
 *         cdef char cdatarep[MPI_MAX_DATAREP_STRING+1]
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 214, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_etype = ((struct PyMPIDatatypeObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":215
 *         cdef MPI_Offset disp = 0
 *         cdef Datatype etype = <Datatype>Datatype.__new__(Datatype)
 *         cdef Datatype ftype = <Datatype>Datatype.__new__(Datatype)             # <<<<<<<<<<<<<<
 *         cdef char cdatarep[MPI_MAX_DATAREP_STRING+1]
 *         with nogil: CHKERR( MPI_File_get_view(
 */
  __pyx_t_2 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Datatype(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Datatype), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 215, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
  __pyx_t_1 = ((PyObject *)__pyx_t_2);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
  __pyx_v_ftype = ((struct PyMPIDatatypeObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":217
 *         cdef Datatype ftype = <Datatype>Datatype.__new__(Datatype)
 *         cdef char cdatarep[MPI_MAX_DATAREP_STRING+1]
 *         with nogil: CHKERR( MPI_File_get_view(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &disp, &etype.ob_mpi, &ftype.ob_mpi, cdatarep) )
 *         #if builtin_Datatype(etype.ob_mpi): etype.flags = 0
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":218
 *         cdef char cdatarep[MPI_MAX_DATAREP_STRING+1]
 *         with nogil: CHKERR( MPI_File_get_view(
 *             self.ob_mpi, &disp, &etype.ob_mpi, &ftype.ob_mpi, cdatarep) )             # <<<<<<<<<<<<<<
 *         #if builtin_Datatype(etype.ob_mpi): etype.flags = 0
 *         #if builtin_Datatype(ftype.ob_mpi): ftype.flags = 0
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_view(__pyx_v_self->ob_mpi, (&__pyx_v_disp), (&__pyx_v_etype->ob_mpi), (&__pyx_v_ftype->ob_mpi), __pyx_v_cdatarep)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 217, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":217
 *         cdef Datatype ftype = <Datatype>Datatype.__new__(Datatype)
 *         cdef char cdatarep[MPI_MAX_DATAREP_STRING+1]
 *         with nogil: CHKERR( MPI_File_get_view(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &disp, &etype.ob_mpi, &ftype.ob_mpi, cdatarep) )
 *         #if builtin_Datatype(etype.ob_mpi): etype.flags = 0
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":221
 *         #if builtin_Datatype(etype.ob_mpi): etype.flags = 0
 *         #if builtin_Datatype(ftype.ob_mpi): ftype.flags = 0
 *         cdatarep[MPI_MAX_DATAREP_STRING] = 0 # just in case             # <<<<<<<<<<<<<<
 *         cdef object datarep = mpistr(cdatarep)
 *         return (disp, etype, ftype, datarep)
 */
  (__pyx_v_cdatarep[MPI_MAX_DATAREP_STRING]) = 0;

  /* "mpi4py/MPI/File.pyx":222
 *         #if builtin_Datatype(ftype.ob_mpi): ftype.flags = 0
 *         cdatarep[MPI_MAX_DATAREP_STRING] = 0 # just in case
 *         cdef object datarep = mpistr(cdatarep)             # <<<<<<<<<<<<<<
 *         return (disp, etype, ftype, datarep)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_mpistr(__pyx_v_cdatarep); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_datarep = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":223
 *         cdatarep[MPI_MAX_DATAREP_STRING] = 0 # just in case
 *         cdef object datarep = mpistr(cdatarep)
 *         return (disp, etype, ftype, datarep)             # <<<<<<<<<<<<<<
 * 
 *     # Data Access
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_disp); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_etype));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_etype));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_etype));
  __Pyx_INCREF(((PyObject *)__pyx_v_ftype));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ftype));
  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_ftype));
  __Pyx_INCREF(__pyx_v_datarep);
  __Pyx_GIVEREF(__pyx_v_datarep);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_datarep);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":209
 *             self.ob_mpi, disp, cetype, cftype, cdatarep, info.ob_mpi) )
 * 
 *     def Get_view(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the file view
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_view", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_etype);
  __Pyx_XDECREF((PyObject *)__pyx_v_ftype);
  __Pyx_XDECREF(__pyx_v_datarep);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":231
 *     # ---------------------------------
 * 
 *     def Read_at(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Read using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_33Read_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_32Read_at[] = "File.Read_at(self, Offset offset, buf, Status status=None)\n\n        Read using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_33Read_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_at (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Read_at", 0, 2, 3, 1); __PYX_ERR(31, 231, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_at") < 0)) __PYX_ERR(31, 231, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 231, __pyx_L3_error)
    __pyx_v_buf = values[1];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_at", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 231, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 231, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_32Read_at(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_32Read_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_at", 0);

  /* "mpi4py/MPI/File.pyx":235
 *         Read using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":236
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":237
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":238
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Read_at_all(self, Offset offset, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_at(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 237, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":237
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":231
 *     # ---------------------------------
 * 
 *     def Read_at(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Read using explicit offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":240
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Read_at_all(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective read using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_35Read_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_34Read_at_all[] = "File.Read_at_all(self, Offset offset, buf, Status status=None)\n\n        Collective read using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_35Read_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_at_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Read_at_all", 0, 2, 3, 1); __PYX_ERR(31, 240, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_at_all") < 0)) __PYX_ERR(31, 240, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 240, __pyx_L3_error)
    __pyx_v_buf = values[1];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_at_all", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 240, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 240, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_34Read_at_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_34Read_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_at_all", 0);

  /* "mpi4py/MPI/File.pyx":244
 *         Collective read using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":245
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":246
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":247
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_at(self, Offset offset, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_at_all(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 246, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":246
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":240
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Read_at_all(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective read using explicit offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":249
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_at(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Write using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_37Write_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_36Write_at[] = "File.Write_at(self, Offset offset, buf, Status status=None)\n\n        Write using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_37Write_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_at (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Write_at", 0, 2, 3, 1); __PYX_ERR(31, 249, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_at") < 0)) __PYX_ERR(31, 249, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 249, __pyx_L3_error)
    __pyx_v_buf = values[1];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_at", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 249, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 249, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_36Write_at(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_36Write_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_at", 0);

  /* "mpi4py/MPI/File.pyx":253
 *         Write using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":254
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":255
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":256
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_at_all(self, Offset offset, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_at(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 255, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":255
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":249
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_at(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Write using explicit offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":258
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_at_all(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective write using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_39Write_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_38Write_at_all[] = "File.Write_at_all(self, Offset offset, buf, Status status=None)\n\n        Collective write using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_39Write_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_at_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[3] = {0,0,0};
    values[2] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Write_at_all", 0, 2, 3, 1); __PYX_ERR(31, 258, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_at_all") < 0)) __PYX_ERR(31, 258, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 258, __pyx_L3_error)
    __pyx_v_buf = values[1];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_at_all", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 258, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 258, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_38Write_at_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_38Write_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_at_all", 0);

  /* "mpi4py/MPI/File.pyx":262
 *         Collective write using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":263
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":264
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":265
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Iread_at(self, Offset offset, buf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_at_all(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 264, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":264
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":258
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_at_all(self, Offset offset, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective write using explicit offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":267
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Iread_at(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking read using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_41Iread_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_40Iread_at[] = "File.Iread_at(self, Offset offset, buf)\n\n        Nonblocking read using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_41Iread_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iread_at (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iread_at", 1, 2, 2, 1); __PYX_ERR(31, 267, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iread_at") < 0)) __PYX_ERR(31, 267, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 267, __pyx_L3_error)
    __pyx_v_buf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iread_at", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 267, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_40Iread_at(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_40Iread_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iread_at", 0);

  /* "mpi4py/MPI/File.pyx":271
 *         Nonblocking read using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":272
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iread_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 272, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":273
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":274
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iread_at(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 273, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":273
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":275
 *         with nogil: CHKERR( MPI_File_iread_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":276
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iread_at_all(self, Offset offset, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":267
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Iread_at(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking read using explicit offset
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":278
 *         return request
 * 
 *     def Iread_at_all(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective read using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_43Iread_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_42Iread_at_all[] = "File.Iread_at_all(self, Offset offset, buf)\n\n        Nonblocking collective read using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_43Iread_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iread_at_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iread_at_all", 1, 2, 2, 1); __PYX_ERR(31, 278, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iread_at_all") < 0)) __PYX_ERR(31, 278, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 278, __pyx_L3_error)
    __pyx_v_buf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iread_at_all", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 278, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_42Iread_at_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_42Iread_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iread_at_all", 0);

  /* "mpi4py/MPI/File.pyx":282
 *         Nonblocking collective read using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":283
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iread_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 283, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":284
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":285
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iread_at_all(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 284, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":284
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":286
 *         with nogil: CHKERR( MPI_File_iread_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":287
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iwrite_at(self, Offset offset, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":278
 *         return request
 * 
 *     def Iread_at_all(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective read using explicit offset
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":289
 *         return request
 * 
 *     def Iwrite_at(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking write using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_45Iwrite_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_44Iwrite_at[] = "File.Iwrite_at(self, Offset offset, buf)\n\n        Nonblocking write using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_45Iwrite_at(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iwrite_at (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iwrite_at", 1, 2, 2, 1); __PYX_ERR(31, 289, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iwrite_at") < 0)) __PYX_ERR(31, 289, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 289, __pyx_L3_error)
    __pyx_v_buf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iwrite_at", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 289, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_44Iwrite_at(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_44Iwrite_at(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iwrite_at", 0);

  /* "mpi4py/MPI/File.pyx":293
 *         Nonblocking write using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":294
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iwrite_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 294, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":295
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":296
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iwrite_at(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 295, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":295
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":297
 *         with nogil: CHKERR( MPI_File_iwrite_at(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":298
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iwrite_at_all(self, Offset offset, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":289
 *         return request
 * 
 *     def Iwrite_at(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking write using explicit offset
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":300
 *         return request
 * 
 *     def Iwrite_at_all(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective write using explicit offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_47Iwrite_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_46Iwrite_at_all[] = "File.Iwrite_at_all(self, Offset offset, buf)\n\n        Nonblocking collective write using explicit offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_47Iwrite_at_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iwrite_at_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Iwrite_at_all", 1, 2, 2, 1); __PYX_ERR(31, 300, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iwrite_at_all") < 0)) __PYX_ERR(31, 300, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 300, __pyx_L3_error)
    __pyx_v_buf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iwrite_at_all", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 300, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_46Iwrite_at_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_46Iwrite_at_all(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iwrite_at_all", 0);

  /* "mpi4py/MPI/File.pyx":304
 *         Nonblocking collective write using explicit offset
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":305
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iwrite_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 305, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":306
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":307
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iwrite_at_all(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 306, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":306
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_at_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":308
 *         with nogil: CHKERR( MPI_File_iwrite_at_all(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":309
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     # Data Access with Individual File Pointers
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":300
 *         return request
 * 
 *     def Iwrite_at_all(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective write using explicit offset
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_at_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":314
 *     # -----------------------------------------
 * 
 *     def Read(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Read using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_49Read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_48Read[] = "File.Read(self, buf, Status status=None)\n\n        Read using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_49Read(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read") < 0)) __PYX_ERR(31, 314, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 314, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 314, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_48Read(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_48Read(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read", 0);

  /* "mpi4py/MPI/File.pyx":318
 *         Read using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":319
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":320
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":321
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Read_all(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 320, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":320
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":314
 *     # -----------------------------------------
 * 
 *     def Read(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Read using individual file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":323
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Read_all(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective read using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_51Read_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_50Read_all[] = "File.Read_all(self, buf, Status status=None)\n\n        Collective read using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_51Read_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_all") < 0)) __PYX_ERR(31, 323, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_all", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 323, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 323, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_50Read_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_50Read_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_all", 0);

  /* "mpi4py/MPI/File.pyx":327
 *         Collective read using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":328
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":329
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":330
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_all(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 329, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":329
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":323
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Read_all(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective read using individual file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":332
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Write using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_53Write(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_52Write[] = "File.Write(self, buf, Status status=None)\n\n        Write using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_53Write(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write") < 0)) __PYX_ERR(31, 332, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 332, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 332, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_52Write(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_52Write(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write", 0);

  /* "mpi4py/MPI/File.pyx":336
 *         Write using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":337
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":338
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":339
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_all(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 338, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":338
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":332
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Write using individual file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":341
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_all(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective write using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_55Write_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_54Write_all[] = "File.Write_all(self, buf, Status status=None)\n\n        Collective write using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_55Write_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_all") < 0)) __PYX_ERR(31, 341, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_all", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 341, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 341, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_54Write_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_54Write_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_all", 0);

  /* "mpi4py/MPI/File.pyx":345
 *         Collective write using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":346
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":347
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":348
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Iread(self, buf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_all(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 347, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":347
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":341
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_all(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective write using individual file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":350
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Iread(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking read using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_57Iread(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_56Iread[] = "File.Iread(self, buf)\n\n        Nonblocking read using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_57Iread(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iread (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iread") < 0)) __PYX_ERR(31, 350, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iread", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 350, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_56Iread(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_56Iread(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iread", 0);

  /* "mpi4py/MPI/File.pyx":354
 *         Nonblocking read using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":355
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iread(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 355, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":356
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":357
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iread(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 356, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":356
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":358
 *         with nogil: CHKERR( MPI_File_iread(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":359
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iread_all(self, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":350
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Iread(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking read using individual file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":361
 *         return request
 * 
 *     def Iread_all(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective read using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_59Iread_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_58Iread_all[] = "File.Iread_all(self, buf)\n\n        Nonblocking collective read using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_59Iread_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iread_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iread_all") < 0)) __PYX_ERR(31, 361, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iread_all", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 361, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_58Iread_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_58Iread_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iread_all", 0);

  /* "mpi4py/MPI/File.pyx":365
 *         Nonblocking collective read using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":366
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iread_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 366, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":367
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":368
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iread_all(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 367, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":367
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":369
 *         with nogil: CHKERR( MPI_File_iread_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":370
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iwrite(self, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":361
 *         return request
 * 
 *     def Iread_all(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective read using individual file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":372
 *         return request
 * 
 *     def Iwrite(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking write using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_61Iwrite(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_60Iwrite[] = "File.Iwrite(self, buf)\n\n        Nonblocking write using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_61Iwrite(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iwrite (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iwrite") < 0)) __PYX_ERR(31, 372, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iwrite", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 372, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_60Iwrite(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_60Iwrite(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iwrite", 0);

  /* "mpi4py/MPI/File.pyx":376
 *         Nonblocking write using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":377
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iwrite(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 377, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":378
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":379
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iwrite(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 378, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":378
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":380
 *         with nogil: CHKERR( MPI_File_iwrite(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":381
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iwrite_all(self, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":372
 *         return request
 * 
 *     def Iwrite(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking write using individual file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":383
 *         return request
 * 
 *     def Iwrite_all(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective write using individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_63Iwrite_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_62Iwrite_all[] = "File.Iwrite_all(self, buf)\n\n        Nonblocking collective write using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_63Iwrite_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iwrite_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iwrite_all") < 0)) __PYX_ERR(31, 383, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iwrite_all", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 383, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_62Iwrite_all(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_62Iwrite_all(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iwrite_all", 0);

  /* "mpi4py/MPI/File.pyx":387
 *         Nonblocking collective write using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_all(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":388
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iwrite_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 388, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":389
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":390
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iwrite_all(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 389, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":389
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_all(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":391
 *         with nogil: CHKERR( MPI_File_iwrite_all(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":392
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Seek(self, Offset offset, int whence=SEEK_SET):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":383
 *         return request
 * 
 *     def Iwrite_all(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking collective write using individual file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":394
 *         return request
 * 
 *     def Seek(self, Offset offset, int whence=SEEK_SET):             # <<<<<<<<<<<<<<
 *         """
 *         Update the individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_65Seek(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_64Seek[] = "File.Seek(self, Offset offset, int whence=SEEK_SET)\n\n        Update the individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_65Seek(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  int __pyx_v_whence;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Seek (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_whence,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_whence);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Seek") < 0)) __PYX_ERR(31, 394, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 394, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_whence = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_whence == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 394, __pyx_L3_error)
    } else {
      __pyx_v_whence = __pyx_k__124;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Seek", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 394, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Seek", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_64Seek(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_whence);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_64Seek(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, int __pyx_v_whence) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Seek", 0);

  /* "mpi4py/MPI/File.pyx":398
 *         Update the individual file pointer
 *         """
 *         with nogil: CHKERR( MPI_File_seek(self.ob_mpi, offset, whence) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_position(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_seek(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_whence)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 398, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":394
 *         return request
 * 
 *     def Seek(self, Offset offset, int whence=SEEK_SET):             # <<<<<<<<<<<<<<
 *         """
 *         Update the individual file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Seek", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":400
 *         with nogil: CHKERR( MPI_File_seek(self.ob_mpi, offset, whence) )
 * 
 *     def Get_position(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the current position of the individual file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_67Get_position(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_66Get_position[] = "File.Get_position(self)\n\n        Return the current position of the individual file pointer\n        in etype units relative to the current view\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_67Get_position(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_position (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_position", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_position", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_66Get_position(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_66Get_position(struct PyMPIFileObject *__pyx_v_self) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_position", 0);

  /* "mpi4py/MPI/File.pyx":405
 *         in etype units relative to the current view
 *         """
 *         cdef MPI_Offset offset = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_position(self.ob_mpi, &offset) )
 *         return offset
 */
  __pyx_v_offset = 0;

  /* "mpi4py/MPI/File.pyx":406
 *         """
 *         cdef MPI_Offset offset = 0
 *         with nogil: CHKERR( MPI_File_get_position(self.ob_mpi, &offset) )             # <<<<<<<<<<<<<<
 *         return offset
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_position(__pyx_v_self->ob_mpi, (&__pyx_v_offset))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 406, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":407
 *         cdef MPI_Offset offset = 0
 *         with nogil: CHKERR( MPI_File_get_position(self.ob_mpi, &offset) )
 *         return offset             # <<<<<<<<<<<<<<
 * 
 *     def Get_byte_offset(self, Offset offset):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":400
 *         with nogil: CHKERR( MPI_File_seek(self.ob_mpi, offset, whence) )
 * 
 *     def Get_position(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the current position of the individual file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_position", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":409
 *         return offset
 * 
 *     def Get_byte_offset(self, Offset offset):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the absolute byte position in the file corresponding
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_69Get_byte_offset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_68Get_byte_offset[] = "File.Get_byte_offset(self, Offset offset)\n\n        Returns the absolute byte position in the file corresponding\n        to 'offset' etypes relative to the current view\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_69Get_byte_offset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_byte_offset (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_byte_offset") < 0)) __PYX_ERR(31, 409, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 409, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_byte_offset", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 409, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_byte_offset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_68Get_byte_offset(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_68Get_byte_offset(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset) {
  MPI_Offset __pyx_v_disp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_byte_offset", 0);

  /* "mpi4py/MPI/File.pyx":414
 *         to 'offset' etypes relative to the current view
 *         """
 *         cdef MPI_Offset disp = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_byte_offset(
 *             self.ob_mpi, offset, &disp) )
 */
  __pyx_v_disp = 0;

  /* "mpi4py/MPI/File.pyx":415
 *         """
 *         cdef MPI_Offset disp = 0
 *         with nogil: CHKERR( MPI_File_get_byte_offset(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, &disp) )
 *         return disp
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":416
 *         cdef MPI_Offset disp = 0
 *         with nogil: CHKERR( MPI_File_get_byte_offset(
 *             self.ob_mpi, offset, &disp) )             # <<<<<<<<<<<<<<
 *         return disp
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_byte_offset(__pyx_v_self->ob_mpi, __pyx_v_offset, (&__pyx_v_disp))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 415, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":415
 *         """
 *         cdef MPI_Offset disp = 0
 *         with nogil: CHKERR( MPI_File_get_byte_offset(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, &disp) )
 *         return disp
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":417
 *         with nogil: CHKERR( MPI_File_get_byte_offset(
 *             self.ob_mpi, offset, &disp) )
 *         return disp             # <<<<<<<<<<<<<<
 * 
 *     # Data Access with Shared File Pointers
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_disp); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":409
 *         return offset
 * 
 *     def Get_byte_offset(self, Offset offset):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the absolute byte position in the file corresponding
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_byte_offset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":422
 *     # -------------------------------------
 * 
 *     def Read_shared(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Read using shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_71Read_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_70Read_shared[] = "File.Read_shared(self, buf, Status status=None)\n\n        Read using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_71Read_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_shared (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_shared") < 0)) __PYX_ERR(31, 422, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_shared", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 422, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 422, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_70Read_shared(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_70Read_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_shared", 0);

  /* "mpi4py/MPI/File.pyx":426
 *         Read using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_shared(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":427
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":428
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":429
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_shared(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_shared(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 428, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":428
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":422
 *     # -------------------------------------
 * 
 *     def Read_shared(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Read using shared file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":431
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_shared(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Write using shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_73Write_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_72Write_shared[] = "File.Write_shared(self, buf, Status status=None)\n\n        Write using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_73Write_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_shared (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_shared") < 0)) __PYX_ERR(31, 431, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_shared", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 431, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 431, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_72Write_shared(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_72Write_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_shared", 0);

  /* "mpi4py/MPI/File.pyx":435
 *         Write using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_shared(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":436
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":437
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":438
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Iread_shared(self, buf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_shared(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 437, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":437
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":431
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_shared(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Write using shared file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":440
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Iread_shared(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking read using shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_75Iread_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_74Iread_shared[] = "File.Iread_shared(self, buf)\n\n        Nonblocking read using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_75Iread_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iread_shared (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iread_shared") < 0)) __PYX_ERR(31, 440, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iread_shared", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 440, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_74Iread_shared(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_74Iread_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iread_shared", 0);

  /* "mpi4py/MPI/File.pyx":444
 *         Nonblocking read using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_shared(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":445
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iread_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 445, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":446
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":447
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iread_shared(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 446, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":446
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iread_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":448
 *         with nogil: CHKERR( MPI_File_iread_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":449
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Iwrite_shared(self, buf):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":440
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Iread_shared(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking read using shared file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iread_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":451
 *         return request
 * 
 *     def Iwrite_shared(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking write using shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_77Iwrite_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_76Iwrite_shared[] = "File.Iwrite_shared(self, buf)\n\n        Nonblocking write using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_77Iwrite_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Iwrite_shared (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Iwrite_shared") < 0)) __PYX_ERR(31, 451, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Iwrite_shared", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 451, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_76Iwrite_shared(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_76Iwrite_shared(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  struct PyMPIRequestObject *__pyx_v_request = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Iwrite_shared", 0);

  /* "mpi4py/MPI/File.pyx":455
 *         Nonblocking write using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_shared(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":456
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_iwrite_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Request(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Request), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 456, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_request = ((struct PyMPIRequestObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":457
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":458
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )             # <<<<<<<<<<<<<<
 *         request.ob_buf = m
 *         return request
 */
        __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_iwrite_shared(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, (&__pyx_v_request->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 457, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":457
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef Request request = <Request>Request.__new__(Request)
 *         with nogil: CHKERR( MPI_File_iwrite_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":459
 *         with nogil: CHKERR( MPI_File_iwrite_shared(
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m             # <<<<<<<<<<<<<<
 *         return request
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_m));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_m));
  __Pyx_GOTREF(__pyx_v_request->ob_buf);
  __Pyx_DECREF(__pyx_v_request->ob_buf);
  __pyx_v_request->ob_buf = ((PyObject *)__pyx_v_m);

  /* "mpi4py/MPI/File.pyx":460
 *             self.ob_mpi, m.buf, m.count, m.dtype, &request.ob_mpi) )
 *         request.ob_buf = m
 *         return request             # <<<<<<<<<<<<<<
 * 
 *     def Read_ordered(self, buf, Status status=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_request));
  __pyx_r = ((PyObject *)__pyx_v_request);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":451
 *         return request
 * 
 *     def Iwrite_shared(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking write using shared file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Iwrite_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XDECREF((PyObject *)__pyx_v_request);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":462
 *         return request
 * 
 *     def Read_ordered(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective read using shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_79Read_ordered(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_78Read_ordered[] = "File.Read_ordered(self, buf, Status status=None)\n\n        Collective read using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_79Read_ordered(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_ordered (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_ordered") < 0)) __PYX_ERR(31, 462, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_ordered", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 462, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_ordered", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 462, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_78Read_ordered(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_78Read_ordered(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_ordered", 0);

  /* "mpi4py/MPI/File.pyx":466
 *         Collective read using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":467
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_ordered(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":468
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":469
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_ordered(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_ordered(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 468, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":468
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":462
 *         return request
 * 
 *     def Read_ordered(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective read using shared file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_ordered", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":471
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_ordered(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective write using shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_81Write_ordered(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_80Write_ordered[] = "File.Write_ordered(self, buf, Status status=None)\n\n        Collective write using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_81Write_ordered(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_ordered (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_ordered") < 0)) __PYX_ERR(31, 471, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_ordered", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 471, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_ordered", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 471, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_80Write_ordered(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_80Write_ordered(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_ordered", 0);

  /* "mpi4py/MPI/File.pyx":475
 *         Collective write using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":476
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_ordered(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":477
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":478
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered(
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Seek_shared(self, Offset offset, int whence=SEEK_SET):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_ordered(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 477, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":477
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":471
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Write_ordered(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Collective write using shared file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_ordered", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":480
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Seek_shared(self, Offset offset, int whence=SEEK_SET):             # <<<<<<<<<<<<<<
 *         """
 *         Update the shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_83Seek_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_82Seek_shared[] = "File.Seek_shared(self, Offset offset, int whence=SEEK_SET)\n\n        Update the shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_83Seek_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  int __pyx_v_whence;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Seek_shared (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_whence,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_whence);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Seek_shared") < 0)) __PYX_ERR(31, 480, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 480, __pyx_L3_error)
    if (values[1]) {
      __pyx_v_whence = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_whence == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 480, __pyx_L3_error)
    } else {
      __pyx_v_whence = __pyx_k__125;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Seek_shared", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 480, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Seek_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_82Seek_shared(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_whence);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_82Seek_shared(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, int __pyx_v_whence) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Seek_shared", 0);

  /* "mpi4py/MPI/File.pyx":484
 *         Update the shared file pointer
 *         """
 *         with nogil: CHKERR( MPI_File_seek_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, whence) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":485
 *         """
 *         with nogil: CHKERR( MPI_File_seek_shared(
 *             self.ob_mpi, offset, whence) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_position_shared(self):
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_seek_shared(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_whence)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 484, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":484
 *         Update the shared file pointer
 *         """
 *         with nogil: CHKERR( MPI_File_seek_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, whence) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":480
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Seek_shared(self, Offset offset, int whence=SEEK_SET):             # <<<<<<<<<<<<<<
 *         """
 *         Update the shared file pointer
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Seek_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":487
 *             self.ob_mpi, offset, whence) )
 * 
 *     def Get_position_shared(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the current position of the shared file pointer
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_85Get_position_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_84Get_position_shared[] = "File.Get_position_shared(self)\n\n        Return the current position of the shared file pointer\n        in etype units relative to the current view\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_85Get_position_shared(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_position_shared (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_position_shared", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_position_shared", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_84Get_position_shared(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_84Get_position_shared(struct PyMPIFileObject *__pyx_v_self) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_position_shared", 0);

  /* "mpi4py/MPI/File.pyx":492
 *         in etype units relative to the current view
 *         """
 *         cdef MPI_Offset offset = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_position_shared(
 *             self.ob_mpi, &offset) )
 */
  __pyx_v_offset = 0;

  /* "mpi4py/MPI/File.pyx":493
 *         """
 *         cdef MPI_Offset offset = 0
 *         with nogil: CHKERR( MPI_File_get_position_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &offset) )
 *         return offset
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":494
 *         cdef MPI_Offset offset = 0
 *         with nogil: CHKERR( MPI_File_get_position_shared(
 *             self.ob_mpi, &offset) )             # <<<<<<<<<<<<<<
 *         return offset
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_position_shared(__pyx_v_self->ob_mpi, (&__pyx_v_offset))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 493, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":493
 *         """
 *         cdef MPI_Offset offset = 0
 *         with nogil: CHKERR( MPI_File_get_position_shared(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, &offset) )
 *         return offset
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":495
 *         with nogil: CHKERR( MPI_File_get_position_shared(
 *             self.ob_mpi, &offset) )
 *         return offset             # <<<<<<<<<<<<<<
 * 
 *     # Split Collective Data Access Routines
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Offset(__pyx_v_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":487
 *             self.ob_mpi, offset, whence) )
 * 
 *     def Get_position_shared(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the current position of the shared file pointer
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_position_shared", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":502
 *     # explicit offset
 * 
 *     def Read_at_all_begin(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective read using explict offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_87Read_at_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_86Read_at_all_begin[] = "File.Read_at_all_begin(self, Offset offset, buf)\n\n        Start a split collective read using explict offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_87Read_at_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_at_all_begin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Read_at_all_begin", 1, 2, 2, 1); __PYX_ERR(31, 502, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_at_all_begin") < 0)) __PYX_ERR(31, 502, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 502, __pyx_L3_error)
    __pyx_v_buf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_at_all_begin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 502, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_86Read_at_all_begin(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_86Read_at_all_begin(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_at_all_begin", 0);

  /* "mpi4py/MPI/File.pyx":506
 *         Start a split collective read using explict offset
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_at_all_begin(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":507
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_at_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":508
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_at_all_begin(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )             # <<<<<<<<<<<<<<
 * 
 *     def Read_at_all_end(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_at_all_begin(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 507, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":507
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_at_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":502
 *     # explicit offset
 * 
 *     def Read_at_all_begin(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective read using explict offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":510
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 *     def Read_at_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective read using explict offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_89Read_at_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_88Read_at_all_end[] = "File.Read_at_all_end(self, buf, Status status=None)\n\n        Complete a split collective read using explict offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_89Read_at_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_at_all_end (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_at_all_end") < 0)) __PYX_ERR(31, 510, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_at_all_end", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 510, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 510, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_88Read_at_all_end(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_88Read_at_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_at_all_end", 0);

  /* "mpi4py/MPI/File.pyx":514
 *         Complete a split collective read using explict offset
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all_end(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":515
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_at_all_end(
 *             self.ob_mpi, m.buf, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":516
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":517
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all_end(
 *             self.ob_mpi, m.buf, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_at_all_begin(self, Offset offset, buf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_at_all_end(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 516, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":516
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_at_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":510
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 *     def Read_at_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective read using explict offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_at_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":519
 *             self.ob_mpi, m.buf, statusp) )
 * 
 *     def Write_at_all_begin(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective write using explict offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_91Write_at_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_90Write_at_all_begin[] = "File.Write_at_all_begin(self, Offset offset, buf)\n\n        Start a split collective write using explict offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_91Write_at_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Offset __pyx_v_offset;
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_at_all_begin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_buf,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Write_at_all_begin", 1, 2, 2, 1); __PYX_ERR(31, 519, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_at_all_begin") < 0)) __PYX_ERR(31, 519, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_offset = __Pyx_PyInt_As_MPI_Offset(values[0]); if (unlikely((__pyx_v_offset == ((MPI_Offset)-1)) && PyErr_Occurred())) __PYX_ERR(31, 519, __pyx_L3_error)
    __pyx_v_buf = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_at_all_begin", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 519, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_90Write_at_all_begin(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_offset, __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_90Write_at_all_begin(struct PyMPIFileObject *__pyx_v_self, MPI_Offset __pyx_v_offset, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_at_all_begin", 0);

  /* "mpi4py/MPI/File.pyx":523
 *         Start a split collective write using explict offset
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_at_all_begin(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 523, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":524
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_at_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":525
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_at_all_begin(
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_at_all_end(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_at_all_begin(__pyx_v_self->ob_mpi, __pyx_v_offset, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 524, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":524
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_at_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":519
 *             self.ob_mpi, m.buf, statusp) )
 * 
 *     def Write_at_all_begin(self, Offset offset, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective write using explict offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":527
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 *     def Write_at_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective write using explict offset
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_93Write_at_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_92Write_at_all_end[] = "File.Write_at_all_end(self, buf, Status status=None)\n\n        Complete a split collective write using explict offset\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_93Write_at_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_at_all_end (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_at_all_end") < 0)) __PYX_ERR(31, 527, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_at_all_end", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 527, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 527, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_92Write_at_all_end(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_92Write_at_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_at_all_end", 0);

  /* "mpi4py/MPI/File.pyx":531
 *         Complete a split collective write using explict offset
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all_end(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":532
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_at_all_end(
 *             self.ob_mpi, m.buf, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":533
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":534
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all_end(
 *             self.ob_mpi, m.buf, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     # individual file pointer
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_at_all_end(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 533, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":533
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_at_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":527
 *             self.ob_mpi, offset, m.buf, m.count, m.dtype) )
 * 
 *     def Write_at_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective write using explict offset
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_at_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":538
 *     # individual file pointer
 * 
 *     def Read_all_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective read
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_95Read_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_94Read_all_begin[] = "File.Read_all_begin(self, buf)\n\n        Start a split collective read\n        using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_95Read_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_all_begin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_all_begin") < 0)) __PYX_ERR(31, 538, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_all_begin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 538, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_94Read_all_begin(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_94Read_all_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_all_begin", 0);

  /* "mpi4py/MPI/File.pyx":543
 *         using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_all_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":544
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":545
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_all_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )             # <<<<<<<<<<<<<<
 * 
 *     def Read_all_end(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_all_begin(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 544, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":544
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":538
 *     # individual file pointer
 * 
 *     def Read_all_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective read
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":547
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Read_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective read
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_97Read_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_96Read_all_end[] = "File.Read_all_end(self, buf, Status status=None)\n\n        Complete a split collective read\n        using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_97Read_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_all_end (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_all_end") < 0)) __PYX_ERR(31, 547, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_all_end", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 547, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 547, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_96Read_all_end(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_96Read_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_all_end", 0);

  /* "mpi4py/MPI/File.pyx":552
 *         using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all_end(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":553
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_all_end(
 *             self.ob_mpi, m.buf, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":554
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":555
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all_end(
 *             self.ob_mpi, m.buf, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_all_begin(self, buf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_all_end(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 554, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":554
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":547
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Read_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective read
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":557
 *             self.ob_mpi, m.buf, statusp) )
 * 
 *     def Write_all_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective write
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_99Write_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_98Write_all_begin[] = "File.Write_all_begin(self, buf)\n\n        Start a split collective write\n        using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_99Write_all_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_all_begin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_all_begin") < 0)) __PYX_ERR(31, 557, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_all_begin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 557, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_98Write_all_begin(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_98Write_all_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_all_begin", 0);

  /* "mpi4py/MPI/File.pyx":562
 *         using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_all_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":563
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":564
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_all_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_all_end(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_all_begin(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 563, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":563
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_all_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":557
 *             self.ob_mpi, m.buf, statusp) )
 * 
 *     def Write_all_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective write
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_all_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":566
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Write_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective write
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_101Write_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_100Write_all_end[] = "File.Write_all_end(self, buf, Status status=None)\n\n        Complete a split collective write\n        using individual file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_101Write_all_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_all_end (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_all_end") < 0)) __PYX_ERR(31, 566, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_all_end", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 566, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 566, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_100Write_all_end(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_100Write_all_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_all_end", 0);

  /* "mpi4py/MPI/File.pyx":571
 *         using individual file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all_end(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":572
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_all_end(
 *             self.ob_mpi, m.buf, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":573
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":574
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all_end(
 *             self.ob_mpi, m.buf, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     # shared file pointer
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_all_end(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 573, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":573
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_all_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":566
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Write_all_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective write
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_all_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":578
 *     # shared file pointer
 * 
 *     def Read_ordered_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective read
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_103Read_ordered_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_102Read_ordered_begin[] = "File.Read_ordered_begin(self, buf)\n\n        Start a split collective read\n        using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_103Read_ordered_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_ordered_begin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_ordered_begin") < 0)) __PYX_ERR(31, 578, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_ordered_begin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 578, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_ordered_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_102Read_ordered_begin(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_102Read_ordered_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_ordered_begin", 0);

  /* "mpi4py/MPI/File.pyx":583
 *         using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_ordered_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":584
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_ordered_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":585
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_ordered_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )             # <<<<<<<<<<<<<<
 * 
 *     def Read_ordered_end(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_ordered_begin(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 584, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":584
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         with nogil: CHKERR( MPI_File_read_ordered_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":578
 *     # shared file pointer
 * 
 *     def Read_ordered_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective read
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_ordered_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":587
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Read_ordered_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective read
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_105Read_ordered_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_104Read_ordered_end[] = "File.Read_ordered_end(self, buf, Status status=None)\n\n        Complete a split collective read\n        using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_105Read_ordered_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Read_ordered_end (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Read_ordered_end") < 0)) __PYX_ERR(31, 587, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Read_ordered_end", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 587, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_ordered_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 587, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_104Read_ordered_end(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_104Read_ordered_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Read_ordered_end", 0);

  /* "mpi4py/MPI/File.pyx":592
 *         using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered_end(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_read(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":593
 *         """
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_read_ordered_end(
 *             self.ob_mpi, m.buf, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":594
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":595
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered_end(
 *             self.ob_mpi, m.buf, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_ordered_begin(self, buf):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_read_ordered_end(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 594, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":594
 *         cdef _p_msg_io m = message_io_read(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_read_ordered_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":587
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Read_ordered_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective read
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Read_ordered_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":597
 *             self.ob_mpi, m.buf, statusp) )
 * 
 *     def Write_ordered_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective write using
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_107Write_ordered_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_106Write_ordered_begin[] = "File.Write_ordered_begin(self, buf)\n\n        Start a split collective write using\n        shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_107Write_ordered_begin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_ordered_begin (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_ordered_begin") < 0)) __PYX_ERR(31, 597, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_buf = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_ordered_begin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 597, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_ordered_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_106Write_ordered_begin(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_106Write_ordered_begin(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_ordered_begin", 0);

  /* "mpi4py/MPI/File.pyx":602
 *         shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_ordered_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":603
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_ordered_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":604
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_ordered_begin(
 *             self.ob_mpi, m.buf, m.count, m.dtype) )             # <<<<<<<<<<<<<<
 * 
 *     def Write_ordered_end(self, buf, Status status=None):
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_ordered_begin(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_m->count, __pyx_v_m->dtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 603, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":603
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         with nogil: CHKERR( MPI_File_write_ordered_begin(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":597
 *             self.ob_mpi, m.buf, statusp) )
 * 
 *     def Write_ordered_begin(self, buf):             # <<<<<<<<<<<<<<
 *         """
 *         Start a split collective write using
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_ordered_begin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":606
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Write_ordered_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective write
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_109Write_ordered_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_108Write_ordered_end[] = "File.Write_ordered_end(self, buf, Status status=None)\n\n        Complete a split collective write\n        using shared file pointer\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_109Write_ordered_end(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_buf = 0;
  struct PyMPIStatusObject *__pyx_v_status = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Write_ordered_end (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_buf,&__pyx_n_s_status,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)((struct PyMPIStatusObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Write_ordered_end") < 0)) __PYX_ERR(31, 606, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_buf = values[0];
    __pyx_v_status = ((struct PyMPIStatusObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Write_ordered_end", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 606, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_ordered_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status), __pyx_ptype_6mpi4py_3MPI_Status, 1, "status", 0))) __PYX_ERR(31, 606, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_108Write_ordered_end(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_buf, __pyx_v_status);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_108Write_ordered_end(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_buf, struct PyMPIStatusObject *__pyx_v_status) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *__pyx_v_m = 0;
  MPI_Status *__pyx_v_statusp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("Write_ordered_end", 0);

  /* "mpi4py/MPI/File.pyx":611
 *         using shared file pointer
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)             # <<<<<<<<<<<<<<
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered_end(
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_message_io_write(__pyx_v_buf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":612
 *         """
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_write_ordered_end(
 *             self.ob_mpi, m.buf, statusp) )
 */
  __pyx_v_statusp = __pyx_f_6mpi4py_3MPI_arg_Status(((PyObject *)__pyx_v_status));

  /* "mpi4py/MPI/File.pyx":613
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":614
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered_end(
 *             self.ob_mpi, m.buf, statusp) )             # <<<<<<<<<<<<<<
 * 
 *     # File Interoperability
 */
        __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_write_ordered_end(__pyx_v_self->ob_mpi, __pyx_v_m->buf, __pyx_v_statusp)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(31, 613, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":613
 *         cdef _p_msg_io m = message_io_write(buf)
 *         cdef MPI_Status *statusp = arg_Status(status)
 *         with nogil: CHKERR( MPI_File_write_ordered_end(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, m.buf, statusp) )
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":606
 *             self.ob_mpi, m.buf, m.count, m.dtype) )
 * 
 *     def Write_ordered_end(self, buf, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Complete a split collective write
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.Write_ordered_end", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":619
 *     # ---------------------
 * 
 *     def Get_type_extent(self, Datatype datatype):             # <<<<<<<<<<<<<<
 *         """
 *         Return the extent of datatype in the file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_111Get_type_extent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_110Get_type_extent[] = "File.Get_type_extent(self, Datatype datatype)\n\n        Return the extent of datatype in the file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_111Get_type_extent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIDatatypeObject *__pyx_v_datatype = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_type_extent (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datatype,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datatype)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Get_type_extent") < 0)) __PYX_ERR(31, 619, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_datatype = ((struct PyMPIDatatypeObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Get_type_extent", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 619, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_type_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_datatype), __pyx_ptype_6mpi4py_3MPI_Datatype, 0, "datatype", 0))) __PYX_ERR(31, 619, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_110Get_type_extent(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_datatype);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_110Get_type_extent(struct PyMPIFileObject *__pyx_v_self, struct PyMPIDatatypeObject *__pyx_v_datatype) {
  MPI_Aint __pyx_v_extent;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_type_extent", 0);

  /* "mpi4py/MPI/File.pyx":623
 *         Return the extent of datatype in the file
 *         """
 *         cdef MPI_Aint extent = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_type_extent(
 *             self.ob_mpi, datatype.ob_mpi, &extent) )
 */
  __pyx_v_extent = 0;

  /* "mpi4py/MPI/File.pyx":624
 *         """
 *         cdef MPI_Aint extent = 0
 *         with nogil: CHKERR( MPI_File_get_type_extent(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, datatype.ob_mpi, &extent) )
 *         return extent
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "mpi4py/MPI/File.pyx":625
 *         cdef MPI_Aint extent = 0
 *         with nogil: CHKERR( MPI_File_get_type_extent(
 *             self.ob_mpi, datatype.ob_mpi, &extent) )             # <<<<<<<<<<<<<<
 *         return extent
 * 
 */
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_type_extent(__pyx_v_self->ob_mpi, __pyx_v_datatype->ob_mpi, (&__pyx_v_extent))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 624, __pyx_L4_error)
      }

      /* "mpi4py/MPI/File.pyx":624
 *         """
 *         cdef MPI_Aint extent = 0
 *         with nogil: CHKERR( MPI_File_get_type_extent(             # <<<<<<<<<<<<<<
 *             self.ob_mpi, datatype.ob_mpi, &extent) )
 *         return extent
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":626
 *         with nogil: CHKERR( MPI_File_get_type_extent(
 *             self.ob_mpi, datatype.ob_mpi, &extent) )
 *         return extent             # <<<<<<<<<<<<<<
 * 
 *     # Consistency and Semantics
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_MPI_Aint(__pyx_v_extent); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":619
 *     # ---------------------
 * 
 *     def Get_type_extent(self, Datatype datatype):             # <<<<<<<<<<<<<<
 *         """
 *         Return the extent of datatype in the file
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_type_extent", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":631
 *     # -------------------------
 * 
 *     def Set_atomicity(self, bint flag):             # <<<<<<<<<<<<<<
 *         """
 *         Set the atomicity mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_113Set_atomicity(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_112Set_atomicity[] = "File.Set_atomicity(self, bool flag)\n\n        Set the atomicity mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_113Set_atomicity(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_flag;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_atomicity (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_flag,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_atomicity") < 0)) __PYX_ERR(31, 631, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 631, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_atomicity", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 631, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_atomicity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_112Set_atomicity(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_flag);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_112Set_atomicity(struct PyMPIFileObject *__pyx_v_self, int __pyx_v_flag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_atomicity", 0);

  /* "mpi4py/MPI/File.pyx":635
 *         Set the atomicity mode
 *         """
 *         with nogil: CHKERR( MPI_File_set_atomicity(self.ob_mpi, flag) )             # <<<<<<<<<<<<<<
 * 
 *     def Get_atomicity(self):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_atomicity(__pyx_v_self->ob_mpi, __pyx_v_flag)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 635, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":631
 *     # -------------------------
 * 
 *     def Set_atomicity(self, bint flag):             # <<<<<<<<<<<<<<
 *         """
 *         Set the atomicity mode
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_atomicity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":637
 *         with nogil: CHKERR( MPI_File_set_atomicity(self.ob_mpi, flag) )
 * 
 *     def Get_atomicity(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the atomicity mode
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_115Get_atomicity(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_114Get_atomicity[] = "File.Get_atomicity(self)\n\n        Return the atomicity mode\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_115Get_atomicity(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_atomicity (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_atomicity", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_atomicity", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_114Get_atomicity(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_114Get_atomicity(struct PyMPIFileObject *__pyx_v_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_atomicity", 0);

  /* "mpi4py/MPI/File.pyx":641
 *         Return the atomicity mode
 *         """
 *         cdef int flag = 0             # <<<<<<<<<<<<<<
 *         with nogil: CHKERR( MPI_File_get_atomicity(self.ob_mpi, &flag) )
 *         return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/File.pyx":642
 *         """
 *         cdef int flag = 0
 *         with nogil: CHKERR( MPI_File_get_atomicity(self.ob_mpi, &flag) )             # <<<<<<<<<<<<<<
 *         return <bint>flag
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_atomicity(__pyx_v_self->ob_mpi, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 642, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":643
 *         cdef int flag = 0
 *         with nogil: CHKERR( MPI_File_get_atomicity(self.ob_mpi, &flag) )
 *         return <bint>flag             # <<<<<<<<<<<<<<
 * 
 *     property atomicity:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":637
 *         with nogil: CHKERR( MPI_File_set_atomicity(self.ob_mpi, flag) )
 * 
 *     def Get_atomicity(self):             # <<<<<<<<<<<<<<
 *         """
 *         Return the atomicity mode
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_atomicity", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":647
 *     property atomicity:
 *         """atomicity"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_atomicity()
 *         def __set__(self, value):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_9atomicity_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_9atomicity_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_9atomicity___get__(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_9atomicity___get__(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "mpi4py/MPI/File.pyx":648
 *         """atomicity"""
 *         def __get__(self):
 *             return self.Get_atomicity()             # <<<<<<<<<<<<<<
 *         def __set__(self, value):
 *             self.Set_atomicity(value)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Get_atomicity); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":647
 *     property atomicity:
 *         """atomicity"""
 *         def __get__(self):             # <<<<<<<<<<<<<<
 *             return self.Get_atomicity()
 *         def __set__(self, value):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.atomicity.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":649
 *         def __get__(self):
 *             return self.Get_atomicity()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_atomicity(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_6mpi4py_3MPI_4File_9atomicity_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_6mpi4py_3MPI_4File_9atomicity_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_9atomicity_2__set__(((struct PyMPIFileObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_6mpi4py_3MPI_4File_9atomicity_2__set__(struct PyMPIFileObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "mpi4py/MPI/File.pyx":650
 *             return self.Get_atomicity()
 *         def __set__(self, value):
 *             self.Set_atomicity(value)             # <<<<<<<<<<<<<<
 * 
 *     def Sync(self):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_Set_atomicity); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":649
 *         def __get__(self):
 *             return self.Get_atomicity()
 *         def __set__(self, value):             # <<<<<<<<<<<<<<
 *             self.Set_atomicity(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI.File.atomicity.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":652
 *             self.Set_atomicity(value)
 * 
 *     def Sync(self):             # <<<<<<<<<<<<<<
 *         """
 *         Causes all previous writes to be
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_117Sync(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_116Sync[] = "File.Sync(self)\n\n        Causes all previous writes to be\n        transferred to the storage device\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_117Sync(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sync (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Sync", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Sync", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_116Sync(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_116Sync(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Sync", 0);

  /* "mpi4py/MPI/File.pyx":657
 *         transferred to the storage device
 *         """
 *         with nogil: CHKERR( MPI_File_sync(self.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     # Error Handling
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_sync(__pyx_v_self->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 657, __pyx_L4_error)
      }
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L4_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L5:;
      }
  }

  /* "mpi4py/MPI/File.pyx":652
 *             self.Set_atomicity(value)
 * 
 *     def Sync(self):             # <<<<<<<<<<<<<<
 *         """
 *         Causes all previous writes to be
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Sync", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":662
 *     # --------------
 * 
 *     def Get_errhandler(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the error handler for a file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_119Get_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_118Get_errhandler[] = "File.Get_errhandler(self)\n\n        Get the error handler for a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_119Get_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_errhandler (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_errhandler", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_errhandler", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_118Get_errhandler(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_118Get_errhandler(struct PyMPIFileObject *__pyx_v_self) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Get_errhandler", 0);

  /* "mpi4py/MPI/File.pyx":666
 *         Get the error handler for a file
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)             # <<<<<<<<<<<<<<
 *         CHKERR( MPI_File_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )
 *         return errhandler
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_Errhandler(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 666, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":667
 *         """
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         CHKERR( MPI_File_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )             # <<<<<<<<<<<<<<
 *         return errhandler
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_get_errhandler(__pyx_v_self->ob_mpi, (&__pyx_v_errhandler->ob_mpi))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(31, 667, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":668
 *         cdef Errhandler errhandler = <Errhandler>Errhandler.__new__(Errhandler)
 *         CHKERR( MPI_File_get_errhandler(self.ob_mpi, &errhandler.ob_mpi) )
 *         return errhandler             # <<<<<<<<<<<<<<
 * 
 *     def Set_errhandler(self, Errhandler errhandler):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_errhandler));
  __pyx_r = ((PyObject *)__pyx_v_errhandler);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":662
 *     # --------------
 * 
 *     def Get_errhandler(self):             # <<<<<<<<<<<<<<
 *         """
 *         Get the error handler for a file
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.Get_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_errhandler);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":670
 *         return errhandler
 * 
 *     def Set_errhandler(self, Errhandler errhandler):             # <<<<<<<<<<<<<<
 *         """
 *         Set the error handler for a file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_121Set_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_120Set_errhandler[] = "File.Set_errhandler(self, Errhandler errhandler)\n\n        Set the error handler for a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_121Set_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct PyMPIErrhandlerObject *__pyx_v_errhandler = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Set_errhandler (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errhandler,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errhandler)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Set_errhandler") < 0)) __PYX_ERR(31, 670, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errhandler = ((struct PyMPIErrhandlerObject *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Set_errhandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 670, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_errhandler), __pyx_ptype_6mpi4py_3MPI_Errhandler, 0, "errhandler", 0))) __PYX_ERR(31, 670, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_120Set_errhandler(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_errhandler);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_120Set_errhandler(struct PyMPIFileObject *__pyx_v_self, struct PyMPIErrhandlerObject *__pyx_v_errhandler) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Set_errhandler", 0);

  /* "mpi4py/MPI/File.pyx":674
 *         Set the error handler for a file
 *         """
 *         CHKERR( MPI_File_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )             # <<<<<<<<<<<<<<
 * 
 *     def Call_errhandler(self, int errorcode):
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_set_errhandler(__pyx_v_self->ob_mpi, __pyx_v_errhandler->ob_mpi)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 674, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":670
 *         return errhandler
 * 
 *     def Set_errhandler(self, Errhandler errhandler):             # <<<<<<<<<<<<<<
 *         """
 *         Set the error handler for a file
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Set_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":676
 *         CHKERR( MPI_File_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )
 * 
 *     def Call_errhandler(self, int errorcode):             # <<<<<<<<<<<<<<
 *         """
 *         Call the error handler installed on a file
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_123Call_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_122Call_errhandler[] = "File.Call_errhandler(self, int errorcode)\n\n        Call the error handler installed on a file\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_123Call_errhandler(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_errorcode;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Call_errhandler (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_errorcode,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_errorcode)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Call_errhandler") < 0)) __PYX_ERR(31, 676, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_errorcode = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_errorcode == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 676, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Call_errhandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 676, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Call_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_122Call_errhandler(((struct PyMPIFileObject *)__pyx_v_self), __pyx_v_errorcode);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_122Call_errhandler(struct PyMPIFileObject *__pyx_v_self, int __pyx_v_errorcode) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Call_errhandler", 0);

  /* "mpi4py/MPI/File.pyx":680
 *         Call the error handler installed on a file
 *         """
 *         CHKERR( MPI_File_call_errhandler(self.ob_mpi, errorcode) )             # <<<<<<<<<<<<<<
 * 
 *     # Fortran Handle
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_File_call_errhandler(__pyx_v_self->ob_mpi, __pyx_v_errorcode)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 680, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":676
 *         CHKERR( MPI_File_set_errhandler(self.ob_mpi, errhandler.ob_mpi) )
 * 
 *     def Call_errhandler(self, int errorcode):             # <<<<<<<<<<<<<<
 *         """
 *         Call the error handler installed on a file
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.Call_errhandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":685
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_125py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_124py2f[] = "File.py2f(self)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_125py2f(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("py2f (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("py2f", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "py2f", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_124py2f(((struct PyMPIFileObject *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_124py2f(struct PyMPIFileObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("py2f", 0);

  /* "mpi4py/MPI/File.pyx":688
 *         """
 *         """
 *         return MPI_File_c2f(self.ob_mpi)             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_MPI_Fint(MPI_File_c2f(__pyx_v_self->ob_mpi)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":685
 *     # --------------
 * 
 *     def py2f(self):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.File.py2f", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":691
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_127f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_4File_126f2py[] = "File.f2py(type cls, arg)\n\n        ";
static PyObject *__pyx_pw_6mpi4py_3MPI_4File_127f2py(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("f2py (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "f2py") < 0)) __PYX_ERR(31, 691, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("f2py", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 691, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.File.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_4File_126f2py(((PyTypeObject*)__pyx_v_cls), __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_4File_126f2py(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_arg) {
  struct PyMPIFileObject *__pyx_v_file = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  MPI_Fint __pyx_t_3;
  __Pyx_RefNannySetupContext("f2py", 0);

  /* "mpi4py/MPI/File.pyx":694
 *         """
 *         """
 *         cdef File file = <File>File.__new__(File)             # <<<<<<<<<<<<<<
 *         file.ob_mpi = MPI_File_f2c(arg)
 *         return file
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6mpi4py_3MPI_File(((PyTypeObject *)__pyx_ptype_6mpi4py_3MPI_File), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 694, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
  __pyx_v_file = ((struct PyMPIFileObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":695
 *         """
 *         cdef File file = <File>File.__new__(File)
 *         file.ob_mpi = MPI_File_f2c(arg)             # <<<<<<<<<<<<<<
 *         return file
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_As_MPI_Fint(__pyx_v_arg); if (unlikely((__pyx_t_3 == ((MPI_Fint)-1)) && PyErr_Occurred())) __PYX_ERR(31, 695, __pyx_L1_error)
  __pyx_v_file->ob_mpi = MPI_File_f2c(__pyx_t_3);

  /* "mpi4py/MPI/File.pyx":696
 *         cdef File file = <File>File.__new__(File)
 *         file.ob_mpi = MPI_File_f2c(arg)
 *         return file             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_file));
  __pyx_r = ((PyObject *)__pyx_v_file);
  goto __pyx_L0;

  /* "mpi4py/MPI/File.pyx":691
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.File.f2py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_file);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/File.pyx":712
 * # ---------------------------------
 * 
 * def Register_datarep(datarep, read_fn, write_fn, extent_fn):             # <<<<<<<<<<<<<<
 *     """
 *     Register user-defined data representations
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_39Register_datarep(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_38Register_datarep[] = "Register_datarep(datarep, read_fn, write_fn, extent_fn)\n\n    Register user-defined data representations\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_39Register_datarep = {"Register_datarep", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_39Register_datarep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_38Register_datarep};
static PyObject *__pyx_pw_6mpi4py_3MPI_39Register_datarep(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_datarep = 0;
  PyObject *__pyx_v_read_fn = 0;
  PyObject *__pyx_v_write_fn = 0;
  PyObject *__pyx_v_extent_fn = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Register_datarep (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_datarep,&__pyx_n_s_read_fn,&__pyx_n_s_write_fn,&__pyx_n_s_extent_fn,0};
    PyObject* values[4] = {0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_datarep)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_read_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Register_datarep", 1, 4, 4, 1); __PYX_ERR(31, 712, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_write_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Register_datarep", 1, 4, 4, 2); __PYX_ERR(31, 712, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_extent_fn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Register_datarep", 1, 4, 4, 3); __PYX_ERR(31, 712, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Register_datarep") < 0)) __PYX_ERR(31, 712, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
    }
    __pyx_v_datarep = values[0];
    __pyx_v_read_fn = values[1];
    __pyx_v_write_fn = values[2];
    __pyx_v_extent_fn = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Register_datarep", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 712, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Register_datarep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_38Register_datarep(__pyx_self, __pyx_v_datarep, __pyx_v_read_fn, __pyx_v_write_fn, __pyx_v_extent_fn);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_38Register_datarep(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_datarep, PyObject *__pyx_v_read_fn, PyObject *__pyx_v_write_fn, PyObject *__pyx_v_extent_fn) {
  char *__pyx_v_cdatarep;
  PyObject *__pyx_v_state = 0;
  MPI_Datarep_conversion_function *__pyx_v_rd;
  MPI_Datarep_conversion_function *__pyx_v_wr;
  MPI_Datarep_extent_function *__pyx_v_ex;
  void *__pyx_v_xs;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("Register_datarep", 0);
  __Pyx_INCREF(__pyx_v_datarep);

  /* "mpi4py/MPI/File.pyx":716
 *     Register user-defined data representations
 *     """
 *     cdef char *cdatarep = NULL             # <<<<<<<<<<<<<<
 *     datarep = asmpistr(datarep, &cdatarep)
 *     cdef object state = _p_datarep(read_fn, write_fn, extent_fn)
 */
  __pyx_v_cdatarep = NULL;

  /* "mpi4py/MPI/File.pyx":717
 *     """
 *     cdef char *cdatarep = NULL
 *     datarep = asmpistr(datarep, &cdatarep)             # <<<<<<<<<<<<<<
 *     cdef object state = _p_datarep(read_fn, write_fn, extent_fn)
 *     cdef MPI_Datarep_conversion_function *rd = MPI_CONVERSION_FN_NULL
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_asmpistr(__pyx_v_datarep, (&__pyx_v_cdatarep)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_datarep, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":718
 *     cdef char *cdatarep = NULL
 *     datarep = asmpistr(datarep, &cdatarep)
 *     cdef object state = _p_datarep(read_fn, write_fn, extent_fn)             # <<<<<<<<<<<<<<
 *     cdef MPI_Datarep_conversion_function *rd = MPI_CONVERSION_FN_NULL
 *     cdef MPI_Datarep_conversion_function *wr = MPI_CONVERSION_FN_NULL
 */
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_read_fn);
  __Pyx_GIVEREF(__pyx_v_read_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_read_fn);
  __Pyx_INCREF(__pyx_v_write_fn);
  __Pyx_GIVEREF(__pyx_v_write_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_write_fn);
  __Pyx_INCREF(__pyx_v_extent_fn);
  __Pyx_GIVEREF(__pyx_v_extent_fn);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_extent_fn);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6mpi4py_3MPI__p_datarep), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(31, 718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_state = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "mpi4py/MPI/File.pyx":719
 *     datarep = asmpistr(datarep, &cdatarep)
 *     cdef object state = _p_datarep(read_fn, write_fn, extent_fn)
 *     cdef MPI_Datarep_conversion_function *rd = MPI_CONVERSION_FN_NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datarep_conversion_function *wr = MPI_CONVERSION_FN_NULL
 *     cdef MPI_Datarep_extent_function     *ex = datarep_extent_fn
 */
  __pyx_v_rd = MPI_CONVERSION_FN_NULL;

  /* "mpi4py/MPI/File.pyx":720
 *     cdef object state = _p_datarep(read_fn, write_fn, extent_fn)
 *     cdef MPI_Datarep_conversion_function *rd = MPI_CONVERSION_FN_NULL
 *     cdef MPI_Datarep_conversion_function *wr = MPI_CONVERSION_FN_NULL             # <<<<<<<<<<<<<<
 *     cdef MPI_Datarep_extent_function     *ex = datarep_extent_fn
 *     cdef void* xs = <void*>state
 */
  __pyx_v_wr = MPI_CONVERSION_FN_NULL;

  /* "mpi4py/MPI/File.pyx":721
 *     cdef MPI_Datarep_conversion_function *rd = MPI_CONVERSION_FN_NULL
 *     cdef MPI_Datarep_conversion_function *wr = MPI_CONVERSION_FN_NULL
 *     cdef MPI_Datarep_extent_function     *ex = datarep_extent_fn             # <<<<<<<<<<<<<<
 *     cdef void* xs = <void*>state
 *     if read_fn  is not None: rd = datarep_read_fn
 */
  __pyx_v_ex = __pyx_f_6mpi4py_3MPI_datarep_extent_fn;

  /* "mpi4py/MPI/File.pyx":722
 *     cdef MPI_Datarep_conversion_function *wr = MPI_CONVERSION_FN_NULL
 *     cdef MPI_Datarep_extent_function     *ex = datarep_extent_fn
 *     cdef void* xs = <void*>state             # <<<<<<<<<<<<<<
 *     if read_fn  is not None: rd = datarep_read_fn
 *     if write_fn is not None: wr = datarep_write_fn
 */
  __pyx_v_xs = ((void *)__pyx_v_state);

  /* "mpi4py/MPI/File.pyx":723
 *     cdef MPI_Datarep_extent_function     *ex = datarep_extent_fn
 *     cdef void* xs = <void*>state
 *     if read_fn  is not None: rd = datarep_read_fn             # <<<<<<<<<<<<<<
 *     if write_fn is not None: wr = datarep_write_fn
 *     CHKERR ( MPI_Register_datarep(cdatarep, rd, wr, ex, xs) )
 */
  __pyx_t_3 = (__pyx_v_read_fn != Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
    __pyx_v_rd = __pyx_f_6mpi4py_3MPI_datarep_read_fn;
  }

  /* "mpi4py/MPI/File.pyx":724
 *     cdef void* xs = <void*>state
 *     if read_fn  is not None: rd = datarep_read_fn
 *     if write_fn is not None: wr = datarep_write_fn             # <<<<<<<<<<<<<<
 *     CHKERR ( MPI_Register_datarep(cdatarep, rd, wr, ex, xs) )
 *     datarep_registry[datarep] = state
 */
  __pyx_t_4 = (__pyx_v_write_fn != Py_None);
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {
    __pyx_v_wr = __pyx_f_6mpi4py_3MPI_datarep_write_fn;
  }

  /* "mpi4py/MPI/File.pyx":725
 *     if read_fn  is not None: rd = datarep_read_fn
 *     if write_fn is not None: wr = datarep_write_fn
 *     CHKERR ( MPI_Register_datarep(cdatarep, rd, wr, ex, xs) )             # <<<<<<<<<<<<<<
 *     datarep_registry[datarep] = state
 */
  __pyx_t_5 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Register_datarep(__pyx_v_cdatarep, __pyx_v_rd, __pyx_v_wr, __pyx_v_ex, __pyx_v_xs)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(31, 725, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":726
 *     if write_fn is not None: wr = datarep_write_fn
 *     CHKERR ( MPI_Register_datarep(cdatarep, rd, wr, ex, xs) )
 *     datarep_registry[datarep] = state             # <<<<<<<<<<<<<<
 */
  if (unlikely(__pyx_v_6mpi4py_3MPI_datarep_registry == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(31, 726, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_6mpi4py_3MPI_datarep_registry, __pyx_v_datarep, __pyx_v_state) < 0)) __PYX_ERR(31, 726, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":712
 * # ---------------------------------
 * 
 * def Register_datarep(datarep, read_fn, write_fn, extent_fn):             # <<<<<<<<<<<<<<
 *     """
 *     Register user-defined data representations
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Register_datarep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v_datarep);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":90
 * # -----------------
 * 
 * def Alloc_mem(Aint size, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Allocate memory for message passing and RMA
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_41Alloc_mem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_40Alloc_mem[] = "Alloc_mem(Aint size, Info info=INFO_NULL)\n\n    Allocate memory for message passing and RMA\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_41Alloc_mem = {"Alloc_mem", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_41Alloc_mem, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_40Alloc_mem};
static PyObject *__pyx_pw_6mpi4py_3MPI_41Alloc_mem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  MPI_Aint __pyx_v_size;
  struct PyMPIInfoObject *__pyx_v_info = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Alloc_mem (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_size,&__pyx_n_s_info,0};
    PyObject* values[2] = {0,0};
    values[1] = (PyObject *)__pyx_k__126;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_info);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Alloc_mem") < 0)) __PYX_ERR(8, 90, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_size = __Pyx_PyInt_As_MPI_Aint(values[0]); if (unlikely((__pyx_v_size == ((MPI_Aint)-1)) && PyErr_Occurred())) __PYX_ERR(8, 90, __pyx_L3_error)
    __pyx_v_info = ((struct PyMPIInfoObject *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Alloc_mem", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 90, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Alloc_mem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_info), __pyx_ptype_6mpi4py_3MPI_Info, 0, "info", 0))) __PYX_ERR(8, 90, __pyx_L1_error)
  __pyx_r = __pyx_pf_6mpi4py_3MPI_40Alloc_mem(__pyx_self, __pyx_v_size, __pyx_v_info);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_40Alloc_mem(CYTHON_UNUSED PyObject *__pyx_self, MPI_Aint __pyx_v_size, struct PyMPIInfoObject *__pyx_v_info) {
  void *__pyx_v_base;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Alloc_mem", 0);

  /* "mpi4py/MPI/MPI.pyx":94
 *     Allocate memory for message passing and RMA
 *     """
 *     cdef void *base = NULL             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Alloc_mem(size, info.ob_mpi, &base) )
 *     return tomemory(base, size)
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/MPI.pyx":95
 *     """
 *     cdef void *base = NULL
 *     CHKERR( MPI_Alloc_mem(size, info.ob_mpi, &base) )             # <<<<<<<<<<<<<<
 *     return tomemory(base, size)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Alloc_mem(__pyx_v_size, __pyx_v_info->ob_mpi, (&__pyx_v_base))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 95, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":96
 *     cdef void *base = NULL
 *     CHKERR( MPI_Alloc_mem(size, info.ob_mpi, &base) )
 *     return tomemory(base, size)             # <<<<<<<<<<<<<<
 * 
 * def Free_mem(mem):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_6mpi4py_3MPI_tomemory(__pyx_v_base, __pyx_v_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":90
 * # -----------------
 * 
 * def Alloc_mem(Aint size, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Allocate memory for message passing and RMA
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Alloc_mem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":98
 *     return tomemory(base, size)
 * 
 * def Free_mem(mem):             # <<<<<<<<<<<<<<
 *     """
 *     Free memory allocated with `Alloc_mem()`
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_43Free_mem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_42Free_mem[] = "Free_mem(mem)\n\n    Free memory allocated with `Alloc_mem()`\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_43Free_mem = {"Free_mem", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_43Free_mem, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_42Free_mem};
static PyObject *__pyx_pw_6mpi4py_3MPI_43Free_mem(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_mem = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Free_mem (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mem,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mem)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Free_mem") < 0)) __PYX_ERR(8, 98, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_mem = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Free_mem", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 98, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Free_mem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_42Free_mem(__pyx_self, __pyx_v_mem);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_42Free_mem(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_mem) {
  void *__pyx_v_base;
  struct __pyx_obj_6mpi4py_3MPI_memory *__pyx_v_m = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Free_mem", 0);

  /* "mpi4py/MPI/MPI.pyx":102
 *     Free memory allocated with `Alloc_mem()`
 *     """
 *     cdef void *base = NULL             # <<<<<<<<<<<<<<
 *     cdef memory m = asmemory(mem, &base, NULL)
 *     CHKERR( MPI_Free_mem(base) )
 */
  __pyx_v_base = NULL;

  /* "mpi4py/MPI/MPI.pyx":103
 *     """
 *     cdef void *base = NULL
 *     cdef memory m = asmemory(mem, &base, NULL)             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Free_mem(base) )
 *     m.release()
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_asmemory(__pyx_v_mem, (&__pyx_v_base), NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_m = ((struct __pyx_obj_6mpi4py_3MPI_memory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":104
 *     cdef void *base = NULL
 *     cdef memory m = asmemory(mem, &base, NULL)
 *     CHKERR( MPI_Free_mem(base) )             # <<<<<<<<<<<<<<
 *     m.release()
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Free_mem(__pyx_v_base)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 104, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":105
 *     cdef memory m = asmemory(mem, &base, NULL)
 *     CHKERR( MPI_Free_mem(base) )
 *     m.release()             # <<<<<<<<<<<<<<
 * 
 * # Initialization and Exit
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_m), __pyx_n_s_release); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":98
 *     return tomemory(base, size)
 * 
 * def Free_mem(mem):             # <<<<<<<<<<<<<<
 *     """
 *     Free memory allocated with `Alloc_mem()`
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Free_mem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_m);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":110
 * # -----------------------
 * 
 * def Init():             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_45Init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_44Init[] = "Init()\n\n    Initialize the MPI execution environment\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_45Init = {"Init", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_45Init, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_44Init};
static PyObject *__pyx_pw_6mpi4py_3MPI_45Init(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Init (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Init", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Init", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_44Init(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_44Init(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Init", 0);

  /* "mpi4py/MPI/MPI.pyx":114
 *     Initialize the MPI execution environment
 *     """
 *     CHKERR( MPI_Init(NULL, NULL) )             # <<<<<<<<<<<<<<
 *     initialize()
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Init(NULL, NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 114, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":115
 *     """
 *     CHKERR( MPI_Init(NULL, NULL) )
 *     initialize()             # <<<<<<<<<<<<<<
 * 
 * def Finalize():
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_initialize(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 115, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":110
 * # -----------------------
 * 
 * def Init():             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":117
 *     initialize()
 * 
 * def Finalize():             # <<<<<<<<<<<<<<
 *     """
 *     Terminate the MPI execution environment
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_47Finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_46Finalize[] = "Finalize()\n\n    Terminate the MPI execution environment\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_47Finalize = {"Finalize", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_47Finalize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_46Finalize};
static PyObject *__pyx_pw_6mpi4py_3MPI_47Finalize(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Finalize (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Finalize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Finalize", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_46Finalize(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_46Finalize(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("Finalize", 0);

  /* "mpi4py/MPI/MPI.pyx":121
 *     Terminate the MPI execution environment
 *     """
 *     finalize()             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Finalize() )
 * 
 */
  __pyx_f_6mpi4py_3MPI_finalize();

  /* "mpi4py/MPI/MPI.pyx":122
 *     """
 *     finalize()
 *     CHKERR( MPI_Finalize() )             # <<<<<<<<<<<<<<
 * 
 * # Levels of MPI threading support
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Finalize()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 122, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":117
 *     initialize()
 * 
 * def Finalize():             # <<<<<<<<<<<<<<
 *     """
 *     Terminate the MPI execution environment
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Finalize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":139
 * #: Multiple threads may call MPI
 * 
 * def Init_thread(int required=THREAD_MULTIPLE):             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_49Init_thread(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_48Init_thread[] = "Init_thread(int required=THREAD_MULTIPLE)\n\n    Initialize the MPI execution environment\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_49Init_thread = {"Init_thread", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_49Init_thread, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_48Init_thread};
static PyObject *__pyx_pw_6mpi4py_3MPI_49Init_thread(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_required;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Init_thread (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_required,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_required);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Init_thread") < 0)) __PYX_ERR(8, 139, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_required = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_required == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 139, __pyx_L3_error)
    } else {
      __pyx_v_required = __pyx_k__127;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Init_thread", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 139, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Init_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_48Init_thread(__pyx_self, __pyx_v_required);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_48Init_thread(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_required) {
  int __pyx_v_provided;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Init_thread", 0);

  /* "mpi4py/MPI/MPI.pyx":143
 *     Initialize the MPI execution environment
 *     """
 *     cdef int provided = MPI_THREAD_SINGLE             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Init_thread(NULL, NULL, required, &provided) )
 *     initialize()
 */
  __pyx_v_provided = MPI_THREAD_SINGLE;

  /* "mpi4py/MPI/MPI.pyx":144
 *     """
 *     cdef int provided = MPI_THREAD_SINGLE
 *     CHKERR( MPI_Init_thread(NULL, NULL, required, &provided) )             # <<<<<<<<<<<<<<
 *     initialize()
 *     return provided
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Init_thread(NULL, NULL, __pyx_v_required, (&__pyx_v_provided))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 144, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":145
 *     cdef int provided = MPI_THREAD_SINGLE
 *     CHKERR( MPI_Init_thread(NULL, NULL, required, &provided) )
 *     initialize()             # <<<<<<<<<<<<<<
 *     return provided
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_initialize(); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 145, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":146
 *     CHKERR( MPI_Init_thread(NULL, NULL, required, &provided) )
 *     initialize()
 *     return provided             # <<<<<<<<<<<<<<
 * 
 * def Query_thread():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_provided); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":139
 * #: Multiple threads may call MPI
 * 
 * def Init_thread(int required=THREAD_MULTIPLE):             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Init_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":148
 *     return provided
 * 
 * def Query_thread():             # <<<<<<<<<<<<<<
 *     """
 *     Return the level of thread support
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_51Query_thread(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_50Query_thread[] = "Query_thread()\n\n    Return the level of thread support\n    provided by the MPI library\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_51Query_thread = {"Query_thread", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_51Query_thread, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_50Query_thread};
static PyObject *__pyx_pw_6mpi4py_3MPI_51Query_thread(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Query_thread (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Query_thread", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Query_thread", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_50Query_thread(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_50Query_thread(CYTHON_UNUSED PyObject *__pyx_self) {
  int __pyx_v_provided;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Query_thread", 0);

  /* "mpi4py/MPI/MPI.pyx":153
 *     provided by the MPI library
 *     """
 *     cdef int provided = MPI_THREAD_SINGLE             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Query_thread(&provided) )
 *     return provided
 */
  __pyx_v_provided = MPI_THREAD_SINGLE;

  /* "mpi4py/MPI/MPI.pyx":154
 *     """
 *     cdef int provided = MPI_THREAD_SINGLE
 *     CHKERR( MPI_Query_thread(&provided) )             # <<<<<<<<<<<<<<
 *     return provided
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Query_thread((&__pyx_v_provided))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 154, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":155
 *     cdef int provided = MPI_THREAD_SINGLE
 *     CHKERR( MPI_Query_thread(&provided) )
 *     return provided             # <<<<<<<<<<<<<<
 * 
 * def Is_thread_main():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_provided); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":148
 *     return provided
 * 
 * def Query_thread():             # <<<<<<<<<<<<<<
 *     """
 *     Return the level of thread support
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Query_thread", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":157
 *     return provided
 * 
 * def Is_thread_main():             # <<<<<<<<<<<<<<
 *     """
 *     Indicate whether this thread called
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_53Is_thread_main(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_52Is_thread_main[] = "Is_thread_main()\n\n    Indicate whether this thread called\n    ``Init`` or ``Init_thread``\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_53Is_thread_main = {"Is_thread_main", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_53Is_thread_main, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_52Is_thread_main};
static PyObject *__pyx_pw_6mpi4py_3MPI_53Is_thread_main(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_thread_main (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_thread_main", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_thread_main", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_52Is_thread_main(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_52Is_thread_main(CYTHON_UNUSED PyObject *__pyx_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Is_thread_main", 0);

  /* "mpi4py/MPI/MPI.pyx":162
 *     ``Init`` or ``Init_thread``
 *     """
 *     cdef int flag = 1             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Is_thread_main(&flag) )
 *     return <bint>flag
 */
  __pyx_v_flag = 1;

  /* "mpi4py/MPI/MPI.pyx":163
 *     """
 *     cdef int flag = 1
 *     CHKERR( MPI_Is_thread_main(&flag) )             # <<<<<<<<<<<<<<
 *     return <bint>flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Is_thread_main((&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 163, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":164
 *     cdef int flag = 1
 *     CHKERR( MPI_Is_thread_main(&flag) )
 *     return <bint>flag             # <<<<<<<<<<<<<<
 * 
 * def Is_initialized():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":157
 *     return provided
 * 
 * def Is_thread_main():             # <<<<<<<<<<<<<<
 *     """
 *     Indicate whether this thread called
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Is_thread_main", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":166
 *     return <bint>flag
 * 
 * def Is_initialized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Init`` has been called
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_55Is_initialized(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_54Is_initialized[] = "Is_initialized()\n\n    Indicates whether ``Init`` has been called\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_55Is_initialized = {"Is_initialized", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_55Is_initialized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_54Is_initialized};
static PyObject *__pyx_pw_6mpi4py_3MPI_55Is_initialized(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_initialized (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_initialized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_initialized", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_54Is_initialized(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_54Is_initialized(CYTHON_UNUSED PyObject *__pyx_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Is_initialized", 0);

  /* "mpi4py/MPI/MPI.pyx":170
 *     Indicates whether ``Init`` has been called
 *     """
 *     cdef int flag = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Initialized(&flag) )
 *     return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/MPI.pyx":171
 *     """
 *     cdef int flag = 0
 *     CHKERR( MPI_Initialized(&flag) )             # <<<<<<<<<<<<<<
 *     return <bint>flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Initialized((&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 171, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":172
 *     cdef int flag = 0
 *     CHKERR( MPI_Initialized(&flag) )
 *     return <bint>flag             # <<<<<<<<<<<<<<
 * 
 * def Is_finalized():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":166
 *     return <bint>flag
 * 
 * def Is_initialized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Init`` has been called
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Is_initialized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":174
 *     return <bint>flag
 * 
 * def Is_finalized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Finalize`` has completed
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_57Is_finalized(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_56Is_finalized[] = "Is_finalized()\n\n    Indicates whether ``Finalize`` has completed\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_57Is_finalized = {"Is_finalized", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_57Is_finalized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_56Is_finalized};
static PyObject *__pyx_pw_6mpi4py_3MPI_57Is_finalized(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Is_finalized (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Is_finalized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Is_finalized", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_56Is_finalized(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_56Is_finalized(CYTHON_UNUSED PyObject *__pyx_self) {
  int __pyx_v_flag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Is_finalized", 0);

  /* "mpi4py/MPI/MPI.pyx":178
 *     Indicates whether ``Finalize`` has completed
 *     """
 *     cdef int flag = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Finalized(&flag) )
 *     return <bint>flag
 */
  __pyx_v_flag = 0;

  /* "mpi4py/MPI/MPI.pyx":179
 *     """
 *     cdef int flag = 0
 *     CHKERR( MPI_Finalized(&flag) )             # <<<<<<<<<<<<<<
 *     return <bint>flag
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Finalized((&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 179, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":180
 *     cdef int flag = 0
 *     CHKERR( MPI_Finalized(&flag) )
 *     return <bint>flag             # <<<<<<<<<<<<<<
 * 
 * # Implementation Information
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_flag != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":174
 *     return <bint>flag
 * 
 * def Is_finalized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Finalize`` has completed
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Is_finalized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":191
 * SUBVERSION = MPI_SUBVERSION
 * 
 * def Get_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version number of the MPI standard supported
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_59Get_version(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_58Get_version[] = "Get_version()\n\n    Obtain the version number of the MPI standard supported\n    by the implementation as a tuple ``(version, subversion)``\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_59Get_version = {"Get_version", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_59Get_version, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_58Get_version};
static PyObject *__pyx_pw_6mpi4py_3MPI_59Get_version(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_version (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_version", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_version", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_58Get_version(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_58Get_version(CYTHON_UNUSED PyObject *__pyx_self) {
  int __pyx_v_version;
  int __pyx_v_subversion;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("Get_version", 0);

  /* "mpi4py/MPI/MPI.pyx":196
 *     by the implementation as a tuple ``(version, subversion)``
 *     """
 *     cdef int version = 1             # <<<<<<<<<<<<<<
 *     cdef int subversion = 0
 *     CHKERR( MPI_Get_version(&version, &subversion) )
 */
  __pyx_v_version = 1;

  /* "mpi4py/MPI/MPI.pyx":197
 *     """
 *     cdef int version = 1
 *     cdef int subversion = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_version(&version, &subversion) )
 *     return (version, subversion)
 */
  __pyx_v_subversion = 0;

  /* "mpi4py/MPI/MPI.pyx":198
 *     cdef int version = 1
 *     cdef int subversion = 0
 *     CHKERR( MPI_Get_version(&version, &subversion) )             # <<<<<<<<<<<<<<
 *     return (version, subversion)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_version((&__pyx_v_version), (&__pyx_v_subversion))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 198, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":199
 *     cdef int subversion = 0
 *     CHKERR( MPI_Get_version(&version, &subversion) )
 *     return (version, subversion)             # <<<<<<<<<<<<<<
 * 
 * def Get_library_version():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_subversion); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":191
 * SUBVERSION = MPI_SUBVERSION
 * 
 * def Get_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version number of the MPI standard supported
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("mpi4py.MPI.Get_version", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":201
 *     return (version, subversion)
 * 
 * def Get_library_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version string of the MPI library
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_61Get_library_version(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_60Get_library_version[] = "Get_library_version()\n\n    Obtain the version string of the MPI library\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_61Get_library_version = {"Get_library_version", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_61Get_library_version, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_60Get_library_version};
static PyObject *__pyx_pw_6mpi4py_3MPI_61Get_library_version(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_library_version (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_library_version", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_library_version", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_60Get_library_version(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_60Get_library_version(CYTHON_UNUSED PyObject *__pyx_self) {
  char __pyx_v_name[(MPI_MAX_LIBRARY_VERSION_STRING + 1)];
  int __pyx_v_nlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_library_version", 0);

  /* "mpi4py/MPI/MPI.pyx":206
 *     """
 *     cdef char name[MPI_MAX_LIBRARY_VERSION_STRING+1]
 *     cdef int nlen = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_library_version(name, &nlen) )
 *     return tompistr(name, nlen)
 */
  __pyx_v_nlen = 0;

  /* "mpi4py/MPI/MPI.pyx":207
 *     cdef char name[MPI_MAX_LIBRARY_VERSION_STRING+1]
 *     cdef int nlen = 0
 *     CHKERR( MPI_Get_library_version(name, &nlen) )             # <<<<<<<<<<<<<<
 *     return tompistr(name, nlen)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_library_version(__pyx_v_name, (&__pyx_v_nlen))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 207, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":208
 *     cdef int nlen = 0
 *     CHKERR( MPI_Get_library_version(name, &nlen) )
 *     return tompistr(name, nlen)             # <<<<<<<<<<<<<<
 * 
 * # Environmental Inquires
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_name, __pyx_v_nlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":201
 *     return (version, subversion)
 * 
 * def Get_library_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version string of the MPI library
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Get_library_version", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":213
 * # ----------------------
 * 
 * def Get_processor_name():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the name of the calling processor
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_63Get_processor_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_62Get_processor_name[] = "Get_processor_name()\n\n    Obtain the name of the calling processor\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_63Get_processor_name = {"Get_processor_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_63Get_processor_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_62Get_processor_name};
static PyObject *__pyx_pw_6mpi4py_3MPI_63Get_processor_name(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Get_processor_name (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Get_processor_name", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Get_processor_name", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_62Get_processor_name(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_62Get_processor_name(CYTHON_UNUSED PyObject *__pyx_self) {
  char __pyx_v_name[(MPI_MAX_PROCESSOR_NAME + 1)];
  int __pyx_v_nlen;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("Get_processor_name", 0);

  /* "mpi4py/MPI/MPI.pyx":218
 *     """
 *     cdef char name[MPI_MAX_PROCESSOR_NAME+1]
 *     cdef int nlen = 0             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Get_processor_name(name, &nlen) )
 *     return tompistr(name, nlen)
 */
  __pyx_v_nlen = 0;

  /* "mpi4py/MPI/MPI.pyx":219
 *     cdef char name[MPI_MAX_PROCESSOR_NAME+1]
 *     cdef int nlen = 0
 *     CHKERR( MPI_Get_processor_name(name, &nlen) )             # <<<<<<<<<<<<<<
 *     return tompistr(name, nlen)
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Get_processor_name(__pyx_v_name, (&__pyx_v_nlen))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 219, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":220
 *     cdef int nlen = 0
 *     CHKERR( MPI_Get_processor_name(name, &nlen) )
 *     return tompistr(name, nlen)             # <<<<<<<<<<<<<<
 * 
 * # Timers and Synchronization
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_tompistr(__pyx_v_name, __pyx_v_nlen); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":213
 * # ----------------------
 * 
 * def Get_processor_name():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the name of the calling processor
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("mpi4py.MPI.Get_processor_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":225
 * # --------------------------
 * 
 * def Wtime():             # <<<<<<<<<<<<<<
 *     """
 *     Return an elapsed time on the calling processor
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_65Wtime(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_64Wtime[] = "Wtime()\n\n    Return an elapsed time on the calling processor\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_65Wtime = {"Wtime", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_65Wtime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_64Wtime};
static PyObject *__pyx_pw_6mpi4py_3MPI_65Wtime(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Wtime (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Wtime", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Wtime", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_64Wtime(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_64Wtime(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Wtime", 0);

  /* "mpi4py/MPI/MPI.pyx":229
 *     Return an elapsed time on the calling processor
 *     """
 *     return MPI_Wtime()             # <<<<<<<<<<<<<<
 * 
 * def Wtick():
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(MPI_Wtime()); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":225
 * # --------------------------
 * 
 * def Wtime():             # <<<<<<<<<<<<<<
 *     """
 *     Return an elapsed time on the calling processor
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Wtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":231
 *     return MPI_Wtime()
 * 
 * def Wtick():             # <<<<<<<<<<<<<<
 *     """
 *     Return the resolution of ``Wtime``
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_67Wtick(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_66Wtick[] = "Wtick()\n\n    Return the resolution of ``Wtime``\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_67Wtick = {"Wtick", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_67Wtick, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_66Wtick};
static PyObject *__pyx_pw_6mpi4py_3MPI_67Wtick(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Wtick (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("Wtick", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "Wtick", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_66Wtick(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_66Wtick(CYTHON_UNUSED PyObject *__pyx_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("Wtick", 0);

  /* "mpi4py/MPI/MPI.pyx":235
 *     Return the resolution of ``Wtime``
 *     """
 *     return MPI_Wtick()             # <<<<<<<<<<<<<<
 * 
 * # Control of Profiling
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(MPI_Wtick()); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":231
 *     return MPI_Wtime()
 * 
 * def Wtick():             # <<<<<<<<<<<<<<
 *     """
 *     Return the resolution of ``Wtime``
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("mpi4py.MPI.Wtick", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":240
 * # --------------------
 * 
 * def Pcontrol(int level):             # <<<<<<<<<<<<<<
 *     """
 *     Control profiling
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_69Pcontrol(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_68Pcontrol[] = "Pcontrol(int level)\n\n    Control profiling\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_69Pcontrol = {"Pcontrol", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_69Pcontrol, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_68Pcontrol};
static PyObject *__pyx_pw_6mpi4py_3MPI_69Pcontrol(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_level;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Pcontrol (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_level,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Pcontrol") < 0)) __PYX_ERR(8, 240, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_level = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_level == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 240, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Pcontrol", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 240, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Pcontrol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_68Pcontrol(__pyx_self, __pyx_v_level);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_68Pcontrol(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_level) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  __Pyx_RefNannySetupContext("Pcontrol", 0);

  /* "mpi4py/MPI/MPI.pyx":244
 *     Control profiling
 *     """
 *     if level < 0 or level > 2: CHKERR( MPI_ERR_ARG )             # <<<<<<<<<<<<<<
 *     CHKERR( MPI_Pcontrol(level) )
 * 
 */
  __pyx_t_2 = ((__pyx_v_level < 0) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_level > 2) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_ERR_ARG); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(8, 244, __pyx_L1_error)
  }

  /* "mpi4py/MPI/MPI.pyx":245
 *     """
 *     if level < 0 or level > 2: CHKERR( MPI_ERR_ARG )
 *     CHKERR( MPI_Pcontrol(level) )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = __pyx_f_6mpi4py_3MPI_CHKERR(MPI_Pcontrol(__pyx_v_level)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(8, 245, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":240
 * # --------------------
 * 
 * def Pcontrol(int level):             # <<<<<<<<<<<<<<
 *     """
 *     Control profiling
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI.Pcontrol", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":268
 *     int PyMPI_Get_vendor(const char**,int*,int*,int*) nogil
 * 
 * def get_vendor():             # <<<<<<<<<<<<<<
 *     """
 *     Infomation about the underlying MPI implementation
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_71get_vendor(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_70get_vendor[] = "get_vendor()\n\n    Infomation about the underlying MPI implementation\n\n    :Returns:\n      - a string with the name of the MPI implementation\n      - an integer 3-tuple version ``(major, minor, micro)``\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_71get_vendor = {"get_vendor", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_71get_vendor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_70get_vendor};
static PyObject *__pyx_pw_6mpi4py_3MPI_71get_vendor(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_vendor (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("get_vendor", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_vendor", 0))) return NULL;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_70get_vendor(__pyx_self);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_70get_vendor(CYTHON_UNUSED PyObject *__pyx_self) {
  char const *__pyx_v_name;
  int __pyx_v_major;
  int __pyx_v_minor;
  int __pyx_v_micro;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("get_vendor", 0);

  /* "mpi4py/MPI/MPI.pyx":276
 *       - an integer 3-tuple version ``(major, minor, micro)``
 *     """
 *     cdef const char *name=NULL             # <<<<<<<<<<<<<<
 *     cdef int major=0, minor=0, micro=0
 *     CHKERR( PyMPI_Get_vendor(&name, &major, &minor, &micro) )
 */
  __pyx_v_name = NULL;

  /* "mpi4py/MPI/MPI.pyx":277
 *     """
 *     cdef const char *name=NULL
 *     cdef int major=0, minor=0, micro=0             # <<<<<<<<<<<<<<
 *     CHKERR( PyMPI_Get_vendor(&name, &major, &minor, &micro) )
 *     return (mpistr(name), (major, minor, micro))
 */
  __pyx_v_major = 0;
  __pyx_v_minor = 0;
  __pyx_v_micro = 0;

  /* "mpi4py/MPI/MPI.pyx":278
 *     cdef const char *name=NULL
 *     cdef int major=0, minor=0, micro=0
 *     CHKERR( PyMPI_Get_vendor(&name, &major, &minor, &micro) )             # <<<<<<<<<<<<<<
 *     return (mpistr(name), (major, minor, micro))
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI_CHKERR(PyMPI_Get_vendor((&__pyx_v_name), (&__pyx_v_major), (&__pyx_v_minor), (&__pyx_v_micro))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 278, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":279
 *     cdef int major=0, minor=0, micro=0
 *     CHKERR( PyMPI_Get_vendor(&name, &major, &minor, &micro) )
 *     return (mpistr(name), (major, minor, micro))             # <<<<<<<<<<<<<<
 * 
 * # --------------------------------------------------------------------
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_mpistr(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_major); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_minor); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_micro); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_2 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":268
 *     int PyMPI_Get_vendor(const char**,int*,int*,int*) nogil
 * 
 * def get_vendor():             # <<<<<<<<<<<<<<
 *     """
 *     Infomation about the underlying MPI implementation
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("mpi4py.MPI.get_vendor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":287
 *     ctypedef size_t  Py_uintptr_t
 * 
 * cdef inline int _mpi_type(object arg, type cls) except -1:             # <<<<<<<<<<<<<<
 *     if isinstance(arg, type):
 *         if issubclass(arg, cls): return 1
 */

static CYTHON_INLINE int __pyx_f_6mpi4py_3MPI__mpi_type(PyObject *__pyx_v_arg, PyTypeObject *__pyx_v_cls) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("_mpi_type", 0);

  /* "mpi4py/MPI/MPI.pyx":288
 * 
 * cdef inline int _mpi_type(object arg, type cls) except -1:
 *     if isinstance(arg, type):             # <<<<<<<<<<<<<<
 *         if issubclass(arg, cls): return 1
 *     else:
 */
  __pyx_t_1 = PyType_Check(__pyx_v_arg); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":289
 * cdef inline int _mpi_type(object arg, type cls) except -1:
 *     if isinstance(arg, type):
 *         if issubclass(arg, cls): return 1             # <<<<<<<<<<<<<<
 *     else:
 *         if isinstance(arg, cls): return 1
 */
    __pyx_t_2 = PyObject_IsSubclass(__pyx_v_arg, ((PyObject *)__pyx_v_cls)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 289, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {
      __pyx_r = 1;
      goto __pyx_L0;
    }

    /* "mpi4py/MPI/MPI.pyx":288
 * 
 * cdef inline int _mpi_type(object arg, type cls) except -1:
 *     if isinstance(arg, type):             # <<<<<<<<<<<<<<
 *         if issubclass(arg, cls): return 1
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":291
 *         if issubclass(arg, cls): return 1
 *     else:
 *         if isinstance(arg, cls): return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_cls); 
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
      __pyx_r = 1;
      goto __pyx_L0;
    }
  }
  __pyx_L3:;

  /* "mpi4py/MPI/MPI.pyx":292
 *     else:
 *         if isinstance(arg, cls): return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * def _sizeof(arg):
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":287
 *     ctypedef size_t  Py_uintptr_t
 * 
 * cdef inline int _mpi_type(object arg, type cls) except -1:             # <<<<<<<<<<<<<<
 *     if isinstance(arg, type):
 *         if issubclass(arg, cls): return 1
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("mpi4py.MPI._mpi_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":294
 *     return 0
 * 
 * def _sizeof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Size in bytes of the underlying MPI handle
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_73_sizeof(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_72_sizeof[] = "_sizeof(arg)\n\n    Size in bytes of the underlying MPI handle\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_73_sizeof = {"_sizeof", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_73_sizeof, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_72_sizeof};
static PyObject *__pyx_pw_6mpi4py_3MPI_73_sizeof(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_sizeof (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_sizeof") < 0)) __PYX_ERR(8, 294, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_sizeof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 294, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._sizeof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_72_sizeof(__pyx_self, __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_72_sizeof(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("_sizeof", 0);

  /* "mpi4py/MPI/MPI.pyx":298
 *     Size in bytes of the underlying MPI handle
 *     """
 *     if _mpi_type(arg, Status):     return sizeof(MPI_Status)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Datatype):   return sizeof(MPI_Datatype)
 *     if _mpi_type(arg, Request):    return sizeof(MPI_Request)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Status); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 298, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Status))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":299
 *     """
 *     if _mpi_type(arg, Status):     return sizeof(MPI_Status)
 *     if _mpi_type(arg, Datatype):   return sizeof(MPI_Datatype)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Request):    return sizeof(MPI_Request)
 *     if _mpi_type(arg, Message):    return sizeof(MPI_Message)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Datatype); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 299, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Datatype))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":300
 *     if _mpi_type(arg, Status):     return sizeof(MPI_Status)
 *     if _mpi_type(arg, Datatype):   return sizeof(MPI_Datatype)
 *     if _mpi_type(arg, Request):    return sizeof(MPI_Request)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Message):    return sizeof(MPI_Message)
 *     if _mpi_type(arg, Op):         return sizeof(MPI_Op)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Request); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 300, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Request))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":301
 *     if _mpi_type(arg, Datatype):   return sizeof(MPI_Datatype)
 *     if _mpi_type(arg, Request):    return sizeof(MPI_Request)
 *     if _mpi_type(arg, Message):    return sizeof(MPI_Message)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Op):         return sizeof(MPI_Op)
 *     if _mpi_type(arg, Group):      return sizeof(MPI_Group)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Message); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 301, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Message))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":302
 *     if _mpi_type(arg, Request):    return sizeof(MPI_Request)
 *     if _mpi_type(arg, Message):    return sizeof(MPI_Message)
 *     if _mpi_type(arg, Op):         return sizeof(MPI_Op)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Group):      return sizeof(MPI_Group)
 *     if _mpi_type(arg, Info):       return sizeof(MPI_Info)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Op); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 302, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Op))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":303
 *     if _mpi_type(arg, Message):    return sizeof(MPI_Message)
 *     if _mpi_type(arg, Op):         return sizeof(MPI_Op)
 *     if _mpi_type(arg, Group):      return sizeof(MPI_Group)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Info):       return sizeof(MPI_Info)
 *     if _mpi_type(arg, Errhandler): return sizeof(MPI_Errhandler)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Group); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 303, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Group))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":304
 *     if _mpi_type(arg, Op):         return sizeof(MPI_Op)
 *     if _mpi_type(arg, Group):      return sizeof(MPI_Group)
 *     if _mpi_type(arg, Info):       return sizeof(MPI_Info)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Errhandler): return sizeof(MPI_Errhandler)
 *     if _mpi_type(arg, Comm):       return sizeof(MPI_Comm)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Info); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 304, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Info))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":305
 *     if _mpi_type(arg, Group):      return sizeof(MPI_Group)
 *     if _mpi_type(arg, Info):       return sizeof(MPI_Info)
 *     if _mpi_type(arg, Errhandler): return sizeof(MPI_Errhandler)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Comm):       return sizeof(MPI_Comm)
 *     if _mpi_type(arg, Win):        return sizeof(MPI_Win)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Errhandler); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 305, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Errhandler))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":306
 *     if _mpi_type(arg, Info):       return sizeof(MPI_Info)
 *     if _mpi_type(arg, Errhandler): return sizeof(MPI_Errhandler)
 *     if _mpi_type(arg, Comm):       return sizeof(MPI_Comm)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, Win):        return sizeof(MPI_Win)
 *     if _mpi_type(arg, File):       return sizeof(MPI_File)
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Comm); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 306, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Comm))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 306, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":307
 *     if _mpi_type(arg, Errhandler): return sizeof(MPI_Errhandler)
 *     if _mpi_type(arg, Comm):       return sizeof(MPI_Comm)
 *     if _mpi_type(arg, Win):        return sizeof(MPI_Win)             # <<<<<<<<<<<<<<
 *     if _mpi_type(arg, File):       return sizeof(MPI_File)
 *     raise TypeError("expecting an MPI type or instance")
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Win); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 307, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_Win))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":308
 *     if _mpi_type(arg, Comm):       return sizeof(MPI_Comm)
 *     if _mpi_type(arg, Win):        return sizeof(MPI_Win)
 *     if _mpi_type(arg, File):       return sizeof(MPI_File)             # <<<<<<<<<<<<<<
 *     raise TypeError("expecting an MPI type or instance")
 * 
 */
  __pyx_t_1 = __pyx_f_6mpi4py_3MPI__mpi_type(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_File); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(8, 308, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t((sizeof(MPI_File))); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "mpi4py/MPI/MPI.pyx":309
 *     if _mpi_type(arg, Win):        return sizeof(MPI_Win)
 *     if _mpi_type(arg, File):       return sizeof(MPI_File)
 *     raise TypeError("expecting an MPI type or instance")             # <<<<<<<<<<<<<<
 * 
 * def _addressof(arg):
 */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__128, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(8, 309, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":294
 *     return 0
 * 
 * def _sizeof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Size in bytes of the underlying MPI handle
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._sizeof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":311
 *     raise TypeError("expecting an MPI type or instance")
 * 
 * def _addressof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Memory address of the underlying MPI handle
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_75_addressof(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_74_addressof[] = "_addressof(arg)\n\n    Memory address of the underlying MPI handle\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_75_addressof = {"_addressof", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_75_addressof, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_74_addressof};
static PyObject *__pyx_pw_6mpi4py_3MPI_75_addressof(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_addressof (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_addressof") < 0)) __PYX_ERR(8, 311, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_addressof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 311, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._addressof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_74_addressof(__pyx_self, __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_74_addressof(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg) {
  void *__pyx_v_ptr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("_addressof", 0);

  /* "mpi4py/MPI/MPI.pyx":315
 *     Memory address of the underlying MPI handle
 *     """
 *     cdef void *ptr = NULL             # <<<<<<<<<<<<<<
 *     if isinstance(arg, Status):
 *         ptr = <void*>&(<Status>arg).ob_mpi
 */
  __pyx_v_ptr = NULL;

  /* "mpi4py/MPI/MPI.pyx":316
 *     """
 *     cdef void *ptr = NULL
 *     if isinstance(arg, Status):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Status>arg).ob_mpi
 *     elif isinstance(arg, Datatype):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Status); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":317
 *     cdef void *ptr = NULL
 *     if isinstance(arg, Status):
 *         ptr = <void*>&(<Status>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Datatype):
 *         ptr = <void*>&(<Datatype>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIStatusObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":316
 *     """
 *     cdef void *ptr = NULL
 *     if isinstance(arg, Status):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Status>arg).ob_mpi
 *     elif isinstance(arg, Datatype):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":318
 *     if isinstance(arg, Status):
 *         ptr = <void*>&(<Status>arg).ob_mpi
 *     elif isinstance(arg, Datatype):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Datatype>arg).ob_mpi
 *     elif isinstance(arg, Request):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Datatype); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":319
 *         ptr = <void*>&(<Status>arg).ob_mpi
 *     elif isinstance(arg, Datatype):
 *         ptr = <void*>&(<Datatype>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Request):
 *         ptr = <void*>&(<Request>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIDatatypeObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":318
 *     if isinstance(arg, Status):
 *         ptr = <void*>&(<Status>arg).ob_mpi
 *     elif isinstance(arg, Datatype):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Datatype>arg).ob_mpi
 *     elif isinstance(arg, Request):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":320
 *     elif isinstance(arg, Datatype):
 *         ptr = <void*>&(<Datatype>arg).ob_mpi
 *     elif isinstance(arg, Request):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Request>arg).ob_mpi
 *     elif isinstance(arg, Message):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Request); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":321
 *         ptr = <void*>&(<Datatype>arg).ob_mpi
 *     elif isinstance(arg, Request):
 *         ptr = <void*>&(<Request>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Message):
 *         ptr = <void*>&(<Message>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIRequestObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":320
 *     elif isinstance(arg, Datatype):
 *         ptr = <void*>&(<Datatype>arg).ob_mpi
 *     elif isinstance(arg, Request):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Request>arg).ob_mpi
 *     elif isinstance(arg, Message):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":322
 *     elif isinstance(arg, Request):
 *         ptr = <void*>&(<Request>arg).ob_mpi
 *     elif isinstance(arg, Message):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Message>arg).ob_mpi
 *     elif isinstance(arg, Op):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Message); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":323
 *         ptr = <void*>&(<Request>arg).ob_mpi
 *     elif isinstance(arg, Message):
 *         ptr = <void*>&(<Message>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Op):
 *         ptr = <void*>&(<Op>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIMessageObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":322
 *     elif isinstance(arg, Request):
 *         ptr = <void*>&(<Request>arg).ob_mpi
 *     elif isinstance(arg, Message):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Message>arg).ob_mpi
 *     elif isinstance(arg, Op):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":324
 *     elif isinstance(arg, Message):
 *         ptr = <void*>&(<Message>arg).ob_mpi
 *     elif isinstance(arg, Op):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Op>arg).ob_mpi
 *     elif isinstance(arg, Group):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Op); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":325
 *         ptr = <void*>&(<Message>arg).ob_mpi
 *     elif isinstance(arg, Op):
 *         ptr = <void*>&(<Op>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Group):
 *         ptr = <void*>&(<Group>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIOpObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":324
 *     elif isinstance(arg, Message):
 *         ptr = <void*>&(<Message>arg).ob_mpi
 *     elif isinstance(arg, Op):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Op>arg).ob_mpi
 *     elif isinstance(arg, Group):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":326
 *     elif isinstance(arg, Op):
 *         ptr = <void*>&(<Op>arg).ob_mpi
 *     elif isinstance(arg, Group):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Group>arg).ob_mpi
 *     elif isinstance(arg, Info):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Group); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":327
 *         ptr = <void*>&(<Op>arg).ob_mpi
 *     elif isinstance(arg, Group):
 *         ptr = <void*>&(<Group>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Info):
 *         ptr = <void*>&(<Info>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIGroupObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":326
 *     elif isinstance(arg, Op):
 *         ptr = <void*>&(<Op>arg).ob_mpi
 *     elif isinstance(arg, Group):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Group>arg).ob_mpi
 *     elif isinstance(arg, Info):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":328
 *     elif isinstance(arg, Group):
 *         ptr = <void*>&(<Group>arg).ob_mpi
 *     elif isinstance(arg, Info):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Info>arg).ob_mpi
 *     elif isinstance(arg, Errhandler):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Info); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":329
 *         ptr = <void*>&(<Group>arg).ob_mpi
 *     elif isinstance(arg, Info):
 *         ptr = <void*>&(<Info>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Errhandler):
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIInfoObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":328
 *     elif isinstance(arg, Group):
 *         ptr = <void*>&(<Group>arg).ob_mpi
 *     elif isinstance(arg, Info):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Info>arg).ob_mpi
 *     elif isinstance(arg, Errhandler):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":330
 *     elif isinstance(arg, Info):
 *         ptr = <void*>&(<Info>arg).ob_mpi
 *     elif isinstance(arg, Errhandler):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi
 *     elif isinstance(arg, Comm):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Errhandler); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":331
 *         ptr = <void*>&(<Info>arg).ob_mpi
 *     elif isinstance(arg, Errhandler):
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Comm):
 *         ptr = <void*>&(<Comm>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIErrhandlerObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":330
 *     elif isinstance(arg, Info):
 *         ptr = <void*>&(<Info>arg).ob_mpi
 *     elif isinstance(arg, Errhandler):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi
 *     elif isinstance(arg, Comm):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":332
 *     elif isinstance(arg, Errhandler):
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi
 *     elif isinstance(arg, Comm):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Comm>arg).ob_mpi
 *     elif isinstance(arg, Win):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Comm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":333
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi
 *     elif isinstance(arg, Comm):
 *         ptr = <void*>&(<Comm>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Win):
 *         ptr = <void*>&(<Win>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPICommObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":332
 *     elif isinstance(arg, Errhandler):
 *         ptr = <void*>&(<Errhandler>arg).ob_mpi
 *     elif isinstance(arg, Comm):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Comm>arg).ob_mpi
 *     elif isinstance(arg, Win):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":334
 *     elif isinstance(arg, Comm):
 *         ptr = <void*>&(<Comm>arg).ob_mpi
 *     elif isinstance(arg, Win):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Win>arg).ob_mpi
 *     elif isinstance(arg, File):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Win); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":335
 *         ptr = <void*>&(<Comm>arg).ob_mpi
 *     elif isinstance(arg, Win):
 *         ptr = <void*>&(<Win>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, File):
 *         ptr = <void*>&(<File>arg).ob_mpi
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIWinObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":334
 *     elif isinstance(arg, Comm):
 *         ptr = <void*>&(<Comm>arg).ob_mpi
 *     elif isinstance(arg, Win):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<Win>arg).ob_mpi
 *     elif isinstance(arg, File):
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":336
 *     elif isinstance(arg, Win):
 *         ptr = <void*>&(<Win>arg).ob_mpi
 *     elif isinstance(arg, File):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<File>arg).ob_mpi
 *     else:
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_File); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (likely(__pyx_t_2)) {

    /* "mpi4py/MPI/MPI.pyx":337
 *         ptr = <void*>&(<Win>arg).ob_mpi
 *     elif isinstance(arg, File):
 *         ptr = <void*>&(<File>arg).ob_mpi             # <<<<<<<<<<<<<<
 *     else:
 *         raise TypeError("expecting an MPI instance")
 */
    __pyx_v_ptr = ((void *)(&((struct PyMPIFileObject *)__pyx_v_arg)->ob_mpi));

    /* "mpi4py/MPI/MPI.pyx":336
 *     elif isinstance(arg, Win):
 *         ptr = <void*>&(<Win>arg).ob_mpi
 *     elif isinstance(arg, File):             # <<<<<<<<<<<<<<
 *         ptr = <void*>&(<File>arg).ob_mpi
 *     else:
 */
    goto __pyx_L3;
  }

  /* "mpi4py/MPI/MPI.pyx":339
 *         ptr = <void*>&(<File>arg).ob_mpi
 *     else:
 *         raise TypeError("expecting an MPI instance")             # <<<<<<<<<<<<<<
 *     return PyLong_FromVoidPtr(ptr)
 * 
 */
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__129, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(8, 339, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "mpi4py/MPI/MPI.pyx":340
 *     else:
 *         raise TypeError("expecting an MPI instance")
 *     return PyLong_FromVoidPtr(ptr)             # <<<<<<<<<<<<<<
 * 
 * def _handleof(arg):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyLong_FromVoidPtr(__pyx_v_ptr); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "mpi4py/MPI/MPI.pyx":311
 *     raise TypeError("expecting an MPI type or instance")
 * 
 * def _addressof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Memory address of the underlying MPI handle
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._addressof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "mpi4py/MPI/MPI.pyx":342
 *     return PyLong_FromVoidPtr(ptr)
 * 
 * def _handleof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Unsigned integer value with the underlying MPI handle
 */

/* Python wrapper */
static PyObject *__pyx_pw_6mpi4py_3MPI_77_handleof(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_6mpi4py_3MPI_76_handleof[] = "_handleof(arg)\n\n    Unsigned integer value with the underlying MPI handle\n    ";
static PyMethodDef __pyx_mdef_6mpi4py_3MPI_77_handleof = {"_handleof", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_77_handleof, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_76_handleof};
static PyObject *__pyx_pw_6mpi4py_3MPI_77_handleof(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_arg = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_handleof (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arg,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_arg)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_handleof") < 0)) __PYX_ERR(8, 342, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_arg = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_handleof", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 342, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("mpi4py.MPI._handleof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6mpi4py_3MPI_76_handleof(__pyx_self, __pyx_v_arg);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_6mpi4py_3MPI_76_handleof(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_arg) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("_handleof", 0);

  /* "mpi4py/MPI/MPI.pyx":346
 *     Unsigned integer value with the underlying MPI handle
 *     """
 *     if isinstance(arg, Status):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError
 *     elif isinstance(arg, Datatype):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Status); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (unlikely(__pyx_t_2)) {

    /* "mpi4py/MPI/MPI.pyx":347
 *     """
 *     if isinstance(arg, Status):
 *         raise NotImplementedError             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Datatype):
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)
 */
    __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
    __PYX_ERR(8, 347, __pyx_L1_error)

    /* "mpi4py/MPI/MPI.pyx":346
 *     Unsigned integer value with the underlying MPI handle
 *     """
 *     if isinstance(arg, Status):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError
 *     elif isinstance(arg, Datatype):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":348
 *     if isinstance(arg, Status):
 *         raise NotImplementedError
 *     elif isinstance(arg, Datatype):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)
 *     elif isinstance(arg, Request):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Datatype); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":349
 *         raise NotImplementedError
 *     elif isinstance(arg, Datatype):
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Request):
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIDatatypeObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":348
 *     if isinstance(arg, Status):
 *         raise NotImplementedError
 *     elif isinstance(arg, Datatype):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)
 *     elif isinstance(arg, Request):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":350
 *     elif isinstance(arg, Datatype):
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)
 *     elif isinstance(arg, Request):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)
 *     elif isinstance(arg, Message):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Request); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":351
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)
 *     elif isinstance(arg, Request):
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Message):
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIRequestObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":350
 *     elif isinstance(arg, Datatype):
 *         return <Py_uintptr_t>((<Datatype>arg).ob_mpi)
 *     elif isinstance(arg, Request):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)
 *     elif isinstance(arg, Message):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":352
 *     elif isinstance(arg, Request):
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)
 *     elif isinstance(arg, Message):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)
 *     elif isinstance(arg, Op):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Message); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":353
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)
 *     elif isinstance(arg, Message):
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Op):
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIMessageObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":352
 *     elif isinstance(arg, Request):
 *         return <Py_uintptr_t>((<Request>arg).ob_mpi)
 *     elif isinstance(arg, Message):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)
 *     elif isinstance(arg, Op):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":354
 *     elif isinstance(arg, Message):
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)
 *     elif isinstance(arg, Op):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)
 *     elif isinstance(arg, Group):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Op); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":355
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)
 *     elif isinstance(arg, Op):
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Group):
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIOpObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":354
 *     elif isinstance(arg, Message):
 *         return <Py_uintptr_t>((<Message>arg).ob_mpi)
 *     elif isinstance(arg, Op):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)
 *     elif isinstance(arg, Group):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":356
 *     elif isinstance(arg, Op):
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)
 *     elif isinstance(arg, Group):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)
 *     elif isinstance(arg, Info):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Group); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":357
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)
 *     elif isinstance(arg, Group):
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Info):
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIGroupObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":356
 *     elif isinstance(arg, Op):
 *         return <Py_uintptr_t>((<Op>arg).ob_mpi)
 *     elif isinstance(arg, Group):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)
 *     elif isinstance(arg, Info):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":358
 *     elif isinstance(arg, Group):
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)
 *     elif isinstance(arg, Info):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)
 *     elif isinstance(arg, Errhandler):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Info); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":359
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)
 *     elif isinstance(arg, Info):
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Errhandler):
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIInfoObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":358
 *     elif isinstance(arg, Group):
 *         return <Py_uintptr_t>((<Group>arg).ob_mpi)
 *     elif isinstance(arg, Info):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)
 *     elif isinstance(arg, Errhandler):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":360
 *     elif isinstance(arg, Info):
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)
 *     elif isinstance(arg, Errhandler):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)
 *     elif isinstance(arg, Comm):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Errhandler); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":361
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)
 *     elif isinstance(arg, Errhandler):
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Comm):
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIErrhandlerObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":360
 *     elif isinstance(arg, Info):
 *         return <Py_uintptr_t>((<Info>arg).ob_mpi)
 *     elif isinstance(arg, Errhandler):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)
 *     elif isinstance(arg, Comm):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":362
 *     elif isinstance(arg, Errhandler):
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)
 *     elif isinstance(arg, Comm):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)
 *     elif isinstance(arg, Win):
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Comm); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "mpi4py/MPI/MPI.pyx":363
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)
 *     elif isinstance(arg, Comm):
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, Win):
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPICommObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":362
 *     elif isinstance(arg, Errhandler):
 *         return <Py_uintptr_t>((<Errhandler>arg).ob_mpi)
 *     elif isinstance(arg, Comm):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)
 *     elif isinstance(arg, Win):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":364
 *     elif isinstance(arg, Comm):
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)
 *     elif isinstance(arg, Win):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)
 *     elif isinstance(arg, File):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_Win); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "mpi4py/MPI/MPI.pyx":365
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)
 *     elif isinstance(arg, Win):
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     elif isinstance(arg, File):
 *         return <Py_uintptr_t>((<File>arg).ob_mpi)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIWinObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":364
 *     elif isinstance(arg, Comm):
 *         return <Py_uintptr_t>((<Comm>arg).ob_mpi)
 *     elif isinstance(arg, Win):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)
 *     elif isinstance(arg, File):
 */
  }

  /* "mpi4py/MPI/MPI.pyx":366
 *     elif isinstance(arg, Win):
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)
 *     elif isinstance(arg, File):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<File>arg).ob_mpi)
 *     else:
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_ptype_6mpi4py_3MPI_File); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (likely(__pyx_t_2)) {

    /* "mpi4py/MPI/MPI.pyx":367
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)
 *     elif isinstance(arg, File):
 *         return <Py_uintptr_t>((<File>arg).ob_mpi)             # <<<<<<<<<<<<<<
 *     else:
 *         raise TypeError("expecting an MPI instance")
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((Py_uintptr_t)((struct PyMPIFileObject *)__pyx_v_arg)->ob_mpi)); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "mpi4py/MPI/MPI.pyx":366
 *     elif isinstance(arg, Win):
 *         return <Py_uintptr_t>((<Win>arg).ob_mpi)
 *     elif isinstance(arg, File):             # <<<<<<<<<<<<<<
 *         return <Py_uintptr_t>((<File>arg).ob_mpi)
 *     else:
 */
  }

  /* "mpi4py/MPI/MPI.pyx":369
 *         return <Py_uintptr_t>((<File>arg).ob_mpi)
 *     else:
 *         raise TypeError("expecting an MPI instance")             # <<<<<<<<<<<<<<
 * 
 * # --------------------------------------------------------------------
 */
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__129, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(8, 369, __pyx_L1_error)
  }

  /* "mpi4py/MPI/MPI.pyx":342
 *     return PyLong_FromVoidPtr(ptr)
 * 
 * def _handleof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Unsigned integer value with the underlying MPI handle
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("mpi4py.MPI._handleof", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Status(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_6Status_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Status(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6Status_source(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6Status_6source_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_6Status_source(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_6Status_6source_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6Status_tag(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6Status_3tag_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_6Status_tag(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_6Status_3tag_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6Status_error(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6Status_5error_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_6Status_error(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_6Status_5error_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6Status_count(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6Status_5count_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6Status_cancelled(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6Status_9cancelled_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_6Status_cancelled(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_6Status_9cancelled_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Status[] = {
  {"Get_source", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_5Get_source, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_4Get_source},
  {"Set_source", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_7Set_source, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_6Set_source},
  {"Get_tag", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_9Get_tag, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_8Get_tag},
  {"Set_tag", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_11Set_tag, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_10Set_tag},
  {"Get_error", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_13Get_error, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_12Get_error},
  {"Set_error", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_15Set_error, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_14Set_error},
  {"Get_count", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_17Get_count, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_16Get_count},
  {"Get_elements", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_19Get_elements, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_18Get_elements},
  {"Set_elements", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_21Set_elements, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_20Set_elements},
  {"Is_cancelled", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_23Is_cancelled, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_22Is_cancelled},
  {"Set_cancelled", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_25Set_cancelled, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_24Set_cancelled},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_27py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_26py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Status_29f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Status_28f2py},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Status[] = {
  {(char *)"source", __pyx_getprop_6mpi4py_3MPI_6Status_source, __pyx_setprop_6mpi4py_3MPI_6Status_source, (char *)"source", 0},
  {(char *)"tag", __pyx_getprop_6mpi4py_3MPI_6Status_tag, __pyx_setprop_6mpi4py_3MPI_6Status_tag, (char *)"tag", 0},
  {(char *)"error", __pyx_getprop_6mpi4py_3MPI_6Status_error, __pyx_setprop_6mpi4py_3MPI_6Status_error, (char *)"error", 0},
  {(char *)"count", __pyx_getprop_6mpi4py_3MPI_6Status_count, 0, (char *)"byte count", 0},
  {(char *)"cancelled", __pyx_getprop_6mpi4py_3MPI_6Status_cancelled, __pyx_setprop_6mpi4py_3MPI_6Status_cancelled, (char *)"\n        cancelled state\n        ", 0},
  {0, 0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIStatus_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Status", /*tp_name*/
  sizeof(struct PyMPIStatusObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Status, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Status\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_6Status_3__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Status, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Status, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Status, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Datatype(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_8Datatype_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Datatype(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_8Datatype_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_4size_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_extent(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_6extent_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_lb(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_2lb_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_ub(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_2ub_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_true_extent(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_11true_extent_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_true_lb(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_7true_lb_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_true_ub(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_7true_ub_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_envelope(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_8envelope_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_contents(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_8contents_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_combiner(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_8combiner_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_is_named(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_8is_named_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_is_predefined(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_13is_predefined_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Datatype_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Datatype_4name_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_8Datatype_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_8Datatype_4name_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Datatype[] = {
  {"Get_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_9Get_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_8Get_size},
  {"Get_extent", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_11Get_extent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_10Get_extent},
  {"Dup", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_13Dup, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_12Dup},
  {"Create_contiguous", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_15Create_contiguous, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_14Create_contiguous},
  {"Create_vector", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_17Create_vector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_16Create_vector},
  {"Create_hvector", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_19Create_hvector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_18Create_hvector},
  {"Create_indexed", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_21Create_indexed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_20Create_indexed},
  {"Create_hindexed", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_23Create_hindexed, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_22Create_hindexed},
  {"Create_indexed_block", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_25Create_indexed_block, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_24Create_indexed_block},
  {"Create_hindexed_block", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_27Create_hindexed_block, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_26Create_hindexed_block},
  {"Create_struct", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_29Create_struct, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_28Create_struct},
  {"Create_subarray", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_31Create_subarray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_30Create_subarray},
  {"Create_darray", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_33Create_darray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_32Create_darray},
  {"Create_f90_integer", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_35Create_f90_integer, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_34Create_f90_integer},
  {"Create_f90_real", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_37Create_f90_real, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_36Create_f90_real},
  {"Create_f90_complex", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_39Create_f90_complex, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_38Create_f90_complex},
  {"Match_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_41Match_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_40Match_size},
  {"Commit", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_43Commit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_42Commit},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_45Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_44Free},
  {"Create_resized", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_47Create_resized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_46Create_resized},
  {"Get_true_extent", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_49Get_true_extent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_48Get_true_extent},
  {"Get_envelope", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_51Get_envelope, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_50Get_envelope},
  {"Get_contents", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_53Get_contents, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_52Get_contents},
  {"decode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_55decode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_54decode},
  {"Pack", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_57Pack, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_56Pack},
  {"Unpack", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_59Unpack, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_58Unpack},
  {"Pack_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_61Pack_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_60Pack_size},
  {"Pack_external", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_63Pack_external, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_62Pack_external},
  {"Unpack_external", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_65Unpack_external, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_64Unpack_external},
  {"Pack_external_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_67Pack_external_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_66Pack_external_size},
  {"Get_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_69Get_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_68Get_attr},
  {"Set_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_71Set_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_70Set_attr},
  {"Delete_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_73Delete_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_72Delete_attr},
  {"Create_keyval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_75Create_keyval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_74Create_keyval},
  {"Free_keyval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_77Free_keyval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_76Free_keyval},
  {"Get_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_79Get_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_78Get_name},
  {"Set_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_81Set_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_80Set_name},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_83py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_82py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Datatype_85f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Datatype_84f2py},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Datatype[] = {
  {(char *)"size", __pyx_getprop_6mpi4py_3MPI_8Datatype_size, 0, (char *)"size (in bytes)", 0},
  {(char *)"extent", __pyx_getprop_6mpi4py_3MPI_8Datatype_extent, 0, (char *)"extent", 0},
  {(char *)"lb", __pyx_getprop_6mpi4py_3MPI_8Datatype_lb, 0, (char *)"lower bound", 0},
  {(char *)"ub", __pyx_getprop_6mpi4py_3MPI_8Datatype_ub, 0, (char *)"upper bound", 0},
  {(char *)"true_extent", __pyx_getprop_6mpi4py_3MPI_8Datatype_true_extent, 0, (char *)"true extent", 0},
  {(char *)"true_lb", __pyx_getprop_6mpi4py_3MPI_8Datatype_true_lb, 0, (char *)"true lower bound", 0},
  {(char *)"true_ub", __pyx_getprop_6mpi4py_3MPI_8Datatype_true_ub, 0, (char *)"true upper bound", 0},
  {(char *)"envelope", __pyx_getprop_6mpi4py_3MPI_8Datatype_envelope, 0, (char *)"datatype envelope", 0},
  {(char *)"contents", __pyx_getprop_6mpi4py_3MPI_8Datatype_contents, 0, (char *)"datatype contents", 0},
  {(char *)"combiner", __pyx_getprop_6mpi4py_3MPI_8Datatype_combiner, 0, (char *)"datatype combiner", 0},
  {(char *)"is_named", __pyx_getprop_6mpi4py_3MPI_8Datatype_is_named, 0, (char *)"is a named datatype", 0},
  {(char *)"is_predefined", __pyx_getprop_6mpi4py_3MPI_8Datatype_is_predefined, 0, (char *)"is a predefined datatype", 0},
  {(char *)"name", __pyx_getprop_6mpi4py_3MPI_8Datatype_name, __pyx_setprop_6mpi4py_3MPI_8Datatype_name, (char *)"datatype name", 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Datatype = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_8Datatype_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIDatatype_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Datatype", /*tp_name*/
  sizeof(struct PyMPIDatatypeObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Datatype, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Datatype, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Datatype\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_8Datatype_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Datatype, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Datatype, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Datatype, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Request(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct PyMPIRequestObject *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct PyMPIRequestObject *)o);
  p->ob_buf = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_7Request_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Request(PyObject *o) {
  struct PyMPIRequestObject *p = (struct PyMPIRequestObject *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_7Request_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->ob_buf);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI_Request(PyObject *o, visitproc v, void *a) {
  int e;
  struct PyMPIRequestObject *p = (struct PyMPIRequestObject *)o;
  if (p->ob_buf) {
    e = (*v)(p->ob_buf, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI_Request(PyObject *o) {
  PyObject* tmp;
  struct PyMPIRequestObject *p = (struct PyMPIRequestObject *)o;
  tmp = ((PyObject*)p->ob_buf);
  p->ob_buf = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Request[] = {
  {"Wait", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_9Wait, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_8Wait},
  {"Test", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_11Test, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_10Test},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_13Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_12Free},
  {"Get_status", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_15Get_status, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_14Get_status},
  {"Waitany", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_17Waitany, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_16Waitany},
  {"Testany", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_19Testany, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_18Testany},
  {"Waitall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_21Waitall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_20Waitall},
  {"Testall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_23Testall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_22Testall},
  {"Waitsome", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_25Waitsome, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_24Waitsome},
  {"Testsome", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_27Testsome, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_26Testsome},
  {"Cancel", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_29Cancel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_28Cancel},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_31py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_30py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_33f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_32f2py},
  {"wait", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_35wait, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_34wait},
  {"test", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_37test, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_36test},
  {"waitany", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_39waitany, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_38waitany},
  {"testany", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_41testany, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_40testany},
  {"waitall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_43waitall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_42waitall},
  {"testall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Request_45testall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Request_44testall},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Request = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_7Request_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIRequest_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Request", /*tp_name*/
  sizeof(struct PyMPIRequestObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Request, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Request, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    Request\n    ", /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI_Request, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI_Request, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_7Request_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Request, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Request, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Prequest(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Request(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_8Prequest_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Prequest[] = {
  {"Start", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Prequest_3Start, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Prequest_2Start},
  {"Startall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Prequest_5Startall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Prequest_4Startall},
  {0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIPrequest_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Prequest", /*tp_name*/
  sizeof(struct PyMPIPrequestObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Request, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    Persistent request\n    ", /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI_Request, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI_Request, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Prequest, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Prequest, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Grequest(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Request(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_8Grequest_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Grequest[] = {
  {"Start", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Grequest_3Start, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Grequest_2Start},
  {"Complete", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Grequest_5Complete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Grequest_4Complete},
  {0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIGrequest_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Grequest", /*tp_name*/
  sizeof(struct PyMPIGrequestObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Request, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    Generalized request\n    ", /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI_Request, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI_Request, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Grequest, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Grequest, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Message(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct PyMPIMessageObject *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct PyMPIMessageObject *)o);
  p->ob_buf = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_7Message_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Message(PyObject *o) {
  struct PyMPIMessageObject *p = (struct PyMPIMessageObject *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_7Message_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->ob_buf);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI_Message(PyObject *o, visitproc v, void *a) {
  int e;
  struct PyMPIMessageObject *p = (struct PyMPIMessageObject *)o;
  if (p->ob_buf) {
    e = (*v)(p->ob_buf, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI_Message(PyObject *o) {
  PyObject* tmp;
  struct PyMPIMessageObject *p = (struct PyMPIMessageObject *)o;
  tmp = ((PyObject*)p->ob_buf);
  p->ob_buf = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Message[] = {
  {"Probe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_9Probe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_8Probe},
  {"Iprobe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_11Iprobe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_10Iprobe},
  {"Recv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_13Recv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_12Recv},
  {"Irecv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_15Irecv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_14Irecv},
  {"probe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_17probe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_16probe},
  {"iprobe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_19iprobe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_18iprobe},
  {"recv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_21recv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_20recv},
  {"irecv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_23irecv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_22irecv},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_25py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_24py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_7Message_27f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_7Message_26f2py},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Message = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_7Message_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIMessage_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Message", /*tp_name*/
  sizeof(struct PyMPIMessageObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Message, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Message, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    Message\n    ", /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI_Message, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI_Message, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_7Message_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Message, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Message, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Op(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_2Op_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Op(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_2Op_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_2Op_is_commutative(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_2Op_14is_commutative_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_2Op_is_predefined(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_2Op_13is_predefined_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Op[] = {
  {"Create", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_2Op_11Create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2Op_10Create},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_2Op_13Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2Op_12Free},
  {"Is_commutative", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_2Op_15Is_commutative, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2Op_14Is_commutative},
  {"Reduce_local", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_2Op_17Reduce_local, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2Op_16Reduce_local},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_2Op_19py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2Op_18py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_2Op_21f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_2Op_20f2py},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Op[] = {
  {(char *)"is_commutative", __pyx_getprop_6mpi4py_3MPI_2Op_is_commutative, 0, (char *)"is commutative", 0},
  {(char *)"is_predefined", __pyx_getprop_6mpi4py_3MPI_2Op_is_predefined, 0, (char *)"is a predefined operation", 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Op = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_2Op_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIOp_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Op", /*tp_name*/
  sizeof(struct PyMPIOpObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Op, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Op, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  __pyx_pw_6mpi4py_3MPI_2Op_9__call__, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Op\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_2Op_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Op, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Op, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Op, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Group(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_5Group_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Group(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_5Group_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_5Group_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_5Group_4size_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_5Group_rank(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_5Group_4rank_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Group[] = {
  {"Get_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_9Get_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_8Get_size},
  {"Get_rank", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_11Get_rank, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_10Get_rank},
  {"Translate_ranks", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_13Translate_ranks, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_12Translate_ranks},
  {"Compare", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_15Compare, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_14Compare},
  {"Dup", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_17Dup, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_16Dup},
  {"Union", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_19Union, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_18Union},
  {"Intersection", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_21Intersection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_20Intersection},
  {"Difference", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_23Difference, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_22Difference},
  {"Incl", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_25Incl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_24Incl},
  {"Excl", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_27Excl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_26Excl},
  {"Range_incl", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_29Range_incl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_28Range_incl},
  {"Range_excl", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_31Range_excl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_30Range_excl},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_33Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_32Free},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_35py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_34py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_5Group_37f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_5Group_36f2py},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Group[] = {
  {(char *)"size", __pyx_getprop_6mpi4py_3MPI_5Group_size, 0, (char *)"number of processes in group", 0},
  {(char *)"rank", __pyx_getprop_6mpi4py_3MPI_5Group_rank, 0, (char *)"rank of this process in group", 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Group = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_5Group_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIGroup_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Group", /*tp_name*/
  sizeof(struct PyMPIGroupObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Group, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Group, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Group\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_5Group_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Group, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Group, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Group, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Info(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_4Info_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Info(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_4Info_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6mpi4py_3MPI_Info(PyObject *o, Py_ssize_t i) {
  PyObject *r;
  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static int __pyx_mp_ass_subscript_6mpi4py_3MPI_Info(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_4Info_37__setitem__(o, i, v);
  }
  else {
    return __pyx_pw_6mpi4py_3MPI_4Info_39__delitem__(o, i);
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Info[] = {
  {"Create", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_9Create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_8Create},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_11Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_10Free},
  {"Dup", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_13Dup, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_12Dup},
  {"Get", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_15Get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_14Get},
  {"Set", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_17Set, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_16Set},
  {"Delete", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_19Delete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_18Delete},
  {"Get_nkeys", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_21Get_nkeys, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_20Get_nkeys},
  {"Get_nthkey", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_23Get_nthkey, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_22Get_nthkey},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_25py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_24py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_27f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_26f2py},
  {"get", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_41get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_40get},
  {"keys", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_43keys, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_42keys},
  {"values", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_45values, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_44values},
  {"items", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_47items, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_46items},
  {"update", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_49update, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_48update},
  {"copy", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_51copy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_50copy},
  {"clear", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Info_53clear, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Info_52clear},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Info = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_4Info_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

static PySequenceMethods __pyx_tp_as_sequence_Info = {
  __pyx_pw_6mpi4py_3MPI_4Info_29__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6mpi4py_3MPI_Info, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  __pyx_pw_6mpi4py_3MPI_4Info_31__contains__, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Info = {
  __pyx_pw_6mpi4py_3MPI_4Info_29__len__, /*mp_length*/
  __pyx_pw_6mpi4py_3MPI_4Info_35__getitem__, /*mp_subscript*/
  __pyx_mp_ass_subscript_6mpi4py_3MPI_Info, /*mp_ass_subscript*/
};

DL_EXPORT(PyTypeObject) PyMPIInfo_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Info", /*tp_name*/
  sizeof(struct PyMPIInfoObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Info, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Info, /*tp_as_number*/
  &__pyx_tp_as_sequence_Info, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Info, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Info\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_4Info_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_6mpi4py_3MPI_4Info_33__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Info, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Info, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Errhandler(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_10Errhandler_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Errhandler(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_10Errhandler_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Errhandler[] = {
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_10Errhandler_9Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_10Errhandler_8Free},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_10Errhandler_11py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_10Errhandler_10py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_10Errhandler_13f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_10Errhandler_12f2py},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Errhandler = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_10Errhandler_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIErrhandler_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Errhandler", /*tp_name*/
  sizeof(struct PyMPIErrhandlerObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Errhandler, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Errhandler, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Error Handler\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_10Errhandler_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Errhandler, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Errhandler, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Comm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_4Comm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Comm(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_4Comm_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_group(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_5group_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_4size_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_rank(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_4rank_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_info(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_4info_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_4Comm_info(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_4Comm_4info_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_is_inter(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_8is_inter_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_is_intra(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_8is_intra_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_topology(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_8topology_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_is_topo(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_7is_topo_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4Comm_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4Comm_4name_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_4Comm_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_4Comm_4name_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Comm[] = {
  {"Get_group", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_9Get_group, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_8Get_group},
  {"Get_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_11Get_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_10Get_size},
  {"Get_rank", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_13Get_rank, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_12Get_rank},
  {"Compare", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_15Compare, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_14Compare},
  {"Clone", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_17Clone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_16Clone},
  {"Dup", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_19Dup, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_18Dup},
  {"Dup_with_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_21Dup_with_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_20Dup_with_info},
  {"Idup", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_23Idup, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_22Idup},
  {"Create", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_25Create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_24Create},
  {"Create_group", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_27Create_group, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_26Create_group},
  {"Split", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_29Split, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_28Split},
  {"Split_type", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_31Split_type, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_30Split_type},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_33Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_32Free},
  {"Set_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_35Set_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_34Set_info},
  {"Get_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_37Get_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_36Get_info},
  {"Send", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_39Send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_38Send},
  {"Recv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_41Recv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_40Recv},
  {"Sendrecv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_43Sendrecv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_42Sendrecv},
  {"Sendrecv_replace", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_45Sendrecv_replace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_44Sendrecv_replace},
  {"Isend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_47Isend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_46Isend},
  {"Irecv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_49Irecv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_48Irecv},
  {"Probe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_51Probe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_50Probe},
  {"Iprobe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_53Iprobe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_52Iprobe},
  {"Mprobe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_55Mprobe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_54Mprobe},
  {"Improbe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_57Improbe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_56Improbe},
  {"Send_init", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_59Send_init, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_58Send_init},
  {"Recv_init", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_61Recv_init, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_60Recv_init},
  {"Bsend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_63Bsend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_62Bsend},
  {"Ssend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_65Ssend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_64Ssend},
  {"Rsend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_67Rsend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_66Rsend},
  {"Ibsend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_69Ibsend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_68Ibsend},
  {"Issend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_71Issend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_70Issend},
  {"Irsend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_73Irsend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_72Irsend},
  {"Bsend_init", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_75Bsend_init, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_74Bsend_init},
  {"Ssend_init", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_77Ssend_init, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_76Ssend_init},
  {"Rsend_init", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_79Rsend_init, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_78Rsend_init},
  {"Barrier", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_81Barrier, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_80Barrier},
  {"Bcast", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_83Bcast, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_82Bcast},
  {"Gather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_85Gather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_84Gather},
  {"Gatherv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_87Gatherv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_86Gatherv},
  {"Scatter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_89Scatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_88Scatter},
  {"Scatterv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_91Scatterv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_90Scatterv},
  {"Allgather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_93Allgather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_92Allgather},
  {"Allgatherv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_95Allgatherv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_94Allgatherv},
  {"Alltoall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_97Alltoall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_96Alltoall},
  {"Alltoallv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_99Alltoallv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_98Alltoallv},
  {"Alltoallw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_101Alltoallw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_100Alltoallw},
  {"Reduce", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_103Reduce, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_102Reduce},
  {"Allreduce", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_105Allreduce, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_104Allreduce},
  {"Reduce_scatter_block", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_107Reduce_scatter_block, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_106Reduce_scatter_block},
  {"Reduce_scatter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_109Reduce_scatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_108Reduce_scatter},
  {"Ibarrier", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_111Ibarrier, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_110Ibarrier},
  {"Ibcast", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_113Ibcast, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_112Ibcast},
  {"Igather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_115Igather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_114Igather},
  {"Igatherv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_117Igatherv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_116Igatherv},
  {"Iscatter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_119Iscatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_118Iscatter},
  {"Iscatterv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_121Iscatterv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_120Iscatterv},
  {"Iallgather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_123Iallgather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_122Iallgather},
  {"Iallgatherv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_125Iallgatherv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_124Iallgatherv},
  {"Ialltoall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_127Ialltoall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_126Ialltoall},
  {"Ialltoallv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_129Ialltoallv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_128Ialltoallv},
  {"Ialltoallw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_131Ialltoallw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_130Ialltoallw},
  {"Ireduce", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_133Ireduce, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_132Ireduce},
  {"Iallreduce", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_135Iallreduce, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_134Iallreduce},
  {"Ireduce_scatter_block", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_137Ireduce_scatter_block, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_136Ireduce_scatter_block},
  {"Ireduce_scatter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_139Ireduce_scatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_138Ireduce_scatter},
  {"Is_inter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_141Is_inter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_140Is_inter},
  {"Is_intra", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_143Is_intra, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_142Is_intra},
  {"Get_topology", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_145Get_topology, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_144Get_topology},
  {"Get_parent", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_147Get_parent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_146Get_parent},
  {"Disconnect", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_149Disconnect, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_148Disconnect},
  {"Join", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_151Join, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_150Join},
  {"Get_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_153Get_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_152Get_attr},
  {"Set_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_155Set_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_154Set_attr},
  {"Delete_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_157Delete_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_156Delete_attr},
  {"Create_keyval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_159Create_keyval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_158Create_keyval},
  {"Free_keyval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_161Free_keyval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_160Free_keyval},
  {"Get_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_163Get_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_162Get_errhandler},
  {"Set_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_165Set_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_164Set_errhandler},
  {"Call_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_167Call_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_166Call_errhandler},
  {"Abort", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_169Abort, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_168Abort},
  {"Get_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_171Get_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_170Get_name},
  {"Set_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_173Set_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_172Set_name},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_175py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_174py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_177f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_176f2py},
  {"send", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_179send, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_178send},
  {"bsend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_181bsend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_180bsend},
  {"ssend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_183ssend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_182ssend},
  {"recv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_185recv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_184recv},
  {"sendrecv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_187sendrecv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_186sendrecv},
  {"isend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_189isend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_188isend},
  {"ibsend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_191ibsend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_190ibsend},
  {"issend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_193issend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_192issend},
  {"irecv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_195irecv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_194irecv},
  {"probe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_197probe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_196probe},
  {"iprobe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_199iprobe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_198iprobe},
  {"mprobe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_201mprobe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_200mprobe},
  {"improbe", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_203improbe, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_202improbe},
  {"barrier", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_205barrier, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_204barrier},
  {"bcast", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_207bcast, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_206bcast},
  {"gather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_209gather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_208gather},
  {"scatter", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_211scatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_210scatter},
  {"allgather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_213allgather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_212allgather},
  {"alltoall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_215alltoall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_214alltoall},
  {"reduce", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_217reduce, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_216reduce},
  {"allreduce", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4Comm_219allreduce, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4Comm_218allreduce},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Comm[] = {
  {(char *)"group", __pyx_getprop_6mpi4py_3MPI_4Comm_group, 0, (char *)"communicator group", 0},
  {(char *)"size", __pyx_getprop_6mpi4py_3MPI_4Comm_size, 0, (char *)"number of processes in communicator", 0},
  {(char *)"rank", __pyx_getprop_6mpi4py_3MPI_4Comm_rank, 0, (char *)"rank of this process in communicator", 0},
  {(char *)"info", __pyx_getprop_6mpi4py_3MPI_4Comm_info, __pyx_setprop_6mpi4py_3MPI_4Comm_info, (char *)"communicator info", 0},
  {(char *)"is_inter", __pyx_getprop_6mpi4py_3MPI_4Comm_is_inter, 0, (char *)"is intercommunicator", 0},
  {(char *)"is_intra", __pyx_getprop_6mpi4py_3MPI_4Comm_is_intra, 0, (char *)"is intracommunicator", 0},
  {(char *)"topology", __pyx_getprop_6mpi4py_3MPI_4Comm_topology, 0, (char *)"communicator topology type", 0},
  {(char *)"is_topo", __pyx_getprop_6mpi4py_3MPI_4Comm_is_topo, 0, (char *)"is a topology communicator", 0},
  {(char *)"name", __pyx_getprop_6mpi4py_3MPI_4Comm_name, __pyx_setprop_6mpi4py_3MPI_4Comm_name, (char *)"communicator name", 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Comm = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_4Comm_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIComm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Comm", /*tp_name*/
  sizeof(struct PyMPICommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Comm, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Communicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_4Comm_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Comm, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Comm, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Comm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Intracomm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Comm(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_9Intracomm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Intracomm[] = {
  {"Create_cart", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_3Create_cart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_2Create_cart},
  {"Create_graph", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_5Create_graph, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_4Create_graph},
  {"Create_dist_graph_adjacent", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_7Create_dist_graph_adjacent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_6Create_dist_graph_adjacent},
  {"Create_dist_graph", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_9Create_dist_graph, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_8Create_dist_graph},
  {"Create_intercomm", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_11Create_intercomm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_10Create_intercomm},
  {"Cart_map", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_13Cart_map, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_12Cart_map},
  {"Graph_map", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_15Graph_map, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_14Graph_map},
  {"Scan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_17Scan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_16Scan},
  {"Exscan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_19Exscan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_18Exscan},
  {"Iscan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_21Iscan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_20Iscan},
  {"Iexscan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_23Iexscan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_22Iexscan},
  {"scan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_25scan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_24scan},
  {"exscan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_27exscan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_26exscan},
  {"Spawn", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_29Spawn, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_28Spawn},
  {"Spawn_multiple", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_31Spawn_multiple, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_30Spawn_multiple},
  {"Accept", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_33Accept, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_32Accept},
  {"Connect", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intracomm_35Connect, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intracomm_34Connect},
  {0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIIntracomm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Intracomm", /*tp_name*/
  sizeof(struct PyMPIIntracommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Intracommunicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Intracomm, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Intracomm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Topocomm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Intracomm(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_8Topocomm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Topocomm_degrees(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Topocomm_7degrees_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Topocomm_indegree(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Topocomm_8indegree_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Topocomm_outdegree(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Topocomm_9outdegree_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Topocomm_inoutedges(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Topocomm_10inoutedges_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Topocomm_inedges(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Topocomm_7inedges_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Topocomm_outedges(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Topocomm_8outedges_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Topocomm[] = {
  {"Neighbor_allgather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_3Neighbor_allgather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_2Neighbor_allgather},
  {"Neighbor_allgatherv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_5Neighbor_allgatherv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_4Neighbor_allgatherv},
  {"Neighbor_alltoall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_7Neighbor_alltoall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_6Neighbor_alltoall},
  {"Neighbor_alltoallv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_9Neighbor_alltoallv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_8Neighbor_alltoallv},
  {"Neighbor_alltoallw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_11Neighbor_alltoallw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_10Neighbor_alltoallw},
  {"Ineighbor_allgather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_13Ineighbor_allgather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_12Ineighbor_allgather},
  {"Ineighbor_allgatherv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_15Ineighbor_allgatherv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_14Ineighbor_allgatherv},
  {"Ineighbor_alltoall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_17Ineighbor_alltoall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_16Ineighbor_alltoall},
  {"Ineighbor_alltoallv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_19Ineighbor_alltoallv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_18Ineighbor_alltoallv},
  {"Ineighbor_alltoallw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_21Ineighbor_alltoallw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_20Ineighbor_alltoallw},
  {"neighbor_allgather", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_23neighbor_allgather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_22neighbor_allgather},
  {"neighbor_alltoall", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Topocomm_25neighbor_alltoall, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Topocomm_24neighbor_alltoall},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Topocomm[] = {
  {(char *)"degrees", __pyx_getprop_6mpi4py_3MPI_8Topocomm_degrees, 0, (char *)"number of incoming and outgoing neighbors", 0},
  {(char *)"indegree", __pyx_getprop_6mpi4py_3MPI_8Topocomm_indegree, 0, (char *)"number of incoming neighbors", 0},
  {(char *)"outdegree", __pyx_getprop_6mpi4py_3MPI_8Topocomm_outdegree, 0, (char *)"number of outgoing neighbors", 0},
  {(char *)"inoutedges", __pyx_getprop_6mpi4py_3MPI_8Topocomm_inoutedges, 0, (char *)"incoming and outgoing neighbors", 0},
  {(char *)"inedges", __pyx_getprop_6mpi4py_3MPI_8Topocomm_inedges, 0, (char *)"incoming neighbors", 0},
  {(char *)"outedges", __pyx_getprop_6mpi4py_3MPI_8Topocomm_outedges, 0, (char *)"outgoing neighbors", 0},
  {0, 0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPITopocomm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Topocomm", /*tp_name*/
  sizeof(struct PyMPITopocommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Topology intracommunicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Topocomm, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Topocomm, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Topocomm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Cartcomm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Topocomm(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_8Cartcomm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Cartcomm_dim(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Cartcomm_3dim_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Cartcomm_ndim(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Cartcomm_4ndim_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Cartcomm_topo(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Cartcomm_4topo_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Cartcomm_dims(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Cartcomm_4dims_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Cartcomm_periods(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Cartcomm_7periods_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_8Cartcomm_coords(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_8Cartcomm_6coords_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Cartcomm[] = {
  {"Get_dim", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Cartcomm_3Get_dim, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Cartcomm_2Get_dim},
  {"Get_topo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Cartcomm_5Get_topo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Cartcomm_4Get_topo},
  {"Get_cart_rank", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Cartcomm_7Get_cart_rank, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Cartcomm_6Get_cart_rank},
  {"Get_coords", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Cartcomm_9Get_coords, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Cartcomm_8Get_coords},
  {"Shift", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Cartcomm_11Shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Cartcomm_10Shift},
  {"Sub", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_8Cartcomm_13Sub, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_8Cartcomm_12Sub},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Cartcomm[] = {
  {(char *)"dim", __pyx_getprop_6mpi4py_3MPI_8Cartcomm_dim, 0, (char *)"number of dimensions", 0},
  {(char *)"ndim", __pyx_getprop_6mpi4py_3MPI_8Cartcomm_ndim, 0, (char *)"number of dimensions", 0},
  {(char *)"topo", __pyx_getprop_6mpi4py_3MPI_8Cartcomm_topo, 0, (char *)"topology information", 0},
  {(char *)"dims", __pyx_getprop_6mpi4py_3MPI_8Cartcomm_dims, 0, (char *)"dimensions", 0},
  {(char *)"periods", __pyx_getprop_6mpi4py_3MPI_8Cartcomm_periods, 0, (char *)"periodicity", 0},
  {(char *)"coords", __pyx_getprop_6mpi4py_3MPI_8Cartcomm_coords, 0, (char *)"coordinates", 0},
  {0, 0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPICartcomm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Cartcomm", /*tp_name*/
  sizeof(struct PyMPICartcommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Cartesian topology intracommunicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Cartcomm, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Cartcomm, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Cartcomm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Graphcomm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Topocomm(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_9Graphcomm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_dims(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_4dims_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_nnodes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_6nnodes_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_nedges(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_6nedges_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_topo(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_4topo_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_index(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_5index_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_edges(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_5edges_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_nneighbors(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_10nneighbors_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Graphcomm_neighbors(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Graphcomm_9neighbors_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Graphcomm[] = {
  {"Get_dims", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Graphcomm_3Get_dims, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Graphcomm_2Get_dims},
  {"Get_topo", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Graphcomm_5Get_topo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Graphcomm_4Get_topo},
  {"Get_neighbors_count", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Graphcomm_7Get_neighbors_count, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Graphcomm_6Get_neighbors_count},
  {"Get_neighbors", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Graphcomm_9Get_neighbors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Graphcomm_8Get_neighbors},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Graphcomm[] = {
  {(char *)"dims", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_dims, 0, (char *)"number of nodes and edges", 0},
  {(char *)"nnodes", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_nnodes, 0, (char *)"number of nodes", 0},
  {(char *)"nedges", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_nedges, 0, (char *)"number of edges", 0},
  {(char *)"topo", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_topo, 0, (char *)"topology information", 0},
  {(char *)"index", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_index, 0, (char *)"index", 0},
  {(char *)"edges", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_edges, 0, (char *)"edges", 0},
  {(char *)"nneighbors", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_nneighbors, 0, (char *)"number of neighbors", 0},
  {(char *)"neighbors", __pyx_getprop_6mpi4py_3MPI_9Graphcomm_neighbors, 0, (char *)"neighbors", 0},
  {0, 0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIGraphcomm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Graphcomm", /*tp_name*/
  sizeof(struct PyMPIGraphcommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    General graph topology intracommunicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Graphcomm, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Graphcomm, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Graphcomm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Distgraphcomm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Topocomm(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Distgraphcomm[] = {
  {"Get_dist_neighbors_count", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_3Get_dist_neighbors_count, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_13Distgraphcomm_2Get_dist_neighbors_count},
  {"Get_dist_neighbors", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_13Distgraphcomm_5Get_dist_neighbors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_13Distgraphcomm_4Get_dist_neighbors},
  {0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIDistgraphcomm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Distgraphcomm", /*tp_name*/
  sizeof(struct PyMPIDistgraphcommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Distributed graph topology intracommunicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Distgraphcomm, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Distgraphcomm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Intercomm(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = __pyx_tp_new_6mpi4py_3MPI_Comm(t, a, k);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_9Intercomm_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Intercomm_remote_group(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Intercomm_12remote_group_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9Intercomm_remote_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9Intercomm_11remote_size_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Intercomm[] = {
  {"Get_remote_group", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intercomm_3Get_remote_group, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intercomm_2Get_remote_group},
  {"Get_remote_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intercomm_5Get_remote_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intercomm_4Get_remote_size},
  {"Merge", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_9Intercomm_7Merge, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_9Intercomm_6Merge},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Intercomm[] = {
  {(char *)"remote_group", __pyx_getprop_6mpi4py_3MPI_9Intercomm_remote_group, 0, (char *)"remote group", 0},
  {(char *)"remote_size", __pyx_getprop_6mpi4py_3MPI_9Intercomm_remote_size, 0, (char *)"number of remote processes", 0},
  {0, 0, 0, 0, 0}
};

DL_EXPORT(PyTypeObject) PyMPIIntercomm_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Intercomm", /*tp_name*/
  sizeof(struct PyMPIIntercommObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Comm, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Intercommunicator\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Intercomm, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Intercomm, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Intercomm, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Win(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct PyMPIWinObject *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct PyMPIWinObject *)o);
  p->ob_mem = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_3Win_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Win(PyObject *o) {
  struct PyMPIWinObject *p = (struct PyMPIWinObject *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_3Win_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->ob_mem);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI_Win(PyObject *o, visitproc v, void *a) {
  int e;
  struct PyMPIWinObject *p = (struct PyMPIWinObject *)o;
  if (p->ob_mem) {
    e = (*v)(p->ob_mem, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI_Win(PyObject *o) {
  PyObject* tmp;
  struct PyMPIWinObject *p = (struct PyMPIWinObject *)o;
  tmp = ((PyObject*)p->ob_mem);
  p->ob_mem = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_3Win_info(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_3Win_4info_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_3Win_info(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_3Win_4info_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_3Win_group(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_3Win_5group_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_3Win_attrs(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_3Win_5attrs_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_3Win_flavor(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_3Win_6flavor_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_3Win_model(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_3Win_5model_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_3Win_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_3Win_4name_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_3Win_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_3Win_4name_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Win[] = {
  {"Create", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_9Create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_8Create},
  {"Allocate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_11Allocate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_10Allocate},
  {"Allocate_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_13Allocate_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_12Allocate_shared},
  {"Shared_query", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_15Shared_query, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_14Shared_query},
  {"Create_dynamic", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_17Create_dynamic, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_16Create_dynamic},
  {"Attach", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_19Attach, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_18Attach},
  {"Detach", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_21Detach, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_20Detach},
  {"Free", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_23Free, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_22Free},
  {"Set_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_25Set_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_24Set_info},
  {"Get_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_27Get_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_26Get_info},
  {"Get_group", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_29Get_group, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_28Get_group},
  {"Get_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_31Get_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_30Get_attr},
  {"Set_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_33Set_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_32Set_attr},
  {"Delete_attr", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_35Delete_attr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_34Delete_attr},
  {"Create_keyval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_37Create_keyval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_36Create_keyval},
  {"Free_keyval", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_39Free_keyval, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_38Free_keyval},
  {"tomemory", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_41tomemory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_40tomemory},
  {"Put", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_51Put, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_50Put},
  {"Get", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_53Get, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_52Get},
  {"Accumulate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_55Accumulate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_54Accumulate},
  {"Get_accumulate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_57Get_accumulate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_56Get_accumulate},
  {"Fetch_and_op", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_59Fetch_and_op, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_58Fetch_and_op},
  {"Compare_and_swap", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_61Compare_and_swap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_60Compare_and_swap},
  {"Rput", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_63Rput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_62Rput},
  {"Rget", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_65Rget, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_64Rget},
  {"Raccumulate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_67Raccumulate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_66Raccumulate},
  {"Rget_accumulate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_69Rget_accumulate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_68Rget_accumulate},
  {"Fence", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_71Fence, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_70Fence},
  {"Start", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_73Start, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_72Start},
  {"Complete", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_75Complete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_74Complete},
  {"Post", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_77Post, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_76Post},
  {"Wait", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_79Wait, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_78Wait},
  {"Test", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_81Test, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_80Test},
  {"Lock", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_83Lock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_82Lock},
  {"Unlock", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_85Unlock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_84Unlock},
  {"Lock_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_87Lock_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_86Lock_all},
  {"Unlock_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_89Unlock_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_88Unlock_all},
  {"Flush", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_91Flush, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_90Flush},
  {"Flush_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_93Flush_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_92Flush_all},
  {"Flush_local", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_95Flush_local, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_94Flush_local},
  {"Flush_local_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_97Flush_local_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_96Flush_local_all},
  {"Sync", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_99Sync, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_98Sync},
  {"Get_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_101Get_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_100Get_errhandler},
  {"Set_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_103Set_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_102Set_errhandler},
  {"Call_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_105Call_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_104Call_errhandler},
  {"Get_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_107Get_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_106Get_name},
  {"Set_name", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_109Set_name, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_108Set_name},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_111py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_110py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_3Win_113f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_3Win_112f2py},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Win[] = {
  {(char *)"info", __pyx_getprop_6mpi4py_3MPI_3Win_info, __pyx_setprop_6mpi4py_3MPI_3Win_info, (char *)"window info", 0},
  {(char *)"group", __pyx_getprop_6mpi4py_3MPI_3Win_group, 0, (char *)"window group", 0},
  {(char *)"attrs", __pyx_getprop_6mpi4py_3MPI_3Win_attrs, 0, (char *)"window attributes", 0},
  {(char *)"flavor", __pyx_getprop_6mpi4py_3MPI_3Win_flavor, 0, (char *)"window create flavor", 0},
  {(char *)"model", __pyx_getprop_6mpi4py_3MPI_3Win_model, 0, (char *)"window memory model", 0},
  {(char *)"name", __pyx_getprop_6mpi4py_3MPI_3Win_name, __pyx_setprop_6mpi4py_3MPI_3Win_name, (char *)"window name", 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Win = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_3Win_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

static PyBufferProcs __pyx_tp_as_buffer_Win = {
  #if PY_MAJOR_VERSION < 3
  __pyx_pw_6mpi4py_3MPI_3Win_47__getreadbuffer__, /*bf_getreadbuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_pw_6mpi4py_3MPI_3Win_49__getwritebuffer__, /*bf_getwritebuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_pw_6mpi4py_3MPI_3Win_45__getsegcount__, /*bf_getsegcount*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getcharbuffer*/
  #endif
  __pyx_pw_6mpi4py_3MPI_3Win_43__getbuffer__, /*bf_getbuffer*/
  0, /*bf_releasebuffer*/
};

DL_EXPORT(PyTypeObject) PyMPIWin_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Win", /*tp_name*/
  sizeof(struct PyMPIWinObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Win, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Win, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_Win, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    Window\n    ", /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI_Win, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI_Win, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_3Win_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Win, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Win, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Win, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_File(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_4File_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_File(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_4File_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4File_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4File_4size_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4File_amode(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4File_5amode_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4File_group(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4File_5group_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4File_info(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4File_4info_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_4File_info(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_4File_4info_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_4File_atomicity(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_4File_9atomicity_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_4File_atomicity(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_4File_9atomicity_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_File[] = {
  {"Open", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_9Open, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_8Open},
  {"Close", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_11Close, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_10Close},
  {"Delete", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_13Delete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_12Delete},
  {"Set_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_15Set_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_14Set_size},
  {"Preallocate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_17Preallocate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_16Preallocate},
  {"Get_size", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_19Get_size, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_18Get_size},
  {"Get_amode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_21Get_amode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_20Get_amode},
  {"Get_group", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_23Get_group, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_22Get_group},
  {"Set_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_25Set_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_24Set_info},
  {"Get_info", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_27Get_info, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_26Get_info},
  {"Set_view", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_29Set_view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_28Set_view},
  {"Get_view", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_31Get_view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_30Get_view},
  {"Read_at", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_33Read_at, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_32Read_at},
  {"Read_at_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_35Read_at_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_34Read_at_all},
  {"Write_at", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_37Write_at, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_36Write_at},
  {"Write_at_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_39Write_at_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_38Write_at_all},
  {"Iread_at", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_41Iread_at, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_40Iread_at},
  {"Iread_at_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_43Iread_at_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_42Iread_at_all},
  {"Iwrite_at", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_45Iwrite_at, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_44Iwrite_at},
  {"Iwrite_at_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_47Iwrite_at_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_46Iwrite_at_all},
  {"Read", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_49Read, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_48Read},
  {"Read_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_51Read_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_50Read_all},
  {"Write", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_53Write, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_52Write},
  {"Write_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_55Write_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_54Write_all},
  {"Iread", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_57Iread, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_56Iread},
  {"Iread_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_59Iread_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_58Iread_all},
  {"Iwrite", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_61Iwrite, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_60Iwrite},
  {"Iwrite_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_63Iwrite_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_62Iwrite_all},
  {"Seek", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_65Seek, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_64Seek},
  {"Get_position", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_67Get_position, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_66Get_position},
  {"Get_byte_offset", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_69Get_byte_offset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_68Get_byte_offset},
  {"Read_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_71Read_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_70Read_shared},
  {"Write_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_73Write_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_72Write_shared},
  {"Iread_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_75Iread_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_74Iread_shared},
  {"Iwrite_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_77Iwrite_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_76Iwrite_shared},
  {"Read_ordered", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_79Read_ordered, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_78Read_ordered},
  {"Write_ordered", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_81Write_ordered, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_80Write_ordered},
  {"Seek_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_83Seek_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_82Seek_shared},
  {"Get_position_shared", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_85Get_position_shared, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_84Get_position_shared},
  {"Read_at_all_begin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_87Read_at_all_begin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_86Read_at_all_begin},
  {"Read_at_all_end", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_89Read_at_all_end, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_88Read_at_all_end},
  {"Write_at_all_begin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_91Write_at_all_begin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_90Write_at_all_begin},
  {"Write_at_all_end", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_93Write_at_all_end, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_92Write_at_all_end},
  {"Read_all_begin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_95Read_all_begin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_94Read_all_begin},
  {"Read_all_end", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_97Read_all_end, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_96Read_all_end},
  {"Write_all_begin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_99Write_all_begin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_98Write_all_begin},
  {"Write_all_end", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_101Write_all_end, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_100Write_all_end},
  {"Read_ordered_begin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_103Read_ordered_begin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_102Read_ordered_begin},
  {"Read_ordered_end", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_105Read_ordered_end, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_104Read_ordered_end},
  {"Write_ordered_begin", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_107Write_ordered_begin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_106Write_ordered_begin},
  {"Write_ordered_end", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_109Write_ordered_end, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_108Write_ordered_end},
  {"Get_type_extent", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_111Get_type_extent, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_110Get_type_extent},
  {"Set_atomicity", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_113Set_atomicity, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_112Set_atomicity},
  {"Get_atomicity", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_115Get_atomicity, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_114Get_atomicity},
  {"Sync", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_117Sync, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_116Sync},
  {"Get_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_119Get_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_118Get_errhandler},
  {"Set_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_121Set_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_120Set_errhandler},
  {"Call_errhandler", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_123Call_errhandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_122Call_errhandler},
  {"py2f", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_125py2f, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_124py2f},
  {"f2py", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_4File_127f2py, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_4File_126f2py},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_File[] = {
  {(char *)"size", __pyx_getprop_6mpi4py_3MPI_4File_size, 0, (char *)"file size", 0},
  {(char *)"amode", __pyx_getprop_6mpi4py_3MPI_4File_amode, 0, (char *)"file access mode", 0},
  {(char *)"group", __pyx_getprop_6mpi4py_3MPI_4File_group, 0, (char *)"file group", 0},
  {(char *)"info", __pyx_getprop_6mpi4py_3MPI_4File_info, __pyx_setprop_6mpi4py_3MPI_4File_info, (char *)"file info", 0},
  {(char *)"atomicity", __pyx_getprop_6mpi4py_3MPI_4File_atomicity, __pyx_setprop_6mpi4py_3MPI_4File_atomicity, (char *)"atomicity", 0},
  {0, 0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_File = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_6mpi4py_3MPI_4File_7__bool__, /*nb_nonzero*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

DL_EXPORT(PyTypeObject) PyMPIFile_Type = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.File", /*tp_name*/
  sizeof(struct PyMPIFileObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_File, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_File, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    File\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_pw_6mpi4py_3MPI_4File_5__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_File, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_File, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_File, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI_memory(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI_memory *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI_memory *)o);
  p->view.obj = NULL;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_6memory_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_memory(PyObject *o) {
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_6memory_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6mpi4py_3MPI_memory(PyObject *o, Py_ssize_t i) {
  PyObject *r;
  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static int __pyx_mp_ass_subscript_6mpi4py_3MPI_memory(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_6memory_25__setitem__(o, i, v);
  }
  else {
    PyErr_Format(PyExc_NotImplementedError,
      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
    return -1;
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6memory_address(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6memory_7address_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6memory_nbytes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6memory_6nbytes_1__get__(o);
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6memory_readonly(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6memory_8readonly_1__get__(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_memory[] = {
  {"frombuffer", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6memory_5frombuffer, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6memory_4frombuffer},
  {"fromaddress", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6memory_7fromaddress, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6memory_6fromaddress},
  {"tobytes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6memory_9tobytes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6memory_8tobytes},
  {"release", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6memory_11release, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6memory_10release},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_memory[] = {
  {(char *)"address", __pyx_getprop_6mpi4py_3MPI_6memory_address, 0, (char *)"Memory address", 0},
  {(char *)"nbytes", __pyx_getprop_6mpi4py_3MPI_6memory_nbytes, 0, (char *)"Memory size (in bytes)", 0},
  {(char *)"readonly", __pyx_getprop_6mpi4py_3MPI_6memory_readonly, 0, (char *)"Boolean indicating whether the memory is read-only", 0},
  {0, 0, 0, 0, 0}
};

static PySequenceMethods __pyx_tp_as_sequence_memory = {
  __pyx_pw_6mpi4py_3MPI_6memory_21__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6mpi4py_3MPI_memory, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_memory = {
  __pyx_pw_6mpi4py_3MPI_6memory_21__len__, /*mp_length*/
  __pyx_pw_6mpi4py_3MPI_6memory_23__getitem__, /*mp_subscript*/
  __pyx_mp_ass_subscript_6mpi4py_3MPI_memory, /*mp_ass_subscript*/
};

static PyBufferProcs __pyx_tp_as_buffer_memory = {
  #if PY_MAJOR_VERSION < 3
  __pyx_pw_6mpi4py_3MPI_6memory_17__getreadbuffer__, /*bf_getreadbuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_pw_6mpi4py_3MPI_6memory_19__getwritebuffer__, /*bf_getwritebuffer*/
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_pw_6mpi4py_3MPI_6memory_15__getsegcount__, /*bf_getsegcount*/
  #endif
  #if PY_MAJOR_VERSION < 3
  0, /*bf_getcharbuffer*/
  #endif
  __pyx_pw_6mpi4py_3MPI_6memory_13__getbuffer__, /*bf_getbuffer*/
  0, /*bf_releasebuffer*/
};

static PyTypeObject __pyx_type_6mpi4py_3MPI_memory = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.memory", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI_memory), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_memory, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence_memory, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_memory, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  &__pyx_tp_as_buffer_memory, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
  "\n    Memory\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_memory, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_memory, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_memory, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_mem(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_6mpi4py_3MPI_6_p_mem_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_mem(PyObject *o) {
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    ++Py_REFCNT(o);
    __pyx_pw_6mpi4py_3MPI_6_p_mem_3__dealloc__(o);
    --Py_REFCNT(o);
    PyErr_Restore(etype, eval, etb);
  }
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_mem[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_mem = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_mem", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_mem), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_mem, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_mem, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_mem, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_greq __pyx_vtable_6mpi4py_3MPI__p_greq;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_greq(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_greq *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_greq *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_greq;
  p->query_fn = Py_None; Py_INCREF(Py_None);
  p->free_fn = Py_None; Py_INCREF(Py_None);
  p->cancel_fn = Py_None; Py_INCREF(Py_None);
  p->args = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->kargs = ((PyObject*)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_7_p_greq_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_greq(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_greq *p = (struct __pyx_obj_6mpi4py_3MPI__p_greq *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->query_fn);
  Py_CLEAR(p->free_fn);
  Py_CLEAR(p->cancel_fn);
  Py_CLEAR(p->args);
  Py_CLEAR(p->kargs);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_greq(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_greq *p = (struct __pyx_obj_6mpi4py_3MPI__p_greq *)o;
  if (p->query_fn) {
    e = (*v)(p->query_fn, a); if (e) return e;
  }
  if (p->free_fn) {
    e = (*v)(p->free_fn, a); if (e) return e;
  }
  if (p->cancel_fn) {
    e = (*v)(p->cancel_fn, a); if (e) return e;
  }
  if (p->args) {
    e = (*v)(p->args, a); if (e) return e;
  }
  if (p->kargs) {
    e = (*v)(p->kargs, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_greq(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_greq *p = (struct __pyx_obj_6mpi4py_3MPI__p_greq *)o;
  tmp = ((PyObject*)p->query_fn);
  p->query_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->free_fn);
  p->free_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->cancel_fn);
  p->cancel_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->args);
  p->args = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->kargs);
  p->kargs = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_greq[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_greq = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_greq", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_greq), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_greq, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_greq, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_greq, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_greq, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_greq, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_datarep __pyx_vtable_6mpi4py_3MPI__p_datarep;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_datarep(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_datarep *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_datarep;
  p->read_fn = Py_None; Py_INCREF(Py_None);
  p->write_fn = Py_None; Py_INCREF(Py_None);
  p->extent_fn = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_10_p_datarep_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_datarep(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *p = (struct __pyx_obj_6mpi4py_3MPI__p_datarep *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->read_fn);
  Py_CLEAR(p->write_fn);
  Py_CLEAR(p->extent_fn);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_datarep(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *p = (struct __pyx_obj_6mpi4py_3MPI__p_datarep *)o;
  if (p->read_fn) {
    e = (*v)(p->read_fn, a); if (e) return e;
  }
  if (p->write_fn) {
    e = (*v)(p->write_fn, a); if (e) return e;
  }
  if (p->extent_fn) {
    e = (*v)(p->extent_fn, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_datarep(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_datarep *p = (struct __pyx_obj_6mpi4py_3MPI__p_datarep *)o;
  tmp = ((PyObject*)p->read_fn);
  p->read_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->write_fn);
  p->write_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->extent_fn);
  p->extent_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_datarep[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_datarep = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_datarep", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_datarep), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_datarep, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_datarep, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_datarep, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_datarep, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_datarep, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_keyval(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_keyval *)o);
  p->copy_fn = Py_None; Py_INCREF(Py_None);
  p->delete_fn = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_9_p_keyval_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_keyval(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *p = (struct __pyx_obj_6mpi4py_3MPI__p_keyval *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->copy_fn);
  Py_CLEAR(p->delete_fn);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_keyval(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *p = (struct __pyx_obj_6mpi4py_3MPI__p_keyval *)o;
  if (p->copy_fn) {
    e = (*v)(p->copy_fn, a); if (e) return e;
  }
  if (p->delete_fn) {
    e = (*v)(p->delete_fn, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_keyval(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_keyval *p = (struct __pyx_obj_6mpi4py_3MPI__p_keyval *)o;
  tmp = ((PyObject*)p->copy_fn);
  p->copy_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->delete_fn);
  p->delete_fn = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9_p_keyval_copy_fn(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_9_p_keyval_copy_fn(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_3__set__(o, v);
  }
  else {
    return __pyx_pw_6mpi4py_3MPI_9_p_keyval_7copy_fn_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9_p_keyval_delete_fn(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_9_p_keyval_delete_fn(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_3__set__(o, v);
  }
  else {
    return __pyx_pw_6mpi4py_3MPI_9_p_keyval_9delete_fn_5__del__(o);
  }
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_9_p_keyval_nopython(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_9_p_keyval_8nopython_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_9_p_keyval_nopython(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_9_p_keyval_8nopython_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_keyval[] = {
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI__p_keyval[] = {
  {(char *)"copy_fn", __pyx_getprop_6mpi4py_3MPI_9_p_keyval_copy_fn, __pyx_setprop_6mpi4py_3MPI_9_p_keyval_copy_fn, (char *)"copy_fn: object", 0},
  {(char *)"delete_fn", __pyx_getprop_6mpi4py_3MPI_9_p_keyval_delete_fn, __pyx_setprop_6mpi4py_3MPI_9_p_keyval_delete_fn, (char *)"delete_fn: object", 0},
  {(char *)"nopython", __pyx_getprop_6mpi4py_3MPI_9_p_keyval_nopython, __pyx_setprop_6mpi4py_3MPI_9_p_keyval_nopython, (char *)"nopython: 'bool'", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_keyval = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_keyval", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_keyval), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_keyval, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_keyval, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_keyval, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_keyval, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI__p_keyval, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_keyval, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_message(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_message *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_message *)o);
  p->buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)Py_None); Py_INCREF(Py_None);
  p->count = Py_None; Py_INCREF(Py_None);
  p->displ = Py_None; Py_INCREF(Py_None);
  p->type = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_message(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_message *p = (struct __pyx_obj_6mpi4py_3MPI__p_message *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->buf);
  Py_CLEAR(p->count);
  Py_CLEAR(p->displ);
  Py_CLEAR(p->type);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_message(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_message *p = (struct __pyx_obj_6mpi4py_3MPI__p_message *)o;
  if (p->buf) {
    e = (*v)(((PyObject *)p->buf), a); if (e) return e;
  }
  if (p->count) {
    e = (*v)(p->count, a); if (e) return e;
  }
  if (p->displ) {
    e = (*v)(p->displ, a); if (e) return e;
  }
  if (p->type) {
    e = (*v)(((PyObject *)p->type), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_message(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_message *p = (struct __pyx_obj_6mpi4py_3MPI__p_message *)o;
  tmp = ((PyObject*)p->buf);
  p->buf = ((struct __pyx_obj_6mpi4py_3MPI_memory *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->count);
  p->count = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->displ);
  p->displ = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->type);
  p->type = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_message = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_message", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_message), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_message, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_message, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_message, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_message, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_p2p __pyx_vtable_6mpi4py_3MPI__p_msg_p2p;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_p2p(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_msg_p2p;
  p->_msg = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_10_p_msg_p2p_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_p2p(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_msg);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_msg_p2p(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)o;
  if (p->_msg) {
    e = (*v)(p->_msg, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_msg_p2p(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *)o;
  tmp = ((PyObject*)p->_msg);
  p->_msg = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_msg_p2p[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_msg_p2p = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_msg_p2p", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_p2p, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_msg_p2p, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_msg_p2p, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_msg_p2p, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_msg_p2p, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_cco __pyx_vtable_6mpi4py_3MPI__p_msg_cco;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_cco(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_msg_cco;
  p->_smsg = Py_None; Py_INCREF(Py_None);
  p->_rmsg = Py_None; Py_INCREF(Py_None);
  p->_rcnt = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_10_p_msg_cco_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_cco(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_smsg);
  Py_CLEAR(p->_rmsg);
  Py_CLEAR(p->_rcnt);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_msg_cco(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)o;
  if (p->_smsg) {
    e = (*v)(p->_smsg, a); if (e) return e;
  }
  if (p->_rmsg) {
    e = (*v)(p->_rmsg, a); if (e) return e;
  }
  if (p->_rcnt) {
    e = (*v)(p->_rcnt, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_msg_cco(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *)o;
  tmp = ((PyObject*)p->_smsg);
  p->_smsg = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_rmsg);
  p->_rmsg = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_rcnt);
  p->_rcnt = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_msg_cco[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_msg_cco = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_msg_cco", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_cco, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_msg_cco, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_msg_cco, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_msg_cco, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_msg_cco, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_ccow __pyx_vtable_6mpi4py_3MPI__p_msg_ccow;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_ccow(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_msg_ccow;
  p->_smsg = Py_None; Py_INCREF(Py_None);
  p->_rmsg = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_11_p_msg_ccow_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_ccow(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_smsg);
  Py_CLEAR(p->_rmsg);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_msg_ccow(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)o;
  if (p->_smsg) {
    e = (*v)(p->_smsg, a); if (e) return e;
  }
  if (p->_rmsg) {
    e = (*v)(p->_rmsg, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_msg_ccow(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *)o;
  tmp = ((PyObject*)p->_smsg);
  p->_smsg = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_rmsg);
  p->_rmsg = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_msg_ccow[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_msg_ccow = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_msg_ccow", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_ccow, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_msg_ccow, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_msg_ccow, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_msg_ccow, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_msg_ccow, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_rma __pyx_vtable_6mpi4py_3MPI__p_msg_rma;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_rma(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_msg_rma;
  p->_origin = Py_None; Py_INCREF(Py_None);
  p->_compare = Py_None; Py_INCREF(Py_None);
  p->_result = Py_None; Py_INCREF(Py_None);
  p->_target = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_10_p_msg_rma_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_rma(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_origin);
  Py_CLEAR(p->_compare);
  Py_CLEAR(p->_result);
  Py_CLEAR(p->_target);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_msg_rma(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)o;
  if (p->_origin) {
    e = (*v)(p->_origin, a); if (e) return e;
  }
  if (p->_compare) {
    e = (*v)(p->_compare, a); if (e) return e;
  }
  if (p->_result) {
    e = (*v)(p->_result, a); if (e) return e;
  }
  if (p->_target) {
    e = (*v)(p->_target, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_msg_rma(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *)o;
  tmp = ((PyObject*)p->_origin);
  p->_origin = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_compare);
  p->_compare = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_result);
  p->_result = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_target);
  p->_target = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_msg_rma[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_msg_rma = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_msg_rma", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_rma, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_msg_rma, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_msg_rma, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_msg_rma, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_msg_rma, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_io __pyx_vtable_6mpi4py_3MPI__p_msg_io;

static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_msg_io(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI__p_msg_io;
  p->_msg = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_9_p_msg_io_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_io(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_msg);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI__p_msg_io(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)o;
  if (p->_msg) {
    e = (*v)(p->_msg, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI__p_msg_io(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI__p_msg_io *p = (struct __pyx_obj_6mpi4py_3MPI__p_msg_io *)o;
  tmp = ((PyObject*)p->_msg);
  p->_msg = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI__p_msg_io[] = {
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI__p_msg_io = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI._p_msg_io", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI__p_msg_io), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI__p_msg_io, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI__p_msg_io, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI__p_msg_io, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI__p_msg_io, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI__p_msg_io, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_6mpi4py_3MPI_Pickle __pyx_vtable_6mpi4py_3MPI_Pickle;

static PyObject *__pyx_tp_new_6mpi4py_3MPI_Pickle(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *p;
  PyObject *o;
  o = (*t->tp_alloc)(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_6mpi4py_3MPI_Pickle *)o);
  p->__pyx_vtab = __pyx_vtabptr_6mpi4py_3MPI_Pickle;
  p->ob_dumps = Py_None; Py_INCREF(Py_None);
  p->ob_loads = Py_None; Py_INCREF(Py_None);
  p->ob_PROTO = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6mpi4py_3MPI_6Pickle_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6mpi4py_3MPI_Pickle(PyObject *o) {
  struct __pyx_obj_6mpi4py_3MPI_Pickle *p = (struct __pyx_obj_6mpi4py_3MPI_Pickle *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->ob_dumps);
  Py_CLEAR(p->ob_loads);
  Py_CLEAR(p->ob_PROTO);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6mpi4py_3MPI_Pickle(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6mpi4py_3MPI_Pickle *p = (struct __pyx_obj_6mpi4py_3MPI_Pickle *)o;
  if (p->ob_dumps) {
    e = (*v)(p->ob_dumps, a); if (e) return e;
  }
  if (p->ob_loads) {
    e = (*v)(p->ob_loads, a); if (e) return e;
  }
  if (p->ob_PROTO) {
    e = (*v)(p->ob_PROTO, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6mpi4py_3MPI_Pickle(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6mpi4py_3MPI_Pickle *p = (struct __pyx_obj_6mpi4py_3MPI_Pickle *)o;
  tmp = ((PyObject*)p->ob_dumps);
  p->ob_dumps = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->ob_loads);
  p->ob_loads = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->ob_PROTO);
  p->ob_PROTO = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6mpi4py_3MPI_6Pickle_PROTOCOL(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6mpi4py_3MPI_6Pickle_8PROTOCOL_1__get__(o);
}

static int __pyx_setprop_6mpi4py_3MPI_6Pickle_PROTOCOL(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_6mpi4py_3MPI_6Pickle_8PROTOCOL_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_6mpi4py_3MPI_Pickle[] = {
  {"dumps", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Pickle_5dumps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Pickle_4dumps},
  {"loads", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_6mpi4py_3MPI_6Pickle_7loads, METH_VARARGS|METH_KEYWORDS, __pyx_doc_6mpi4py_3MPI_6Pickle_6loads},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6mpi4py_3MPI_Pickle[] = {
  {(char *)"PROTOCOL", __pyx_getprop_6mpi4py_3MPI_6Pickle_PROTOCOL, __pyx_setprop_6mpi4py_3MPI_6Pickle_PROTOCOL, (char *)"protocol", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_6mpi4py_3MPI_Pickle = {
  PyVarObject_HEAD_INIT(0, 0)
  "mpi4py.MPI.Pickle", /*tp_name*/
  sizeof(struct __pyx_obj_6mpi4py_3MPI_Pickle), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6mpi4py_3MPI_Pickle, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "Pickle(dumps=None, loads=None, protocol=None)\n\n    Pickle/unpickle Python objects\n    ", /*tp_doc*/
  __pyx_tp_traverse_6mpi4py_3MPI_Pickle, /*tp_traverse*/
  __pyx_tp_clear_6mpi4py_3MPI_Pickle, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6mpi4py_3MPI_Pickle, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6mpi4py_3MPI_Pickle, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_6mpi4py_3MPI_6Pickle_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6mpi4py_3MPI_Pickle, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec_MPI(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec_MPI},
  {0, NULL}
};
#endif

static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    "MPI",
    0, /* m_doc */
  #if CYTHON_PEP489_MULTI_PHASE_INIT
    0, /* m_size */
  #else
    -1, /* m_size */
  #endif
    __pyx_methods /* m_methods */,
  #if CYTHON_PEP489_MULTI_PHASE_INIT
    __pyx_moduledef_slots, /* m_slots */
  #else
    NULL, /* m_reload */
  #endif
    NULL, /* m_traverse */
    NULL, /* m_clear */
    (freefunc)__pyx_module_cleanup /* m_free */
};
#endif
#ifndef CYTHON_SMALL_CODE
#if defined(__clang__)
    #define CYTHON_SMALL_CODE
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
    #define CYTHON_SMALL_CODE __attribute__((cold))
#else
    #define CYTHON_SMALL_CODE
#endif
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_n_s_AINT, __pyx_k_AINT, sizeof(__pyx_k_AINT), 0, 0, 1, 1},
  {&__pyx_n_s_ANY_SOURCE, __pyx_k_ANY_SOURCE, sizeof(__pyx_k_ANY_SOURCE), 0, 0, 1, 1},
  {&__pyx_n_s_ANY_TAG, __pyx_k_ANY_TAG, sizeof(__pyx_k_ANY_TAG), 0, 0, 1, 1},
  {&__pyx_n_s_APPNUM, __pyx_k_APPNUM, sizeof(__pyx_k_APPNUM), 0, 0, 1, 1},
  {&__pyx_n_s_Add_error_class, __pyx_k_Add_error_class, sizeof(__pyx_k_Add_error_class), 0, 0, 1, 1},
  {&__pyx_n_s_Add_error_code, __pyx_k_Add_error_code, sizeof(__pyx_k_Add_error_code), 0, 0, 1, 1},
  {&__pyx_n_s_Add_error_string, __pyx_k_Add_error_string, sizeof(__pyx_k_Add_error_string), 0, 0, 1, 1},
  {&__pyx_n_s_Aint_add, __pyx_k_Aint_add, sizeof(__pyx_k_Aint_add), 0, 0, 1, 1},
  {&__pyx_n_s_Aint_diff, __pyx_k_Aint_diff, sizeof(__pyx_k_Aint_diff), 0, 0, 1, 1},
  {&__pyx_n_s_Alloc_mem, __pyx_k_Alloc_mem, sizeof(__pyx_k_Alloc_mem), 0, 0, 1, 1},
  {&__pyx_n_s_Allocate, __pyx_k_Allocate, sizeof(__pyx_k_Allocate), 0, 0, 1, 1},
  {&__pyx_n_s_Allocate_shared, __pyx_k_Allocate_shared, sizeof(__pyx_k_Allocate_shared), 0, 0, 1, 1},
  {&__pyx_n_s_Attach_buffer, __pyx_k_Attach_buffer, sizeof(__pyx_k_Attach_buffer), 0, 0, 1, 1},
  {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1},
  {&__pyx_n_s_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 0, 1, 1},
  {&__pyx_n_s_BAND, __pyx_k_BAND, sizeof(__pyx_k_BAND), 0, 0, 1, 1},
  {&__pyx_n_s_BOOL, __pyx_k_BOOL, sizeof(__pyx_k_BOOL), 0, 0, 1, 1},
  {&__pyx_n_s_BOR, __pyx_k_BOR, sizeof(__pyx_k_BOR), 0, 0, 1, 1},
  {&__pyx_n_s_BOTTOM, __pyx_k_BOTTOM, sizeof(__pyx_k_BOTTOM), 0, 0, 1, 1},
  {&__pyx_n_s_BSEND_OVERHEAD, __pyx_k_BSEND_OVERHEAD, sizeof(__pyx_k_BSEND_OVERHEAD), 0, 0, 1, 1},
  {&__pyx_n_s_BXOR, __pyx_k_BXOR, sizeof(__pyx_k_BXOR), 0, 0, 1, 1},
  {&__pyx_n_s_BYTE, __pyx_k_BYTE, sizeof(__pyx_k_BYTE), 0, 0, 1, 1},
  {&__pyx_n_s_BytesIO, __pyx_k_BytesIO, sizeof(__pyx_k_BytesIO), 0, 0, 1, 1},
  {&__pyx_n_s_CART, __pyx_k_CART, sizeof(__pyx_k_CART), 0, 0, 1, 1},
  {&__pyx_n_s_CHAR, __pyx_k_CHAR, sizeof(__pyx_k_CHAR), 0, 0, 1, 1},
  {&__pyx_n_s_CHARACTER, __pyx_k_CHARACTER, sizeof(__pyx_k_CHARACTER), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_CONTIGUOUS, __pyx_k_COMBINER_CONTIGUOUS, sizeof(__pyx_k_COMBINER_CONTIGUOUS), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_DARRAY, __pyx_k_COMBINER_DARRAY, sizeof(__pyx_k_COMBINER_DARRAY), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_DUP, __pyx_k_COMBINER_DUP, sizeof(__pyx_k_COMBINER_DUP), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_F90_COMPLEX, __pyx_k_COMBINER_F90_COMPLEX, sizeof(__pyx_k_COMBINER_F90_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_F90_INTEGER, __pyx_k_COMBINER_F90_INTEGER, sizeof(__pyx_k_COMBINER_F90_INTEGER), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_F90_REAL, __pyx_k_COMBINER_F90_REAL, sizeof(__pyx_k_COMBINER_F90_REAL), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_HINDEXED, __pyx_k_COMBINER_HINDEXED, sizeof(__pyx_k_COMBINER_HINDEXED), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_HINDEXED_BLOCK, __pyx_k_COMBINER_HINDEXED_BLOCK, sizeof(__pyx_k_COMBINER_HINDEXED_BLOCK), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_HVECTOR, __pyx_k_COMBINER_HVECTOR, sizeof(__pyx_k_COMBINER_HVECTOR), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_INDEXED, __pyx_k_COMBINER_INDEXED, sizeof(__pyx_k_COMBINER_INDEXED), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_INDEXED_BLOCK, __pyx_k_COMBINER_INDEXED_BLOCK, sizeof(__pyx_k_COMBINER_INDEXED_BLOCK), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_NAMED, __pyx_k_COMBINER_NAMED, sizeof(__pyx_k_COMBINER_NAMED), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_RESIZED, __pyx_k_COMBINER_RESIZED, sizeof(__pyx_k_COMBINER_RESIZED), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_STRUCT, __pyx_k_COMBINER_STRUCT, sizeof(__pyx_k_COMBINER_STRUCT), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_SUBARRAY, __pyx_k_COMBINER_SUBARRAY, sizeof(__pyx_k_COMBINER_SUBARRAY), 0, 0, 1, 1},
  {&__pyx_n_s_COMBINER_VECTOR, __pyx_k_COMBINER_VECTOR, sizeof(__pyx_k_COMBINER_VECTOR), 0, 0, 1, 1},
  {&__pyx_n_s_COMM_NULL, __pyx_k_COMM_NULL, sizeof(__pyx_k_COMM_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_COMM_SELF, __pyx_k_COMM_SELF, sizeof(__pyx_k_COMM_SELF), 0, 0, 1, 1},
  {&__pyx_n_s_COMM_TYPE_SHARED, __pyx_k_COMM_TYPE_SHARED, sizeof(__pyx_k_COMM_TYPE_SHARED), 0, 0, 1, 1},
  {&__pyx_n_s_COMM_WORLD, __pyx_k_COMM_WORLD, sizeof(__pyx_k_COMM_WORLD), 0, 0, 1, 1},
  {&__pyx_n_s_COMPLEX, __pyx_k_COMPLEX, sizeof(__pyx_k_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_COMPLEX16, __pyx_k_COMPLEX16, sizeof(__pyx_k_COMPLEX16), 0, 0, 1, 1},
  {&__pyx_n_s_COMPLEX32, __pyx_k_COMPLEX32, sizeof(__pyx_k_COMPLEX32), 0, 0, 1, 1},
  {&__pyx_n_s_COMPLEX4, __pyx_k_COMPLEX4, sizeof(__pyx_k_COMPLEX4), 0, 0, 1, 1},
  {&__pyx_n_s_COMPLEX8, __pyx_k_COMPLEX8, sizeof(__pyx_k_COMPLEX8), 0, 0, 1, 1},
  {&__pyx_n_s_CONGRUENT, __pyx_k_CONGRUENT, sizeof(__pyx_k_CONGRUENT), 0, 0, 1, 1},
  {&__pyx_n_s_CONTIGUOUS, __pyx_k_CONTIGUOUS, sizeof(__pyx_k_CONTIGUOUS), 0, 0, 1, 1},
  {&__pyx_n_s_COUNT, __pyx_k_COUNT, sizeof(__pyx_k_COUNT), 0, 0, 1, 1},
  {&__pyx_n_s_CXX_BOOL, __pyx_k_CXX_BOOL, sizeof(__pyx_k_CXX_BOOL), 0, 0, 1, 1},
  {&__pyx_n_s_CXX_DOUBLE_COMPLEX, __pyx_k_CXX_DOUBLE_COMPLEX, sizeof(__pyx_k_CXX_DOUBLE_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_CXX_FLOAT_COMPLEX, __pyx_k_CXX_FLOAT_COMPLEX, sizeof(__pyx_k_CXX_FLOAT_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_CXX_LONG_DOUBLE_COMPLEX, __pyx_k_CXX_LONG_DOUBLE_COMPLEX, sizeof(__pyx_k_CXX_LONG_DOUBLE_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_C_BOOL, __pyx_k_C_BOOL, sizeof(__pyx_k_C_BOOL), 0, 0, 1, 1},
  {&__pyx_n_s_C_COMPLEX, __pyx_k_C_COMPLEX, sizeof(__pyx_k_C_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_C_DOUBLE_COMPLEX, __pyx_k_C_DOUBLE_COMPLEX, sizeof(__pyx_k_C_DOUBLE_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_C_FLOAT_COMPLEX, __pyx_k_C_FLOAT_COMPLEX, sizeof(__pyx_k_C_FLOAT_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_C_LONG_DOUBLE_COMPLEX, __pyx_k_C_LONG_DOUBLE_COMPLEX, sizeof(__pyx_k_C_LONG_DOUBLE_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_Cartcomm, __pyx_k_Cartcomm, sizeof(__pyx_k_Cartcomm), 0, 0, 1, 1},
  {&__pyx_n_s_Close_port, __pyx_k_Close_port, sizeof(__pyx_k_Close_port), 0, 0, 1, 1},
  {&__pyx_n_s_Comm, __pyx_k_Comm, sizeof(__pyx_k_Comm), 0, 0, 1, 1},
  {&__pyx_n_s_Compare, __pyx_k_Compare, sizeof(__pyx_k_Compare), 0, 0, 1, 1},
  {&__pyx_n_s_Compute_dims, __pyx_k_Compute_dims, sizeof(__pyx_k_Compute_dims), 0, 0, 1, 1},
  {&__pyx_n_s_Create, __pyx_k_Create, sizeof(__pyx_k_Create), 0, 0, 1, 1},
  {&__pyx_n_s_Create_dup, __pyx_k_Create_dup, sizeof(__pyx_k_Create_dup), 0, 0, 1, 1},
  {&__pyx_n_s_Create_dynamic, __pyx_k_Create_dynamic, sizeof(__pyx_k_Create_dynamic), 0, 0, 1, 1},
  {&__pyx_n_s_Create_f90_complex, __pyx_k_Create_f90_complex, sizeof(__pyx_k_Create_f90_complex), 0, 0, 1, 1},
  {&__pyx_n_s_Create_f90_integer, __pyx_k_Create_f90_integer, sizeof(__pyx_k_Create_f90_integer), 0, 0, 1, 1},
  {&__pyx_n_s_Create_f90_real, __pyx_k_Create_f90_real, sizeof(__pyx_k_Create_f90_real), 0, 0, 1, 1},
  {&__pyx_n_s_Create_keyval, __pyx_k_Create_keyval, sizeof(__pyx_k_Create_keyval), 0, 0, 1, 1},
  {&__pyx_n_s_Create_resized, __pyx_k_Create_resized, sizeof(__pyx_k_Create_resized), 0, 0, 1, 1},
  {&__pyx_n_s_Create_struct, __pyx_k_Create_struct, sizeof(__pyx_k_Create_struct), 0, 0, 1, 1},
  {&__pyx_n_s_DARRAY, __pyx_k_DARRAY, sizeof(__pyx_k_DARRAY), 0, 0, 1, 1},
  {&__pyx_n_s_DATATYPE_NULL, __pyx_k_DATATYPE_NULL, sizeof(__pyx_k_DATATYPE_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_DEFAULT_PROTOCOL, __pyx_k_DEFAULT_PROTOCOL, sizeof(__pyx_k_DEFAULT_PROTOCOL), 0, 0, 1, 1},
  {&__pyx_n_s_DISPLACEMENT_CURRENT, __pyx_k_DISPLACEMENT_CURRENT, sizeof(__pyx_k_DISPLACEMENT_CURRENT), 0, 0, 1, 1},
  {&__pyx_n_s_DISP_CUR, __pyx_k_DISP_CUR, sizeof(__pyx_k_DISP_CUR), 0, 0, 1, 1},
  {&__pyx_n_s_DISTRIBUTE_BLOCK, __pyx_k_DISTRIBUTE_BLOCK, sizeof(__pyx_k_DISTRIBUTE_BLOCK), 0, 0, 1, 1},
  {&__pyx_n_s_DISTRIBUTE_CYCLIC, __pyx_k_DISTRIBUTE_CYCLIC, sizeof(__pyx_k_DISTRIBUTE_CYCLIC), 0, 0, 1, 1},
  {&__pyx_n_s_DISTRIBUTE_DFLT_DARG, __pyx_k_DISTRIBUTE_DFLT_DARG, sizeof(__pyx_k_DISTRIBUTE_DFLT_DARG), 0, 0, 1, 1},
  {&__pyx_n_s_DISTRIBUTE_NONE, __pyx_k_DISTRIBUTE_NONE, sizeof(__pyx_k_DISTRIBUTE_NONE), 0, 0, 1, 1},
  {&__pyx_n_s_DIST_GRAPH, __pyx_k_DIST_GRAPH, sizeof(__pyx_k_DIST_GRAPH), 0, 0, 1, 1},
  {&__pyx_n_s_DOUBLE, __pyx_k_DOUBLE, sizeof(__pyx_k_DOUBLE), 0, 0, 1, 1},
  {&__pyx_n_s_DOUBLE_COMPLEX, __pyx_k_DOUBLE_COMPLEX, sizeof(__pyx_k_DOUBLE_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_DOUBLE_INT, __pyx_k_DOUBLE_INT, sizeof(__pyx_k_DOUBLE_INT), 0, 0, 1, 1},
  {&__pyx_n_s_DOUBLE_PRECISION, __pyx_k_DOUBLE_PRECISION, sizeof(__pyx_k_DOUBLE_PRECISION), 0, 0, 1, 1},
  {&__pyx_n_s_DUP, __pyx_k_DUP, sizeof(__pyx_k_DUP), 0, 0, 1, 1},
  {&__pyx_n_s_Datatype, __pyx_k_Datatype, sizeof(__pyx_k_Datatype), 0, 0, 1, 1},
  {&__pyx_n_s_Delete, __pyx_k_Delete, sizeof(__pyx_k_Delete), 0, 0, 1, 1},
  {&__pyx_n_s_Detach_buffer, __pyx_k_Detach_buffer, sizeof(__pyx_k_Detach_buffer), 0, 0, 1, 1},
  {&__pyx_n_s_Difference, __pyx_k_Difference, sizeof(__pyx_k_Difference), 0, 0, 1, 1},
  {&__pyx_n_s_Distgraphcomm, __pyx_k_Distgraphcomm, sizeof(__pyx_k_Distgraphcomm), 0, 0, 1, 1},
  {&__pyx_n_s_Dup, __pyx_k_Dup, sizeof(__pyx_k_Dup), 0, 0, 1, 1},
  {&__pyx_n_s_ERRHANDLER_NULL, __pyx_k_ERRHANDLER_NULL, sizeof(__pyx_k_ERRHANDLER_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_ERRORS_ARE_FATAL, __pyx_k_ERRORS_ARE_FATAL, sizeof(__pyx_k_ERRORS_ARE_FATAL), 0, 0, 1, 1},
  {&__pyx_n_s_ERRORS_RETURN, __pyx_k_ERRORS_RETURN, sizeof(__pyx_k_ERRORS_RETURN), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_ACCESS, __pyx_k_ERR_ACCESS, sizeof(__pyx_k_ERR_ACCESS), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_AMODE, __pyx_k_ERR_AMODE, sizeof(__pyx_k_ERR_AMODE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_ARG, __pyx_k_ERR_ARG, sizeof(__pyx_k_ERR_ARG), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_ASSERT, __pyx_k_ERR_ASSERT, sizeof(__pyx_k_ERR_ASSERT), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_BAD_FILE, __pyx_k_ERR_BAD_FILE, sizeof(__pyx_k_ERR_BAD_FILE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_BASE, __pyx_k_ERR_BASE, sizeof(__pyx_k_ERR_BASE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_BUFFER, __pyx_k_ERR_BUFFER, sizeof(__pyx_k_ERR_BUFFER), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_COMM, __pyx_k_ERR_COMM, sizeof(__pyx_k_ERR_COMM), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_CONVERSION, __pyx_k_ERR_CONVERSION, sizeof(__pyx_k_ERR_CONVERSION), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_COUNT, __pyx_k_ERR_COUNT, sizeof(__pyx_k_ERR_COUNT), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_DIMS, __pyx_k_ERR_DIMS, sizeof(__pyx_k_ERR_DIMS), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_DISP, __pyx_k_ERR_DISP, sizeof(__pyx_k_ERR_DISP), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_DUP_DATAREP, __pyx_k_ERR_DUP_DATAREP, sizeof(__pyx_k_ERR_DUP_DATAREP), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_FILE, __pyx_k_ERR_FILE, sizeof(__pyx_k_ERR_FILE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_FILE_EXISTS, __pyx_k_ERR_FILE_EXISTS, sizeof(__pyx_k_ERR_FILE_EXISTS), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_FILE_IN_USE, __pyx_k_ERR_FILE_IN_USE, sizeof(__pyx_k_ERR_FILE_IN_USE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_GROUP, __pyx_k_ERR_GROUP, sizeof(__pyx_k_ERR_GROUP), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_INFO, __pyx_k_ERR_INFO, sizeof(__pyx_k_ERR_INFO), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_INFO_KEY, __pyx_k_ERR_INFO_KEY, sizeof(__pyx_k_ERR_INFO_KEY), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_INFO_NOKEY, __pyx_k_ERR_INFO_NOKEY, sizeof(__pyx_k_ERR_INFO_NOKEY), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_INFO_VALUE, __pyx_k_ERR_INFO_VALUE, sizeof(__pyx_k_ERR_INFO_VALUE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_INTERN, __pyx_k_ERR_INTERN, sizeof(__pyx_k_ERR_INTERN), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_IN_STATUS, __pyx_k_ERR_IN_STATUS, sizeof(__pyx_k_ERR_IN_STATUS), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_IO, __pyx_k_ERR_IO, sizeof(__pyx_k_ERR_IO), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_KEYVAL, __pyx_k_ERR_KEYVAL, sizeof(__pyx_k_ERR_KEYVAL), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_LASTCODE, __pyx_k_ERR_LASTCODE, sizeof(__pyx_k_ERR_LASTCODE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_LOCKTYPE, __pyx_k_ERR_LOCKTYPE, sizeof(__pyx_k_ERR_LOCKTYPE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_NAME, __pyx_k_ERR_NAME, sizeof(__pyx_k_ERR_NAME), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_NOT_SAME, __pyx_k_ERR_NOT_SAME, sizeof(__pyx_k_ERR_NOT_SAME), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_NO_MEM, __pyx_k_ERR_NO_MEM, sizeof(__pyx_k_ERR_NO_MEM), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_NO_SPACE, __pyx_k_ERR_NO_SPACE, sizeof(__pyx_k_ERR_NO_SPACE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_NO_SUCH_FILE, __pyx_k_ERR_NO_SUCH_FILE, sizeof(__pyx_k_ERR_NO_SUCH_FILE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_OP, __pyx_k_ERR_OP, sizeof(__pyx_k_ERR_OP), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_OTHER, __pyx_k_ERR_OTHER, sizeof(__pyx_k_ERR_OTHER), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_PENDING, __pyx_k_ERR_PENDING, sizeof(__pyx_k_ERR_PENDING), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_PORT, __pyx_k_ERR_PORT, sizeof(__pyx_k_ERR_PORT), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_QUOTA, __pyx_k_ERR_QUOTA, sizeof(__pyx_k_ERR_QUOTA), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RANK, __pyx_k_ERR_RANK, sizeof(__pyx_k_ERR_RANK), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_READ_ONLY, __pyx_k_ERR_READ_ONLY, sizeof(__pyx_k_ERR_READ_ONLY), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_REQUEST, __pyx_k_ERR_REQUEST, sizeof(__pyx_k_ERR_REQUEST), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RMA_ATTACH, __pyx_k_ERR_RMA_ATTACH, sizeof(__pyx_k_ERR_RMA_ATTACH), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RMA_CONFLICT, __pyx_k_ERR_RMA_CONFLICT, sizeof(__pyx_k_ERR_RMA_CONFLICT), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RMA_FLAVOR, __pyx_k_ERR_RMA_FLAVOR, sizeof(__pyx_k_ERR_RMA_FLAVOR), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RMA_RANGE, __pyx_k_ERR_RMA_RANGE, sizeof(__pyx_k_ERR_RMA_RANGE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RMA_SHARED, __pyx_k_ERR_RMA_SHARED, sizeof(__pyx_k_ERR_RMA_SHARED), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_RMA_SYNC, __pyx_k_ERR_RMA_SYNC, sizeof(__pyx_k_ERR_RMA_SYNC), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_ROOT, __pyx_k_ERR_ROOT, sizeof(__pyx_k_ERR_ROOT), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_SERVICE, __pyx_k_ERR_SERVICE, sizeof(__pyx_k_ERR_SERVICE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_SIZE, __pyx_k_ERR_SIZE, sizeof(__pyx_k_ERR_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_SPAWN, __pyx_k_ERR_SPAWN, sizeof(__pyx_k_ERR_SPAWN), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_TAG, __pyx_k_ERR_TAG, sizeof(__pyx_k_ERR_TAG), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_TOPOLOGY, __pyx_k_ERR_TOPOLOGY, sizeof(__pyx_k_ERR_TOPOLOGY), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_TRUNCATE, __pyx_k_ERR_TRUNCATE, sizeof(__pyx_k_ERR_TRUNCATE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_TYPE, __pyx_k_ERR_TYPE, sizeof(__pyx_k_ERR_TYPE), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_UNKNOWN, __pyx_k_ERR_UNKNOWN, sizeof(__pyx_k_ERR_UNKNOWN), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_UNSUPPORTED_DATAREP, __pyx_k_ERR_UNSUPPORTED_DATAREP, sizeof(__pyx_k_ERR_UNSUPPORTED_DATAREP), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_UNSUPPORTED_OPERATION, __pyx_k_ERR_UNSUPPORTED_OPERATION, sizeof(__pyx_k_ERR_UNSUPPORTED_OPERATION), 0, 0, 1, 1},
  {&__pyx_n_s_ERR_WIN, __pyx_k_ERR_WIN, sizeof(__pyx_k_ERR_WIN), 0, 0, 1, 1},
  {&__pyx_n_s_Errhandler, __pyx_k_Errhandler, sizeof(__pyx_k_Errhandler), 0, 0, 1, 1},
  {&__pyx_kp_s_Exception, __pyx_k_Exception, sizeof(__pyx_k_Exception), 0, 0, 1, 0},
  {&__pyx_n_s_Exception_2, __pyx_k_Exception_2, sizeof(__pyx_k_Exception_2), 0, 0, 1, 1},
  {&__pyx_n_s_Exception_Get_error_class, __pyx_k_Exception_Get_error_class, sizeof(__pyx_k_Exception_Get_error_class), 0, 0, 1, 1},
  {&__pyx_n_s_Exception_Get_error_code, __pyx_k_Exception_Get_error_code, sizeof(__pyx_k_Exception_Get_error_code), 0, 0, 1, 1},
  {&__pyx_n_s_Exception_Get_error_string, __pyx_k_Exception_Get_error_string, sizeof(__pyx_k_Exception_Get_error_string), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___bool, __pyx_k_Exception___bool, sizeof(__pyx_k_Exception___bool), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___eq, __pyx_k_Exception___eq, sizeof(__pyx_k_Exception___eq), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___ge, __pyx_k_Exception___ge, sizeof(__pyx_k_Exception___ge), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___gt, __pyx_k_Exception___gt, sizeof(__pyx_k_Exception___gt), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___hash, __pyx_k_Exception___hash, sizeof(__pyx_k_Exception___hash), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___init, __pyx_k_Exception___init, sizeof(__pyx_k_Exception___init), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___int, __pyx_k_Exception___int, sizeof(__pyx_k_Exception___int), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___le, __pyx_k_Exception___le, sizeof(__pyx_k_Exception___le), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___lt, __pyx_k_Exception___lt, sizeof(__pyx_k_Exception___lt), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___ne, __pyx_k_Exception___ne, sizeof(__pyx_k_Exception___ne), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___repr, __pyx_k_Exception___repr, sizeof(__pyx_k_Exception___repr), 0, 0, 1, 1},
  {&__pyx_n_s_Exception___str, __pyx_k_Exception___str, sizeof(__pyx_k_Exception___str), 0, 0, 1, 1},
  {&__pyx_n_s_F90_COMPLEX, __pyx_k_F90_COMPLEX, sizeof(__pyx_k_F90_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_F90_INTEGER, __pyx_k_F90_INTEGER, sizeof(__pyx_k_F90_INTEGER), 0, 0, 1, 1},
  {&__pyx_n_s_F90_REAL, __pyx_k_F90_REAL, sizeof(__pyx_k_F90_REAL), 0, 0, 1, 1},
  {&__pyx_n_s_FILE_NULL, __pyx_k_FILE_NULL, sizeof(__pyx_k_FILE_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_FLOAT, __pyx_k_FLOAT, sizeof(__pyx_k_FLOAT), 0, 0, 1, 1},
  {&__pyx_n_s_FLOAT_INT, __pyx_k_FLOAT_INT, sizeof(__pyx_k_FLOAT_INT), 0, 0, 1, 1},
  {&__pyx_n_s_F_BOOL, __pyx_k_F_BOOL, sizeof(__pyx_k_F_BOOL), 0, 0, 1, 1},
  {&__pyx_n_s_F_COMPLEX, __pyx_k_F_COMPLEX, sizeof(__pyx_k_F_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_F_DOUBLE, __pyx_k_F_DOUBLE, sizeof(__pyx_k_F_DOUBLE), 0, 0, 1, 1},
  {&__pyx_n_s_F_DOUBLE_COMPLEX, __pyx_k_F_DOUBLE_COMPLEX, sizeof(__pyx_k_F_DOUBLE_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_F_FLOAT, __pyx_k_F_FLOAT, sizeof(__pyx_k_F_FLOAT), 0, 0, 1, 1},
  {&__pyx_n_s_F_FLOAT_COMPLEX, __pyx_k_F_FLOAT_COMPLEX, sizeof(__pyx_k_F_FLOAT_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_F_INT, __pyx_k_F_INT, sizeof(__pyx_k_F_INT), 0, 0, 1, 1},
  {&__pyx_n_s_File, __pyx_k_File, sizeof(__pyx_k_File), 0, 0, 1, 1},
  {&__pyx_n_s_Finalize, __pyx_k_Finalize, sizeof(__pyx_k_Finalize), 0, 0, 1, 1},
  {&__pyx_n_s_Free_keyval, __pyx_k_Free_keyval, sizeof(__pyx_k_Free_keyval), 0, 0, 1, 1},
  {&__pyx_n_s_Free_mem, __pyx_k_Free_mem, sizeof(__pyx_k_Free_mem), 0, 0, 1, 1},
  {&__pyx_n_s_GRAPH, __pyx_k_GRAPH, sizeof(__pyx_k_GRAPH), 0, 0, 1, 1},
  {&__pyx_n_s_GROUP_EMPTY, __pyx_k_GROUP_EMPTY, sizeof(__pyx_k_GROUP_EMPTY), 0, 0, 1, 1},
  {&__pyx_n_s_GROUP_NULL, __pyx_k_GROUP_NULL, sizeof(__pyx_k_GROUP_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_Get, __pyx_k_Get, sizeof(__pyx_k_Get), 0, 0, 1, 1},
  {&__pyx_n_s_Get_address, __pyx_k_Get_address, sizeof(__pyx_k_Get_address), 0, 0, 1, 1},
  {&__pyx_n_s_Get_amode, __pyx_k_Get_amode, sizeof(__pyx_k_Get_amode), 0, 0, 1, 1},
  {&__pyx_n_s_Get_atomicity, __pyx_k_Get_atomicity, sizeof(__pyx_k_Get_atomicity), 0, 0, 1, 1},
  {&__pyx_n_s_Get_contents, __pyx_k_Get_contents, sizeof(__pyx_k_Get_contents), 0, 0, 1, 1},
  {&__pyx_n_s_Get_count, __pyx_k_Get_count, sizeof(__pyx_k_Get_count), 0, 0, 1, 1},
  {&__pyx_n_s_Get_dim, __pyx_k_Get_dim, sizeof(__pyx_k_Get_dim), 0, 0, 1, 1},
  {&__pyx_n_s_Get_dims, __pyx_k_Get_dims, sizeof(__pyx_k_Get_dims), 0, 0, 1, 1},
  {&__pyx_n_s_Get_dist_neighbors, __pyx_k_Get_dist_neighbors, sizeof(__pyx_k_Get_dist_neighbors), 0, 0, 1, 1},
  {&__pyx_n_s_Get_dist_neighbors_count, __pyx_k_Get_dist_neighbors_count, sizeof(__pyx_k_Get_dist_neighbors_count), 0, 0, 1, 1},
  {&__pyx_n_s_Get_envelope, __pyx_k_Get_envelope, sizeof(__pyx_k_Get_envelope), 0, 0, 1, 1},
  {&__pyx_n_s_Get_error, __pyx_k_Get_error, sizeof(__pyx_k_Get_error), 0, 0, 1, 1},
  {&__pyx_n_s_Get_error_class, __pyx_k_Get_error_class, sizeof(__pyx_k_Get_error_class), 0, 0, 1, 1},
  {&__pyx_n_s_Get_error_code, __pyx_k_Get_error_code, sizeof(__pyx_k_Get_error_code), 0, 0, 1, 1},
  {&__pyx_n_s_Get_error_string, __pyx_k_Get_error_string, sizeof(__pyx_k_Get_error_string), 0, 0, 1, 1},
  {&__pyx_n_s_Get_group, __pyx_k_Get_group, sizeof(__pyx_k_Get_group), 0, 0, 1, 1},
  {&__pyx_n_s_Get_info, __pyx_k_Get_info, sizeof(__pyx_k_Get_info), 0, 0, 1, 1},
  {&__pyx_n_s_Get_library_version, __pyx_k_Get_library_version, sizeof(__pyx_k_Get_library_version), 0, 0, 1, 1},
  {&__pyx_n_s_Get_name, __pyx_k_Get_name, sizeof(__pyx_k_Get_name), 0, 0, 1, 1},
  {&__pyx_n_s_Get_neighbors, __pyx_k_Get_neighbors, sizeof(__pyx_k_Get_neighbors), 0, 0, 1, 1},
  {&__pyx_n_s_Get_neighbors_count, __pyx_k_Get_neighbors_count, sizeof(__pyx_k_Get_neighbors_count), 0, 0, 1, 1},
  {&__pyx_n_s_Get_nkeys, __pyx_k_Get_nkeys, sizeof(__pyx_k_Get_nkeys), 0, 0, 1, 1},
  {&__pyx_n_s_Get_nthkey, __pyx_k_Get_nthkey, sizeof(__pyx_k_Get_nthkey), 0, 0, 1, 1},
  {&__pyx_n_s_Get_parent, __pyx_k_Get_parent, sizeof(__pyx_k_Get_parent), 0, 0, 1, 1},
  {&__pyx_n_s_Get_processor_name, __pyx_k_Get_processor_name, sizeof(__pyx_k_Get_processor_name), 0, 0, 1, 1},
  {&__pyx_n_s_Get_rank, __pyx_k_Get_rank, sizeof(__pyx_k_Get_rank), 0, 0, 1, 1},
  {&__pyx_n_s_Get_remote_group, __pyx_k_Get_remote_group, sizeof(__pyx_k_Get_remote_group), 0, 0, 1, 1},
  {&__pyx_n_s_Get_remote_size, __pyx_k_Get_remote_size, sizeof(__pyx_k_Get_remote_size), 0, 0, 1, 1},
  {&__pyx_n_s_Get_size, __pyx_k_Get_size, sizeof(__pyx_k_Get_size), 0, 0, 1, 1},
  {&__pyx_n_s_Get_source, __pyx_k_Get_source, sizeof(__pyx_k_Get_source), 0, 0, 1, 1},
  {&__pyx_n_s_Get_tag, __pyx_k_Get_tag, sizeof(__pyx_k_Get_tag), 0, 0, 1, 1},
  {&__pyx_n_s_Get_topo, __pyx_k_Get_topo, sizeof(__pyx_k_Get_topo), 0, 0, 1, 1},
  {&__pyx_n_s_Get_topology, __pyx_k_Get_topology, sizeof(__pyx_k_Get_topology), 0, 0, 1, 1},
  {&__pyx_n_s_Get_version, __pyx_k_Get_version, sizeof(__pyx_k_Get_version), 0, 0, 1, 1},
  {&__pyx_n_s_Graphcomm, __pyx_k_Graphcomm, sizeof(__pyx_k_Graphcomm), 0, 0, 1, 1},
  {&__pyx_n_s_Grequest, __pyx_k_Grequest, sizeof(__pyx_k_Grequest), 0, 0, 1, 1},
  {&__pyx_n_s_Group, __pyx_k_Group, sizeof(__pyx_k_Group), 0, 0, 1, 1},
  {&__pyx_n_s_HIGHEST_PROTOCOL, __pyx_k_HIGHEST_PROTOCOL, sizeof(__pyx_k_HIGHEST_PROTOCOL), 0, 0, 1, 1},
  {&__pyx_n_s_HINDEXED, __pyx_k_HINDEXED, sizeof(__pyx_k_HINDEXED), 0, 0, 1, 1},
  {&__pyx_n_s_HINDEXED_BLOCK, __pyx_k_HINDEXED_BLOCK, sizeof(__pyx_k_HINDEXED_BLOCK), 0, 0, 1, 1},
  {&__pyx_n_s_HOST, __pyx_k_HOST, sizeof(__pyx_k_HOST), 0, 0, 1, 1},
  {&__pyx_n_s_HVECTOR, __pyx_k_HVECTOR, sizeof(__pyx_k_HVECTOR), 0, 0, 1, 1},
  {&__pyx_n_s_IDENT, __pyx_k_IDENT, sizeof(__pyx_k_IDENT), 0, 0, 1, 1},
  {&__pyx_n_s_INDEXED, __pyx_k_INDEXED, sizeof(__pyx_k_INDEXED), 0, 0, 1, 1},
  {&__pyx_n_s_INDEXED_BLOCK, __pyx_k_INDEXED_BLOCK, sizeof(__pyx_k_INDEXED_BLOCK), 0, 0, 1, 1},
  {&__pyx_n_s_INFO_ENV, __pyx_k_INFO_ENV, sizeof(__pyx_k_INFO_ENV), 0, 0, 1, 1},
  {&__pyx_n_s_INFO_NULL, __pyx_k_INFO_NULL, sizeof(__pyx_k_INFO_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_INT, __pyx_k_INT, sizeof(__pyx_k_INT), 0, 0, 1, 1},
  {&__pyx_n_s_INT16_T, __pyx_k_INT16_T, sizeof(__pyx_k_INT16_T), 0, 0, 1, 1},
  {&__pyx_n_s_INT32_T, __pyx_k_INT32_T, sizeof(__pyx_k_INT32_T), 0, 0, 1, 1},
  {&__pyx_n_s_INT64_T, __pyx_k_INT64_T, sizeof(__pyx_k_INT64_T), 0, 0, 1, 1},
  {&__pyx_n_s_INT8_T, __pyx_k_INT8_T, sizeof(__pyx_k_INT8_T), 0, 0, 1, 1},
  {&__pyx_n_s_INTEGER, __pyx_k_INTEGER, sizeof(__pyx_k_INTEGER), 0, 0, 1, 1},
  {&__pyx_n_s_INTEGER1, __pyx_k_INTEGER1, sizeof(__pyx_k_INTEGER1), 0, 0, 1, 1},
  {&__pyx_n_s_INTEGER16, __pyx_k_INTEGER16, sizeof(__pyx_k_INTEGER16), 0, 0, 1, 1},
  {&__pyx_n_s_INTEGER2, __pyx_k_INTEGER2, sizeof(__pyx_k_INTEGER2), 0, 0, 1, 1},
  {&__pyx_n_s_INTEGER4, __pyx_k_INTEGER4, sizeof(__pyx_k_INTEGER4), 0, 0, 1, 1},
  {&__pyx_n_s_INTEGER8, __pyx_k_INTEGER8, sizeof(__pyx_k_INTEGER8), 0, 0, 1, 1},
  {&__pyx_n_s_INT_INT, __pyx_k_INT_INT, sizeof(__pyx_k_INT_INT), 0, 0, 1, 1},
  {&__pyx_n_s_IN_PLACE, __pyx_k_IN_PLACE, sizeof(__pyx_k_IN_PLACE), 0, 0, 1, 1},
  {&__pyx_n_s_IO, __pyx_k_IO, sizeof(__pyx_k_IO), 0, 0, 1, 1},
  {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1},
  {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
  {&__pyx_n_s_Info, __pyx_k_Info, sizeof(__pyx_k_Info), 0, 0, 1, 1},
  {&__pyx_n_s_Init, __pyx_k_Init, sizeof(__pyx_k_Init), 0, 0, 1, 1},
  {&__pyx_n_s_Init_thread, __pyx_k_Init_thread, sizeof(__pyx_k_Init_thread), 0, 0, 1, 1},
  {&__pyx_n_s_Intercomm, __pyx_k_Intercomm, sizeof(__pyx_k_Intercomm), 0, 0, 1, 1},
  {&__pyx_n_s_Intersect, __pyx_k_Intersect, sizeof(__pyx_k_Intersect), 0, 0, 1, 1},
  {&__pyx_n_s_Intersection, __pyx_k_Intersection, sizeof(__pyx_k_Intersection), 0, 0, 1, 1},
  {&__pyx_n_s_Intracomm, __pyx_k_Intracomm, sizeof(__pyx_k_Intracomm), 0, 0, 1, 1},
  {&__pyx_n_s_Iprobe, __pyx_k_Iprobe, sizeof(__pyx_k_Iprobe), 0, 0, 1, 1},
  {&__pyx_n_s_Is_cancelled, __pyx_k_Is_cancelled, sizeof(__pyx_k_Is_cancelled), 0, 0, 1, 1},
  {&__pyx_n_s_Is_commutative, __pyx_k_Is_commutative, sizeof(__pyx_k_Is_commutative), 0, 0, 1, 1},
  {&__pyx_n_s_Is_finalized, __pyx_k_Is_finalized, sizeof(__pyx_k_Is_finalized), 0, 0, 1, 1},
  {&__pyx_n_s_Is_initialized, __pyx_k_Is_initialized, sizeof(__pyx_k_Is_initialized), 0, 0, 1, 1},
  {&__pyx_n_s_Is_inter, __pyx_k_Is_inter, sizeof(__pyx_k_Is_inter), 0, 0, 1, 1},
  {&__pyx_n_s_Is_intra, __pyx_k_Is_intra, sizeof(__pyx_k_Is_intra), 0, 0, 1, 1},
  {&__pyx_n_s_Is_thread_main, __pyx_k_Is_thread_main, sizeof(__pyx_k_Is_thread_main), 0, 0, 1, 1},
  {&__pyx_n_s_Join, __pyx_k_Join, sizeof(__pyx_k_Join), 0, 0, 1, 1},
  {&__pyx_n_s_KEYVAL_INVALID, __pyx_k_KEYVAL_INVALID, sizeof(__pyx_k_KEYVAL_INVALID), 0, 0, 1, 1},
  {&__pyx_n_s_KeyError, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1},
  {&__pyx_n_s_LAND, __pyx_k_LAND, sizeof(__pyx_k_LAND), 0, 0, 1, 1},
  {&__pyx_n_s_LASTUSEDCODE, __pyx_k_LASTUSEDCODE, sizeof(__pyx_k_LASTUSEDCODE), 0, 0, 1, 1},
  {&__pyx_n_s_LB, __pyx_k_LB, sizeof(__pyx_k_LB), 0, 0, 1, 1},
  {&__pyx_n_s_LOCK_EXCLUSIVE, __pyx_k_LOCK_EXCLUSIVE, sizeof(__pyx_k_LOCK_EXCLUSIVE), 0, 0, 1, 1},
  {&__pyx_n_s_LOCK_SHARED, __pyx_k_LOCK_SHARED, sizeof(__pyx_k_LOCK_SHARED), 0, 0, 1, 1},
  {&__pyx_n_s_LOGICAL, __pyx_k_LOGICAL, sizeof(__pyx_k_LOGICAL), 0, 0, 1, 1},
  {&__pyx_n_s_LOGICAL1, __pyx_k_LOGICAL1, sizeof(__pyx_k_LOGICAL1), 0, 0, 1, 1},
  {&__pyx_n_s_LOGICAL2, __pyx_k_LOGICAL2, sizeof(__pyx_k_LOGICAL2), 0, 0, 1, 1},
  {&__pyx_n_s_LOGICAL4, __pyx_k_LOGICAL4, sizeof(__pyx_k_LOGICAL4), 0, 0, 1, 1},
  {&__pyx_n_s_LOGICAL8, __pyx_k_LOGICAL8, sizeof(__pyx_k_LOGICAL8), 0, 0, 1, 1},
  {&__pyx_n_s_LONG, __pyx_k_LONG, sizeof(__pyx_k_LONG), 0, 0, 1, 1},
  {&__pyx_n_s_LONG_DOUBLE, __pyx_k_LONG_DOUBLE, sizeof(__pyx_k_LONG_DOUBLE), 0, 0, 1, 1},
  {&__pyx_n_s_LONG_DOUBLE_INT, __pyx_k_LONG_DOUBLE_INT, sizeof(__pyx_k_LONG_DOUBLE_INT), 0, 0, 1, 1},
  {&__pyx_n_s_LONG_INT, __pyx_k_LONG_INT, sizeof(__pyx_k_LONG_INT), 0, 0, 1, 1},
  {&__pyx_n_s_LONG_LONG, __pyx_k_LONG_LONG, sizeof(__pyx_k_LONG_LONG), 0, 0, 1, 1},
  {&__pyx_n_s_LOR, __pyx_k_LOR, sizeof(__pyx_k_LOR), 0, 0, 1, 1},
  {&__pyx_n_s_LXOR, __pyx_k_LXOR, sizeof(__pyx_k_LXOR), 0, 0, 1, 1},
  {&__pyx_n_s_Lookup_name, __pyx_k_Lookup_name, sizeof(__pyx_k_Lookup_name), 0, 0, 1, 1},
  {&__pyx_n_s_MAX, __pyx_k_MAX, sizeof(__pyx_k_MAX), 0, 0, 1, 1},
  {&__pyx_n_s_MAXLOC, __pyx_k_MAXLOC, sizeof(__pyx_k_MAXLOC), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_DATAREP_STRING, __pyx_k_MAX_DATAREP_STRING, sizeof(__pyx_k_MAX_DATAREP_STRING), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_ERROR_STRING, __pyx_k_MAX_ERROR_STRING, sizeof(__pyx_k_MAX_ERROR_STRING), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_INFO_KEY, __pyx_k_MAX_INFO_KEY, sizeof(__pyx_k_MAX_INFO_KEY), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_INFO_VAL, __pyx_k_MAX_INFO_VAL, sizeof(__pyx_k_MAX_INFO_VAL), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_LIBRARY_VERSION_STRING, __pyx_k_MAX_LIBRARY_VERSION_STRING, sizeof(__pyx_k_MAX_LIBRARY_VERSION_STRING), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_OBJECT_NAME, __pyx_k_MAX_OBJECT_NAME, sizeof(__pyx_k_MAX_OBJECT_NAME), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_PORT_NAME, __pyx_k_MAX_PORT_NAME, sizeof(__pyx_k_MAX_PORT_NAME), 0, 0, 1, 1},
  {&__pyx_n_s_MAX_PROCESSOR_NAME, __pyx_k_MAX_PROCESSOR_NAME, sizeof(__pyx_k_MAX_PROCESSOR_NAME), 0, 0, 1, 1},
  {&__pyx_n_s_MESSAGE_NO_PROC, __pyx_k_MESSAGE_NO_PROC, sizeof(__pyx_k_MESSAGE_NO_PROC), 0, 0, 1, 1},
  {&__pyx_n_s_MESSAGE_NULL, __pyx_k_MESSAGE_NULL, sizeof(__pyx_k_MESSAGE_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_MIN, __pyx_k_MIN, sizeof(__pyx_k_MIN), 0, 0, 1, 1},
  {&__pyx_n_s_MINLOC, __pyx_k_MINLOC, sizeof(__pyx_k_MINLOC), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_APPEND, __pyx_k_MODE_APPEND, sizeof(__pyx_k_MODE_APPEND), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_CREATE, __pyx_k_MODE_CREATE, sizeof(__pyx_k_MODE_CREATE), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_DELETE_ON_CLOSE, __pyx_k_MODE_DELETE_ON_CLOSE, sizeof(__pyx_k_MODE_DELETE_ON_CLOSE), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_EXCL, __pyx_k_MODE_EXCL, sizeof(__pyx_k_MODE_EXCL), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_NOCHECK, __pyx_k_MODE_NOCHECK, sizeof(__pyx_k_MODE_NOCHECK), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_NOPRECEDE, __pyx_k_MODE_NOPRECEDE, sizeof(__pyx_k_MODE_NOPRECEDE), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_NOPUT, __pyx_k_MODE_NOPUT, sizeof(__pyx_k_MODE_NOPUT), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_NOSTORE, __pyx_k_MODE_NOSTORE, sizeof(__pyx_k_MODE_NOSTORE), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_NOSUCCEED, __pyx_k_MODE_NOSUCCEED, sizeof(__pyx_k_MODE_NOSUCCEED), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_RDONLY, __pyx_k_MODE_RDONLY, sizeof(__pyx_k_MODE_RDONLY), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_RDWR, __pyx_k_MODE_RDWR, sizeof(__pyx_k_MODE_RDWR), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_SEQUENTIAL, __pyx_k_MODE_SEQUENTIAL, sizeof(__pyx_k_MODE_SEQUENTIAL), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_UNIQUE_OPEN, __pyx_k_MODE_UNIQUE_OPEN, sizeof(__pyx_k_MODE_UNIQUE_OPEN), 0, 0, 1, 1},
  {&__pyx_n_s_MODE_WRONLY, __pyx_k_MODE_WRONLY, sizeof(__pyx_k_MODE_WRONLY), 0, 0, 1, 1},
  {&__pyx_kp_s_MPI_Exception_d, __pyx_k_MPI_Exception_d, sizeof(__pyx_k_MPI_Exception_d), 0, 0, 1, 0},
  {&__pyx_kp_s_MPI_Init_failed_error_code_d, __pyx_k_MPI_Init_failed_error_code_d, sizeof(__pyx_k_MPI_Init_failed_error_code_d), 0, 0, 1, 0},
  {&__pyx_kp_s_MPI_Init_thread_failed_error_cod, __pyx_k_MPI_Init_thread_failed_error_cod, sizeof(__pyx_k_MPI_Init_thread_failed_error_cod), 0, 0, 1, 0},
  {&__pyx_n_s_Match_size, __pyx_k_Match_size, sizeof(__pyx_k_Match_size), 0, 0, 1, 1},
  {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
  {&__pyx_n_s_Message, __pyx_k_Message, sizeof(__pyx_k_Message), 0, 0, 1, 1},
  {&__pyx_kp_s_Message_Passing_Interface, __pyx_k_Message_Passing_Interface, sizeof(__pyx_k_Message_Passing_Interface), 0, 0, 1, 0},
  {&__pyx_n_s_NO_OP, __pyx_k_NO_OP, sizeof(__pyx_k_NO_OP), 0, 0, 1, 1},
  {&__pyx_n_s_NotImplemented, __pyx_k_NotImplemented, sizeof(__pyx_k_NotImplemented), 0, 0, 1, 1},
  {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1},
  {&__pyx_kp_s_Not_a_topology_communicator, __pyx_k_Not_a_topology_communicator, sizeof(__pyx_k_Not_a_topology_communicator), 0, 0, 1, 0},
  {&__pyx_n_s_OFFSET, __pyx_k_OFFSET, sizeof(__pyx_k_OFFSET), 0, 0, 1, 1},
  {&__pyx_n_s_OP_NULL, __pyx_k_OP_NULL, sizeof(__pyx_k_OP_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_ORDER_C, __pyx_k_ORDER_C, sizeof(__pyx_k_ORDER_C), 0, 0, 1, 1},
  {&__pyx_n_s_ORDER_F, __pyx_k_ORDER_F, sizeof(__pyx_k_ORDER_F), 0, 0, 1, 1},
  {&__pyx_n_s_ORDER_FORTRAN, __pyx_k_ORDER_FORTRAN, sizeof(__pyx_k_ORDER_FORTRAN), 0, 0, 1, 1},
  {&__pyx_n_s_Op, __pyx_k_Op, sizeof(__pyx_k_Op), 0, 0, 1, 1},
  {&__pyx_n_s_Open, __pyx_k_Open, sizeof(__pyx_k_Open), 0, 0, 1, 1},
  {&__pyx_n_s_Open_port, __pyx_k_Open_port, sizeof(__pyx_k_Open_port), 0, 0, 1, 1},
  {&__pyx_n_s_OverflowError, __pyx_k_OverflowError, sizeof(__pyx_k_OverflowError), 0, 0, 1, 1},
  {&__pyx_n_s_PACKED, __pyx_k_PACKED, sizeof(__pyx_k_PACKED), 0, 0, 1, 1},
  {&__pyx_n_s_PROC_NULL, __pyx_k_PROC_NULL, sizeof(__pyx_k_PROC_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_PROD, __pyx_k_PROD, sizeof(__pyx_k_PROD), 0, 0, 1, 1},
  {&__pyx_n_s_Pcontrol, __pyx_k_Pcontrol, sizeof(__pyx_k_Pcontrol), 0, 0, 1, 1},
  {&__pyx_n_s_Prequest, __pyx_k_Prequest, sizeof(__pyx_k_Prequest), 0, 0, 1, 1},
  {&__pyx_n_s_Probe, __pyx_k_Probe, sizeof(__pyx_k_Probe), 0, 0, 1, 1},
  {&__pyx_n_s_Publish_name, __pyx_k_Publish_name, sizeof(__pyx_k_Publish_name), 0, 0, 1, 1},
  {&__pyx_n_s_Query_thread, __pyx_k_Query_thread, sizeof(__pyx_k_Query_thread), 0, 0, 1, 1},
  {&__pyx_n_s_REAL, __pyx_k_REAL, sizeof(__pyx_k_REAL), 0, 0, 1, 1},
  {&__pyx_n_s_REAL16, __pyx_k_REAL16, sizeof(__pyx_k_REAL16), 0, 0, 1, 1},
  {&__pyx_n_s_REAL2, __pyx_k_REAL2, sizeof(__pyx_k_REAL2), 0, 0, 1, 1},
  {&__pyx_n_s_REAL4, __pyx_k_REAL4, sizeof(__pyx_k_REAL4), 0, 0, 1, 1},
  {&__pyx_n_s_REAL8, __pyx_k_REAL8, sizeof(__pyx_k_REAL8), 0, 0, 1, 1},
  {&__pyx_n_s_REPLACE, __pyx_k_REPLACE, sizeof(__pyx_k_REPLACE), 0, 0, 1, 1},
  {&__pyx_n_s_REQUEST_NULL, __pyx_k_REQUEST_NULL, sizeof(__pyx_k_REQUEST_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_RESIZED, __pyx_k_RESIZED, sizeof(__pyx_k_RESIZED), 0, 0, 1, 1},
  {&__pyx_n_s_ROOT, __pyx_k_ROOT, sizeof(__pyx_k_ROOT), 0, 0, 1, 1},
  {&__pyx_n_s_Register_datarep, __pyx_k_Register_datarep, sizeof(__pyx_k_Register_datarep), 0, 0, 1, 1},
  {&__pyx_n_s_Request, __pyx_k_Request, sizeof(__pyx_k_Request), 0, 0, 1, 1},
  {&__pyx_n_s_Resized, __pyx_k_Resized, sizeof(__pyx_k_Resized), 0, 0, 1, 1},
  {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
  {&__pyx_n_s_SEEK_CUR, __pyx_k_SEEK_CUR, sizeof(__pyx_k_SEEK_CUR), 0, 0, 1, 1},
  {&__pyx_n_s_SEEK_END, __pyx_k_SEEK_END, sizeof(__pyx_k_SEEK_END), 0, 0, 1, 1},
  {&__pyx_n_s_SEEK_SET, __pyx_k_SEEK_SET, sizeof(__pyx_k_SEEK_SET), 0, 0, 1, 1},
  {&__pyx_n_s_SHORT, __pyx_k_SHORT, sizeof(__pyx_k_SHORT), 0, 0, 1, 1},
  {&__pyx_n_s_SHORT_INT, __pyx_k_SHORT_INT, sizeof(__pyx_k_SHORT_INT), 0, 0, 1, 1},
  {&__pyx_n_s_SIGNED_CHAR, __pyx_k_SIGNED_CHAR, sizeof(__pyx_k_SIGNED_CHAR), 0, 0, 1, 1},
  {&__pyx_n_s_SIGNED_INT, __pyx_k_SIGNED_INT, sizeof(__pyx_k_SIGNED_INT), 0, 0, 1, 1},
  {&__pyx_n_s_SIGNED_LONG, __pyx_k_SIGNED_LONG, sizeof(__pyx_k_SIGNED_LONG), 0, 0, 1, 1},
  {&__pyx_n_s_SIGNED_LONG_LONG, __pyx_k_SIGNED_LONG_LONG, sizeof(__pyx_k_SIGNED_LONG_LONG), 0, 0, 1, 1},
  {&__pyx_n_s_SIGNED_SHORT, __pyx_k_SIGNED_SHORT, sizeof(__pyx_k_SIGNED_SHORT), 0, 0, 1, 1},
  {&__pyx_n_s_SIMILAR, __pyx_k_SIMILAR, sizeof(__pyx_k_SIMILAR), 0, 0, 1, 1},
  {&__pyx_n_s_SINT16_T, __pyx_k_SINT16_T, sizeof(__pyx_k_SINT16_T), 0, 0, 1, 1},
  {&__pyx_n_s_SINT32_T, __pyx_k_SINT32_T, sizeof(__pyx_k_SINT32_T), 0, 0, 1, 1},
  {&__pyx_n_s_SINT64_T, __pyx_k_SINT64_T, sizeof(__pyx_k_SINT64_T), 0, 0, 1, 1},
  {&__pyx_n_s_SINT8_T, __pyx_k_SINT8_T, sizeof(__pyx_k_SINT8_T), 0, 0, 1, 1},
  {&__pyx_n_s_STRUCT, __pyx_k_STRUCT, sizeof(__pyx_k_STRUCT), 0, 0, 1, 1},
  {&__pyx_n_s_SUBARRAY, __pyx_k_SUBARRAY, sizeof(__pyx_k_SUBARRAY), 0, 0, 1, 1},
  {&__pyx_n_s_SUBVERSION, __pyx_k_SUBVERSION, sizeof(__pyx_k_SUBVERSION), 0, 0, 1, 1},
  {&__pyx_n_s_SUCCESS, __pyx_k_SUCCESS, sizeof(__pyx_k_SUCCESS), 0, 0, 1, 1},
  {&__pyx_n_s_SUM, __pyx_k_SUM, sizeof(__pyx_k_SUM), 0, 0, 1, 1},
  {&__pyx_n_s_Set, __pyx_k_Set, sizeof(__pyx_k_Set), 0, 0, 1, 1},
  {&__pyx_n_s_Set_atomicity, __pyx_k_Set_atomicity, sizeof(__pyx_k_Set_atomicity), 0, 0, 1, 1},
  {&__pyx_n_s_Set_cancelled, __pyx_k_Set_cancelled, sizeof(__pyx_k_Set_cancelled), 0, 0, 1, 1},
  {&__pyx_n_s_Set_error, __pyx_k_Set_error, sizeof(__pyx_k_Set_error), 0, 0, 1, 1},
  {&__pyx_n_s_Set_info, __pyx_k_Set_info, sizeof(__pyx_k_Set_info), 0, 0, 1, 1},
  {&__pyx_n_s_Set_name, __pyx_k_Set_name, sizeof(__pyx_k_Set_name), 0, 0, 1, 1},
  {&__pyx_n_s_Set_source, __pyx_k_Set_source, sizeof(__pyx_k_Set_source), 0, 0, 1, 1},
  {&__pyx_n_s_Set_tag, __pyx_k_Set_tag, sizeof(__pyx_k_Set_tag), 0, 0, 1, 1},
  {&__pyx_n_s_Shift, __pyx_k_Shift, sizeof(__pyx_k_Shift), 0, 0, 1, 1},
  {&__pyx_n_s_Start, __pyx_k_Start, sizeof(__pyx_k_Start), 0, 0, 1, 1},
  {&__pyx_n_s_Startall, __pyx_k_Startall, sizeof(__pyx_k_Startall), 0, 0, 1, 1},
  {&__pyx_n_s_Status, __pyx_k_Status, sizeof(__pyx_k_Status), 0, 0, 1, 1},
  {&__pyx_n_s_StringIO, __pyx_k_StringIO, sizeof(__pyx_k_StringIO), 0, 0, 1, 1},
  {&__pyx_n_s_SystemError, __pyx_k_SystemError, sizeof(__pyx_k_SystemError), 0, 0, 1, 1},
  {&__pyx_n_s_TAG_UB, __pyx_k_TAG_UB, sizeof(__pyx_k_TAG_UB), 0, 0, 1, 1},
  {&__pyx_n_s_THREAD_FUNNELED, __pyx_k_THREAD_FUNNELED, sizeof(__pyx_k_THREAD_FUNNELED), 0, 0, 1, 1},
  {&__pyx_n_s_THREAD_MULTIPLE, __pyx_k_THREAD_MULTIPLE, sizeof(__pyx_k_THREAD_MULTIPLE), 0, 0, 1, 1},
  {&__pyx_n_s_THREAD_SERIALIZED, __pyx_k_THREAD_SERIALIZED, sizeof(__pyx_k_THREAD_SERIALIZED), 0, 0, 1, 1},
  {&__pyx_n_s_THREAD_SINGLE, __pyx_k_THREAD_SINGLE, sizeof(__pyx_k_THREAD_SINGLE), 0, 0, 1, 1},
  {&__pyx_n_s_TWOINT, __pyx_k_TWOINT, sizeof(__pyx_k_TWOINT), 0, 0, 1, 1},
  {&__pyx_n_s_TYPECLASS_COMPLEX, __pyx_k_TYPECLASS_COMPLEX, sizeof(__pyx_k_TYPECLASS_COMPLEX), 0, 0, 1, 1},
  {&__pyx_n_s_TYPECLASS_INTEGER, __pyx_k_TYPECLASS_INTEGER, sizeof(__pyx_k_TYPECLASS_INTEGER), 0, 0, 1, 1},
  {&__pyx_n_s_TYPECLASS_REAL, __pyx_k_TYPECLASS_REAL, sizeof(__pyx_k_TYPECLASS_REAL), 0, 0, 1, 1},
  {&__pyx_n_s_Testall, __pyx_k_Testall, sizeof(__pyx_k_Testall), 0, 0, 1, 1},
  {&__pyx_n_s_Testany, __pyx_k_Testany, sizeof(__pyx_k_Testany), 0, 0, 1, 1},
  {&__pyx_n_s_Testsome, __pyx_k_Testsome, sizeof(__pyx_k_Testsome), 0, 0, 1, 1},
  {&__pyx_n_s_Topocomm, __pyx_k_Topocomm, sizeof(__pyx_k_Topocomm), 0, 0, 1, 1},
  {&__pyx_n_s_Translate_ranks, __pyx_k_Translate_ranks, sizeof(__pyx_k_Translate_ranks), 0, 0, 1, 1},
  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
  {&__pyx_n_s_UB, __pyx_k_UB, sizeof(__pyx_k_UB), 0, 0, 1, 1},
  {&__pyx_n_s_UINT16_T, __pyx_k_UINT16_T, sizeof(__pyx_k_UINT16_T), 0, 0, 1, 1},
  {&__pyx_n_s_UINT32_T, __pyx_k_UINT32_T, sizeof(__pyx_k_UINT32_T), 0, 0, 1, 1},
  {&__pyx_n_s_UINT64_T, __pyx_k_UINT64_T, sizeof(__pyx_k_UINT64_T), 0, 0, 1, 1},
  {&__pyx_n_s_UINT8_T, __pyx_k_UINT8_T, sizeof(__pyx_k_UINT8_T), 0, 0, 1, 1},
  {&__pyx_n_s_UNDEFINED, __pyx_k_UNDEFINED, sizeof(__pyx_k_UNDEFINED), 0, 0, 1, 1},
  {&__pyx_n_s_UNEQUAL, __pyx_k_UNEQUAL, sizeof(__pyx_k_UNEQUAL), 0, 0, 1, 1},
  {&__pyx_n_s_UNIVERSE_SIZE, __pyx_k_UNIVERSE_SIZE, sizeof(__pyx_k_UNIVERSE_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_UNSIGNED, __pyx_k_UNSIGNED, sizeof(__pyx_k_UNSIGNED), 0, 0, 1, 1},
  {&__pyx_n_s_UNSIGNED_CHAR, __pyx_k_UNSIGNED_CHAR, sizeof(__pyx_k_UNSIGNED_CHAR), 0, 0, 1, 1},
  {&__pyx_n_s_UNSIGNED_INT, __pyx_k_UNSIGNED_INT, sizeof(__pyx_k_UNSIGNED_INT), 0, 0, 1, 1},
  {&__pyx_n_s_UNSIGNED_LONG, __pyx_k_UNSIGNED_LONG, sizeof(__pyx_k_UNSIGNED_LONG), 0, 0, 1, 1},
  {&__pyx_n_s_UNSIGNED_LONG_LONG, __pyx_k_UNSIGNED_LONG_LONG, sizeof(__pyx_k_UNSIGNED_LONG_LONG), 0, 0, 1, 1},
  {&__pyx_n_s_UNSIGNED_SHORT, __pyx_k_UNSIGNED_SHORT, sizeof(__pyx_k_UNSIGNED_SHORT), 0, 0, 1, 1},
  {&__pyx_n_s_UNWEIGHTED, __pyx_k_UNWEIGHTED, sizeof(__pyx_k_UNWEIGHTED), 0, 0, 1, 1},
  {&__pyx_n_s_Union, __pyx_k_Union, sizeof(__pyx_k_Union), 0, 0, 1, 1},
  {&__pyx_n_s_Unpublish_name, __pyx_k_Unpublish_name, sizeof(__pyx_k_Unpublish_name), 0, 0, 1, 1},
  {&__pyx_n_s_UserWarning, __pyx_k_UserWarning, sizeof(__pyx_k_UserWarning), 0, 0, 1, 1},
  {&__pyx_n_s_VECTOR, __pyx_k_VECTOR, sizeof(__pyx_k_VECTOR), 0, 0, 1, 1},
  {&__pyx_n_s_VERSION, __pyx_k_VERSION, sizeof(__pyx_k_VERSION), 0, 0, 1, 1},
  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
  {&__pyx_n_s_WCHAR, __pyx_k_WCHAR, sizeof(__pyx_k_WCHAR), 0, 0, 1, 1},
  {&__pyx_n_s_WEIGHTS_EMPTY, __pyx_k_WEIGHTS_EMPTY, sizeof(__pyx_k_WEIGHTS_EMPTY), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_BASE, __pyx_k_WIN_BASE, sizeof(__pyx_k_WIN_BASE), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_CREATE_FLAVOR, __pyx_k_WIN_CREATE_FLAVOR, sizeof(__pyx_k_WIN_CREATE_FLAVOR), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_DISP_UNIT, __pyx_k_WIN_DISP_UNIT, sizeof(__pyx_k_WIN_DISP_UNIT), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_FLAVOR, __pyx_k_WIN_FLAVOR, sizeof(__pyx_k_WIN_FLAVOR), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_FLAVOR_ALLOCATE, __pyx_k_WIN_FLAVOR_ALLOCATE, sizeof(__pyx_k_WIN_FLAVOR_ALLOCATE), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_FLAVOR_CREATE, __pyx_k_WIN_FLAVOR_CREATE, sizeof(__pyx_k_WIN_FLAVOR_CREATE), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_FLAVOR_DYNAMIC, __pyx_k_WIN_FLAVOR_DYNAMIC, sizeof(__pyx_k_WIN_FLAVOR_DYNAMIC), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_FLAVOR_SHARED, __pyx_k_WIN_FLAVOR_SHARED, sizeof(__pyx_k_WIN_FLAVOR_SHARED), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_MODEL, __pyx_k_WIN_MODEL, sizeof(__pyx_k_WIN_MODEL), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_NULL, __pyx_k_WIN_NULL, sizeof(__pyx_k_WIN_NULL), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_SEPARATE, __pyx_k_WIN_SEPARATE, sizeof(__pyx_k_WIN_SEPARATE), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_SIZE, __pyx_k_WIN_SIZE, sizeof(__pyx_k_WIN_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_WIN_UNIFIED, __pyx_k_WIN_UNIFIED, sizeof(__pyx_k_WIN_UNIFIED), 0, 0, 1, 1},
  {&__pyx_n_s_WTIME_IS_GLOBAL, __pyx_k_WTIME_IS_GLOBAL, sizeof(__pyx_k_WTIME_IS_GLOBAL), 0, 0, 1, 1},
  {&__pyx_n_s_Waitall, __pyx_k_Waitall, sizeof(__pyx_k_Waitall), 0, 0, 1, 1},
  {&__pyx_n_s_Waitany, __pyx_k_Waitany, sizeof(__pyx_k_Waitany), 0, 0, 1, 1},
  {&__pyx_n_s_Waitsome, __pyx_k_Waitsome, sizeof(__pyx_k_Waitsome), 0, 0, 1, 1},
  {&__pyx_n_s_Win, __pyx_k_Win, sizeof(__pyx_k_Win), 0, 0, 1, 1},
  {&__pyx_n_s_Wtick, __pyx_k_Wtick, sizeof(__pyx_k_Wtick), 0, 0, 1, 1},
  {&__pyx_n_s_Wtime, __pyx_k_Wtime, sizeof(__pyx_k_Wtime), 0, 0, 1, 1},
  {&__pyx_kp_b__23, __pyx_k__23, sizeof(__pyx_k__23), 0, 0, 0, 0},
  {&__pyx_kp_s_accessing_non_existent_buffer_se, __pyx_k_accessing_non_existent_buffer_se, sizeof(__pyx_k_accessing_non_existent_buffer_se), 0, 0, 1, 0},
  {&__pyx_n_s_addr1, __pyx_k_addr1, sizeof(__pyx_k_addr1), 0, 0, 1, 1},
  {&__pyx_n_s_addr2, __pyx_k_addr2, sizeof(__pyx_k_addr2), 0, 0, 1, 1},
  {&__pyx_n_s_address, __pyx_k_address, sizeof(__pyx_k_address), 0, 0, 1, 1},
  {&__pyx_n_s_addressof, __pyx_k_addressof, sizeof(__pyx_k_addressof), 0, 0, 1, 1},
  {&__pyx_n_s_allgather, __pyx_k_allgather, sizeof(__pyx_k_allgather), 0, 0, 1, 1},
  {&__pyx_n_s_allocate_lock, __pyx_k_allocate_lock, sizeof(__pyx_k_allocate_lock), 0, 0, 1, 1},
  {&__pyx_n_s_alltoall, __pyx_k_alltoall, sizeof(__pyx_k_alltoall), 0, 0, 1, 1},
  {&__pyx_n_s_amode, __pyx_k_amode, sizeof(__pyx_k_amode), 0, 0, 1, 1},
  {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1},
  {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1},
  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
  {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1},
  {&__pyx_n_s_array_interface, __pyx_k_array_interface, sizeof(__pyx_k_array_interface), 0, 0, 1, 1},
  {&__pyx_n_s_assertion, __pyx_k_assertion, sizeof(__pyx_k_assertion), 0, 0, 1, 1},
  {&__pyx_n_s_attrval, __pyx_k_attrval, sizeof(__pyx_k_attrval), 0, 0, 1, 1},
  {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
  {&__pyx_n_s_baseptr, __pyx_k_baseptr, sizeof(__pyx_k_baseptr), 0, 0, 1, 1},
  {&__pyx_n_s_bcast, __pyx_k_bcast, sizeof(__pyx_k_bcast), 0, 0, 1, 1},
  {&__pyx_kp_s_bcast_p2p, __pyx_k_bcast_p2p, sizeof(__pyx_k_bcast_p2p), 0, 0, 1, 0},
  {&__pyx_n_s_blocklength, __pyx_k_blocklength, sizeof(__pyx_k_blocklength), 0, 0, 1, 1},
  {&__pyx_n_s_blocklengths, __pyx_k_blocklengths, sizeof(__pyx_k_blocklengths), 0, 0, 1, 1},
  {&__pyx_n_s_bool, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
  {&__pyx_n_s_buf, __pyx_k_buf, sizeof(__pyx_k_buf), 0, 0, 1, 1},
  {&__pyx_n_s_buffer_info, __pyx_k_buffer_info, sizeof(__pyx_k_buffer_info), 0, 0, 1, 1},
  {&__pyx_n_s_cPickle, __pyx_k_cPickle, sizeof(__pyx_k_cPickle), 0, 0, 1, 1},
  {&__pyx_n_s_cStringIO, __pyx_k_cStringIO, sizeof(__pyx_k_cStringIO), 0, 0, 1, 1},
  {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1},
  {&__pyx_n_s_cancel_fn, __pyx_k_cancel_fn, sizeof(__pyx_k_cancel_fn), 0, 0, 1, 1},
  {&__pyx_kp_s_cannot_create_too_many_user_defi, __pyx_k_cannot_create_too_many_user_defi, sizeof(__pyx_k_cannot_create_too_many_user_defi), 0, 0, 1, 0},
  {&__pyx_n_s_cdatarep, __pyx_k_cdatarep, sizeof(__pyx_k_cdatarep), 0, 0, 1, 1},
  {&__pyx_n_s_char, __pyx_k_char, sizeof(__pyx_k_char), 0, 0, 1, 1},
  {&__pyx_n_s_cinfo, __pyx_k_cinfo, sizeof(__pyx_k_cinfo), 0, 0, 1, 1},
  {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
  {&__pyx_n_s_color, __pyx_k_color, sizeof(__pyx_k_color), 0, 0, 1, 1},
  {&__pyx_n_s_comm, __pyx_k_comm, sizeof(__pyx_k_comm), 0, 0, 1, 1},
  {&__pyx_n_s_comm1, __pyx_k_comm1, sizeof(__pyx_k_comm1), 0, 0, 1, 1},
  {&__pyx_n_s_comm2, __pyx_k_comm2, sizeof(__pyx_k_comm2), 0, 0, 1, 1},
  {&__pyx_n_s_command, __pyx_k_command, sizeof(__pyx_k_command), 0, 0, 1, 1},
  {&__pyx_kp_s_commctx_inter, __pyx_k_commctx_inter, sizeof(__pyx_k_commctx_inter), 0, 0, 1, 0},
  {&__pyx_kp_s_commctx_intra, __pyx_k_commctx_intra, sizeof(__pyx_k_commctx_intra), 0, 0, 1, 0},
  {&__pyx_n_s_commute, __pyx_k_commute, sizeof(__pyx_k_commute), 0, 0, 1, 1},
  {&__pyx_n_s_compare, __pyx_k_compare, sizeof(__pyx_k_compare), 0, 0, 1, 1},
  {&__pyx_kp_s_compare_expecting_a_single_eleme, __pyx_k_compare_expecting_a_single_eleme, sizeof(__pyx_k_compare_expecting_a_single_eleme), 0, 0, 1, 0},
  {&__pyx_n_s_coords, __pyx_k_coords, sizeof(__pyx_k_coords), 0, 0, 1, 1},
  {&__pyx_n_s_copy_fn, __pyx_k_copy_fn, sizeof(__pyx_k_copy_fn), 0, 0, 1, 1},
  {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
  {&__pyx_n_s_cportname, __pyx_k_cportname, sizeof(__pyx_k_cportname), 0, 0, 1, 1},
  {&__pyx_n_s_csrvcname, __pyx_k_csrvcname, sizeof(__pyx_k_csrvcname), 0, 0, 1, 1},
  {&__pyx_n_s_cstring, __pyx_k_cstring, sizeof(__pyx_k_cstring), 0, 0, 1, 1},
  {&__pyx_n_s_dargs, __pyx_k_dargs, sizeof(__pyx_k_dargs), 0, 0, 1, 1},
  {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1},
  {&__pyx_n_s_datarep, __pyx_k_datarep, sizeof(__pyx_k_datarep), 0, 0, 1, 1},
  {&__pyx_n_s_datatype, __pyx_k_datatype, sizeof(__pyx_k_datatype), 0, 0, 1, 1},
  {&__pyx_n_s_datatypes, __pyx_k_datatypes, sizeof(__pyx_k_datatypes), 0, 0, 1, 1},
  {&__pyx_n_s_default, __pyx_k_default, sizeof(__pyx_k_default), 0, 0, 1, 1},
  {&__pyx_n_s_degrees, __pyx_k_degrees, sizeof(__pyx_k_degrees), 0, 0, 1, 1},
  {&__pyx_n_s_delete_fn, __pyx_k_delete_fn, sizeof(__pyx_k_delete_fn), 0, 0, 1, 1},
  {&__pyx_n_s_dest, __pyx_k_dest, sizeof(__pyx_k_dest), 0, 0, 1, 1},
  {&__pyx_n_s_destinations, __pyx_k_destinations, sizeof(__pyx_k_destinations), 0, 0, 1, 1},
  {&__pyx_n_s_destweights, __pyx_k_destweights, sizeof(__pyx_k_destweights), 0, 0, 1, 1},
  {&__pyx_n_s_dims, __pyx_k_dims, sizeof(__pyx_k_dims), 0, 0, 1, 1},
  {&__pyx_n_s_direction, __pyx_k_direction, sizeof(__pyx_k_direction), 0, 0, 1, 1},
  {&__pyx_n_s_disp, __pyx_k_disp, sizeof(__pyx_k_disp), 0, 0, 1, 1},
  {&__pyx_n_s_disp_unit, __pyx_k_disp_unit, sizeof(__pyx_k_disp_unit), 0, 0, 1, 1},
  {&__pyx_n_s_displacements, __pyx_k_displacements, sizeof(__pyx_k_displacements), 0, 0, 1, 1},
  {&__pyx_n_s_distribs, __pyx_k_distribs, sizeof(__pyx_k_distribs), 0, 0, 1, 1},
  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
  {&__pyx_n_s_doc_2, __pyx_k_doc_2, sizeof(__pyx_k_doc_2), 0, 0, 1, 1},
  {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1},
  {&__pyx_n_s_dummy_thread, __pyx_k_dummy_thread, sizeof(__pyx_k_dummy_thread), 0, 0, 1, 1},
  {&__pyx_n_s_dummy_thread_2, __pyx_k_dummy_thread_2, sizeof(__pyx_k_dummy_thread_2), 0, 0, 1, 1},
  {&__pyx_n_s_dumps, __pyx_k_dumps, sizeof(__pyx_k_dumps), 0, 0, 1, 1},
  {&__pyx_n_s_edges, __pyx_k_edges, sizeof(__pyx_k_edges), 0, 0, 1, 1},
  {&__pyx_kp_s_empty_weights_but_nonzero_degree, __pyx_k_empty_weights_but_nonzero_degree, sizeof(__pyx_k_empty_weights_but_nonzero_degree), 0, 0, 1, 0},
  {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1},
  {&__pyx_n_s_eq, __pyx_k_eq, sizeof(__pyx_k_eq), 0, 0, 1, 1},
  {&__pyx_n_s_errcodes, __pyx_k_errcodes, sizeof(__pyx_k_errcodes), 0, 0, 1, 1},
  {&__pyx_n_s_errhandler, __pyx_k_errhandler, sizeof(__pyx_k_errhandler), 0, 0, 1, 1},
  {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
  {&__pyx_kp_s_error_class, __pyx_k_error_class, sizeof(__pyx_k_error_class), 0, 0, 1, 0},
  {&__pyx_n_s_error_class_2, __pyx_k_error_class_2, sizeof(__pyx_k_error_class_2), 0, 0, 1, 1},
  {&__pyx_kp_s_error_code, __pyx_k_error_code, sizeof(__pyx_k_error_code), 0, 0, 1, 0},
  {&__pyx_n_s_error_code_2, __pyx_k_error_code_2, sizeof(__pyx_k_error_code_2), 0, 0, 1, 1},
  {&__pyx_kp_s_error_code_d, __pyx_k_error_code_d, sizeof(__pyx_k_error_code_d), 0, 0, 1, 0},
  {&__pyx_kp_s_error_string, __pyx_k_error_string, sizeof(__pyx_k_error_string), 0, 0, 1, 0},
  {&__pyx_n_s_error_string_2, __pyx_k_error_string_2, sizeof(__pyx_k_error_string_2), 0, 0, 1, 1},
  {&__pyx_n_s_errorclass, __pyx_k_errorclass, sizeof(__pyx_k_errorclass), 0, 0, 1, 1},
  {&__pyx_n_s_errorcode, __pyx_k_errorcode, sizeof(__pyx_k_errorcode), 0, 0, 1, 1},
  {&__pyx_n_s_errors, __pyx_k_errors, sizeof(__pyx_k_errors), 0, 0, 1, 1},
  {&__pyx_n_s_etype, __pyx_k_etype, sizeof(__pyx_k_etype), 0, 0, 1, 1},
  {&__pyx_n_s_ex, __pyx_k_ex, sizeof(__pyx_k_ex), 0, 0, 1, 1},
  {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1},
  {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1},
  {&__pyx_kp_s_expecting_a_Cartesian_communicat, __pyx_k_expecting_a_Cartesian_communicat, sizeof(__pyx_k_expecting_a_Cartesian_communicat), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_a_distributed_graph_co, __pyx_k_expecting_a_distributed_graph_co, sizeof(__pyx_k_expecting_a_distributed_graph_co), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_a_general_graph_commun, __pyx_k_expecting_a_general_graph_commun, sizeof(__pyx_k_expecting_a_general_graph_commun), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_a_sequence_of_strings, __pyx_k_expecting_a_sequence_of_strings, sizeof(__pyx_k_expecting_a_sequence_of_strings), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_a_topology_communicato, __pyx_k_expecting_a_topology_communicato, sizeof(__pyx_k_expecting_a_topology_communicato), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_an_MPI_instance, __pyx_k_expecting_an_MPI_instance, sizeof(__pyx_k_expecting_an_MPI_instance), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_an_MPI_type_or_instanc, __pyx_k_expecting_an_MPI_type_or_instanc, sizeof(__pyx_k_expecting_an_MPI_type_or_instanc), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_an_intercommunicator, __pyx_k_expecting_an_intercommunicator, sizeof(__pyx_k_expecting_an_intercommunicator), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_an_intracommunicator, __pyx_k_expecting_an_intracommunicator, sizeof(__pyx_k_expecting_an_intracommunicator), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_d_items_got_d, __pyx_k_expecting_d_items_got_d, sizeof(__pyx_k_expecting_d_items_got_d), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_non_NULL_address, __pyx_k_expecting_non_NULL_address, sizeof(__pyx_k_expecting_non_NULL_address), 0, 0, 1, 0},
  {&__pyx_kp_s_expecting_non_negative_buffer_le, __pyx_k_expecting_non_negative_buffer_le, sizeof(__pyx_k_expecting_non_negative_buffer_le), 0, 0, 1, 0},
  {&__pyx_n_s_extent, __pyx_k_extent, sizeof(__pyx_k_extent), 0, 0, 1, 1},
  {&__pyx_n_s_extent_fn, __pyx_k_extent_fn, sizeof(__pyx_k_extent_fn), 0, 0, 1, 1},
  {&__pyx_n_s_f2py, __pyx_k_f2py, sizeof(__pyx_k_f2py), 0, 0, 1, 1},
  {&__pyx_n_s_fast_reduce, __pyx_k_fast_reduce, sizeof(__pyx_k_fast_reduce), 0, 0, 1, 1},
  {&__pyx_n_s_fatal, __pyx_k_fatal, sizeof(__pyx_k_fatal), 0, 0, 1, 1},
  {&__pyx_n_s_fd, __pyx_k_fd, sizeof(__pyx_k_fd), 0, 0, 1, 1},
  {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1},
  {&__pyx_n_s_filename, __pyx_k_filename, sizeof(__pyx_k_filename), 0, 0, 1, 1},
  {&__pyx_n_s_filetype, __pyx_k_filetype, sizeof(__pyx_k_filetype), 0, 0, 1, 1},
  {&__pyx_n_s_finalize, __pyx_k_finalize, sizeof(__pyx_k_finalize), 0, 0, 1, 1},
  {&__pyx_n_s_flag, __pyx_k_flag, sizeof(__pyx_k_flag), 0, 0, 1, 1},
  {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1},
  {&__pyx_n_s_flush, __pyx_k_flush, sizeof(__pyx_k_flush), 0, 0, 1, 1},
  {&__pyx_n_s_free_fn, __pyx_k_free_fn, sizeof(__pyx_k_free_fn), 0, 0, 1, 1},
  {&__pyx_n_s_fromaddress, __pyx_k_fromaddress, sizeof(__pyx_k_fromaddress), 0, 0, 1, 1},
  {&__pyx_n_s_frombuffer, __pyx_k_frombuffer, sizeof(__pyx_k_frombuffer), 0, 0, 1, 1},
  {&__pyx_n_s_function, __pyx_k_function, sizeof(__pyx_k_function), 0, 0, 1, 1},
  {&__pyx_n_s_funneled, __pyx_k_funneled, sizeof(__pyx_k_funneled), 0, 0, 1, 1},
  {&__pyx_n_s_gather, __pyx_k_gather, sizeof(__pyx_k_gather), 0, 0, 1, 1},
  {&__pyx_n_s_ge, __pyx_k_ge, sizeof(__pyx_k_ge), 0, 0, 1, 1},
  {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
  {&__pyx_n_s_get_vendor, __pyx_k_get_vendor, sizeof(__pyx_k_get_vendor), 0, 0, 1, 1},
  {&__pyx_n_s_group, __pyx_k_group, sizeof(__pyx_k_group), 0, 0, 1, 1},
  {&__pyx_n_s_group1, __pyx_k_group1, sizeof(__pyx_k_group1), 0, 0, 1, 1},
  {&__pyx_n_s_group2, __pyx_k_group2, sizeof(__pyx_k_group2), 0, 0, 1, 1},
  {&__pyx_n_s_gsizes, __pyx_k_gsizes, sizeof(__pyx_k_gsizes), 0, 0, 1, 1},
  {&__pyx_n_s_gt, __pyx_k_gt, sizeof(__pyx_k_gt), 0, 0, 1, 1},
  {&__pyx_n_s_handleof, __pyx_k_handleof, sizeof(__pyx_k_handleof), 0, 0, 1, 1},
  {&__pyx_n_s_hash, __pyx_k_hash, sizeof(__pyx_k_hash), 0, 0, 1, 1},
  {&__pyx_n_s_high, __pyx_k_high, sizeof(__pyx_k_high), 0, 0, 1, 1},
  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
  {&__pyx_n_s_idims, __pyx_k_idims, sizeof(__pyx_k_idims), 0, 0, 1, 1},
  {&__pyx_n_s_ierr, __pyx_k_ierr, sizeof(__pyx_k_ierr), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_inbuf, __pyx_k_inbuf, sizeof(__pyx_k_inbuf), 0, 0, 1, 1},
  {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1},
  {&__pyx_kp_s_index_must_be_integer_or_slice, __pyx_k_index_must_be_integer_or_slice, sizeof(__pyx_k_index_must_be_integer_or_slice), 0, 0, 1, 0},
  {&__pyx_kp_s_index_out_of_range, __pyx_k_index_out_of_range, sizeof(__pyx_k_index_out_of_range), 0, 0, 1, 0},
  {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1},
  {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
  {&__pyx_n_s_initialize, __pyx_k_initialize, sizeof(__pyx_k_initialize), 0, 0, 1, 1},
  {&__pyx_n_s_inoutbuf, __pyx_k_inoutbuf, sizeof(__pyx_k_inoutbuf), 0, 0, 1, 1},
  {&__pyx_n_s_inoutedges, __pyx_k_inoutedges, sizeof(__pyx_k_inoutedges), 0, 0, 1, 1},
  {&__pyx_n_s_insert, __pyx_k_insert, sizeof(__pyx_k_insert), 0, 0, 1, 1},
  {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1},
  {&__pyx_kp_s_integer_d_does_not_fit_in_int, __pyx_k_integer_d_does_not_fit_in_int, sizeof(__pyx_k_integer_d_does_not_fit_in_int), 0, 0, 1, 0},
  {&__pyx_n_s_io, __pyx_k_io, sizeof(__pyx_k_io), 0, 0, 1, 1},
  {&__pyx_n_s_iprobe, __pyx_k_iprobe, sizeof(__pyx_k_iprobe), 0, 0, 1, 1},
  {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1},
  {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
  {&__pyx_n_s_kargs, __pyx_k_kargs, sizeof(__pyx_k_kargs), 0, 0, 1, 1},
  {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1},
  {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1},
  {&__pyx_n_s_keyval, __pyx_k_keyval, sizeof(__pyx_k_keyval), 0, 0, 1, 1},
  {&__pyx_n_s_keyval_registry, __pyx_k_keyval_registry, sizeof(__pyx_k_keyval_registry), 0, 0, 1, 1},
  {&__pyx_n_s_lb, __pyx_k_lb, sizeof(__pyx_k_lb), 0, 0, 1, 1},
  {&__pyx_n_s_le, __pyx_k_le, sizeof(__pyx_k_le), 0, 0, 1, 1},
  {&__pyx_n_s_level, __pyx_k_level, sizeof(__pyx_k_level), 0, 0, 1, 1},
  {&__pyx_n_s_load, __pyx_k_load, sizeof(__pyx_k_load), 0, 0, 1, 1},
  {&__pyx_n_s_loads, __pyx_k_loads, sizeof(__pyx_k_loads), 0, 0, 1, 1},
  {&__pyx_n_s_local_leader, __pyx_k_local_leader, sizeof(__pyx_k_local_leader), 0, 0, 1, 1},
  {&__pyx_n_s_location, __pyx_k_location, sizeof(__pyx_k_location), 0, 0, 1, 1},
  {&__pyx_n_s_lock_table, __pyx_k_lock_table, sizeof(__pyx_k_lock_table), 0, 0, 1, 1},
  {&__pyx_n_s_lock_type, __pyx_k_lock_type, sizeof(__pyx_k_lock_type), 0, 0, 1, 1},
  {&__pyx_n_s_lt, __pyx_k_lt, sizeof(__pyx_k_lt), 0, 0, 1, 1},
  {&__pyx_n_s_m, __pyx_k_m, sizeof(__pyx_k_m), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1},
  {&__pyx_n_s_maxlen, __pyx_k_maxlen, sizeof(__pyx_k_maxlen), 0, 0, 1, 1},
  {&__pyx_n_s_maxprocs, __pyx_k_maxprocs, sizeof(__pyx_k_maxprocs), 0, 0, 1, 1},
  {&__pyx_n_s_mem, __pyx_k_mem, sizeof(__pyx_k_mem), 0, 0, 1, 1},
  {&__pyx_n_s_memory, __pyx_k_memory, sizeof(__pyx_k_memory), 0, 0, 1, 1},
  {&__pyx_kp_s_memory_allocation_size_too_large, __pyx_k_memory_allocation_size_too_large, sizeof(__pyx_k_memory_allocation_size_too_large), 0, 0, 1, 0},
  {&__pyx_kp_s_memory_allocation_with_negative, __pyx_k_memory_allocation_with_negative, sizeof(__pyx_k_memory_allocation_with_negative), 0, 0, 1, 0},
  {&__pyx_kp_s_memory_buffer_is_read_only, __pyx_k_memory_buffer_is_read_only, sizeof(__pyx_k_memory_buffer_is_read_only), 0, 0, 1, 0},
  {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1},
  {&__pyx_kp_s_message_buffer_is_None_but_count, __pyx_k_message_buffer_is_None_but_count, sizeof(__pyx_k_message_buffer_is_None_but_count), 0, 0, 1, 0},
  {&__pyx_kp_s_message_cannot_handle_diplacemen, __pyx_k_message_cannot_handle_diplacemen, sizeof(__pyx_k_message_cannot_handle_diplacemen), 0, 0, 1, 0},
  {&__pyx_kp_s_message_cannot_handle_diplacemen_2, __pyx_k_message_cannot_handle_diplacemen_2, sizeof(__pyx_k_message_cannot_handle_diplacemen_2), 0, 0, 1, 0},
  {&__pyx_kp_s_message_cannot_infer_count_buffe, __pyx_k_message_cannot_infer_count_buffe, sizeof(__pyx_k_message_cannot_infer_count_buffe), 0, 0, 1, 0},
  {&__pyx_kp_s_message_cannot_infer_count_datat, __pyx_k_message_cannot_infer_count_datat, sizeof(__pyx_k_message_cannot_infer_count_datat), 0, 0, 1, 0},
  {&__pyx_kp_s_message_cannot_infer_count_datat_2, __pyx_k_message_cannot_infer_count_datat_2, sizeof(__pyx_k_message_cannot_infer_count_datat_2), 0, 0, 1, 0},
  {&__pyx_kp_s_message_cannot_infer_count_numbe, __pyx_k_message_cannot_infer_count_numbe, sizeof(__pyx_k_message_cannot_infer_count_numbe), 0, 0, 1, 0},
  {&__pyx_kp_s_message_displacement_d_out_of_bo, __pyx_k_message_displacement_d_out_of_bo, sizeof(__pyx_k_message_displacement_d_out_of_bo), 0, 0, 1, 0},
  {&__pyx_kp_s_message_expecting_2_to_4_items, __pyx_k_message_expecting_2_to_4_items, sizeof(__pyx_k_message_expecting_2_to_4_items), 0, 0, 1, 0},
  {&__pyx_kp_s_message_expecting_buffer_or_list, __pyx_k_message_expecting_buffer_or_list, sizeof(__pyx_k_message_expecting_buffer_or_list), 0, 0, 1, 0},
  {&__pyx_kp_s_message_negative_count_d, __pyx_k_message_negative_count_d, sizeof(__pyx_k_message_negative_count_d), 0, 0, 1, 0},
  {&__pyx_kp_s_message_negative_diplacement_d, __pyx_k_message_negative_diplacement_d, sizeof(__pyx_k_message_negative_diplacement_d), 0, 0, 1, 0},
  {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
  {&__pyx_n_s_micro, __pyx_k_micro, sizeof(__pyx_k_micro), 0, 0, 1, 1},
  {&__pyx_n_s_minor, __pyx_k_minor, sizeof(__pyx_k_minor), 0, 0, 1, 1},
  {&__pyx_kp_s_mismatch_in_inbuf_and_inoutbuf_M, __pyx_k_mismatch_in_inbuf_and_inoutbuf_M, sizeof(__pyx_k_mismatch_in_inbuf_and_inoutbuf_M), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_inbuf_count_d_and_in, __pyx_k_mismatch_in_inbuf_count_d_and_in, sizeof(__pyx_k_mismatch_in_inbuf_count_d_and_in), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_origin_and_compare_M, __pyx_k_mismatch_in_origin_and_compare_M, sizeof(__pyx_k_mismatch_in_origin_and_compare_M), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_origin_and_result_MP, __pyx_k_mismatch_in_origin_and_result_MP, sizeof(__pyx_k_mismatch_in_origin_and_result_MP), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_receive_count_d_and, __pyx_k_mismatch_in_receive_count_d_and, sizeof(__pyx_k_mismatch_in_receive_count_d_and), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_receive_count_d_and_2, __pyx_k_mismatch_in_receive_count_d_and_2, sizeof(__pyx_k_mismatch_in_receive_count_d_and_2), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_send_and_receive_MPI, __pyx_k_mismatch_in_send_and_receive_MPI, sizeof(__pyx_k_mismatch_in_send_and_receive_MPI), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_send_count_d_and_rec, __pyx_k_mismatch_in_send_count_d_and_rec, sizeof(__pyx_k_mismatch_in_send_count_d_and_rec), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_send_count_d_and_sum, __pyx_k_mismatch_in_send_count_d_and_sum, sizeof(__pyx_k_mismatch_in_send_count_d_and_sum), 0, 0, 1, 0},
  {&__pyx_kp_s_mismatch_in_send_count_d_receive, __pyx_k_mismatch_in_send_count_d_receive, sizeof(__pyx_k_mismatch_in_send_count_d_receive), 0, 0, 1, 0},
  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
  {&__pyx_n_s_mpi4py, __pyx_k_mpi4py, sizeof(__pyx_k_mpi4py), 0, 0, 1, 1},
  {&__pyx_n_s_mpi4py_MPI, __pyx_k_mpi4py_MPI, sizeof(__pyx_k_mpi4py_MPI), 0, 0, 1, 1},
  {&__pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_k_mpi4py_MPI_Comm_pyx, sizeof(__pyx_k_mpi4py_MPI_Comm_pyx), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_Datatype_pyx, __pyx_k_mpi4py_MPI_Datatype_pyx, sizeof(__pyx_k_mpi4py_MPI_Datatype_pyx), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_k_mpi4py_MPI_ExceptionP_pyx, sizeof(__pyx_k_mpi4py_MPI_ExceptionP_pyx), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_Exception_pyx, __pyx_k_mpi4py_MPI_Exception_pyx, sizeof(__pyx_k_mpi4py_MPI_Exception_pyx), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_File_pyx, __pyx_k_mpi4py_MPI_File_pyx, sizeof(__pyx_k_mpi4py_MPI_File_pyx), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_k_mpi4py_MPI_MPI_pyx, sizeof(__pyx_k_mpi4py_MPI_MPI_pyx), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_asbuffer_pxi, __pyx_k_mpi4py_MPI_asbuffer_pxi, sizeof(__pyx_k_mpi4py_MPI_asbuffer_pxi), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_atimport_pxi, __pyx_k_mpi4py_MPI_atimport_pxi, sizeof(__pyx_k_mpi4py_MPI_atimport_pxi), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_commimpl_pxi, __pyx_k_mpi4py_MPI_commimpl_pxi, sizeof(__pyx_k_mpi4py_MPI_commimpl_pxi), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_MPI_typestr_pxi, __pyx_k_mpi4py_MPI_typestr_pxi, sizeof(__pyx_k_mpi4py_MPI_typestr_pxi), 0, 0, 1, 0},
  {&__pyx_kp_s_mpi4py_rc_s_unexpected_value_r, __pyx_k_mpi4py_rc_s_unexpected_value_r, sizeof(__pyx_k_mpi4py_rc_s_unexpected_value_r), 0, 0, 1, 0},
  {&__pyx_n_s_multiple, __pyx_k_multiple, sizeof(__pyx_k_multiple), 0, 0, 1, 1},
  {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},
  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
  {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
  {&__pyx_n_s_nbytes, __pyx_k_nbytes, sizeof(__pyx_k_nbytes), 0, 0, 1, 1},
  {&__pyx_n_s_ndarray, __pyx_k_ndarray, sizeof(__pyx_k_ndarray), 0, 0, 1, 1},
  {&__pyx_n_s_ndims, __pyx_k_ndims, sizeof(__pyx_k_ndims), 0, 0, 1, 1},
  {&__pyx_n_s_ne, __pyx_k_ne, sizeof(__pyx_k_ne), 0, 0, 1, 1},
  {&__pyx_n_s_neighbor_allgather, __pyx_k_neighbor_allgather, sizeof(__pyx_k_neighbor_allgather), 0, 0, 1, 1},
  {&__pyx_n_s_neighbor_alltoall, __pyx_k_neighbor_alltoall, sizeof(__pyx_k_neighbor_alltoall), 0, 0, 1, 1},
  {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
  {&__pyx_n_s_nlen, __pyx_k_nlen, sizeof(__pyx_k_nlen), 0, 0, 1, 1},
  {&__pyx_n_s_nnodes, __pyx_k_nnodes, sizeof(__pyx_k_nnodes), 0, 0, 1, 1},
  {&__pyx_n_s_no, __pyx_k_no, sizeof(__pyx_k_no), 0, 0, 1, 1},
  {&__pyx_n_s_nonzero, __pyx_k_nonzero, sizeof(__pyx_k_nonzero), 0, 0, 1, 1},
  {&__pyx_n_s_nopython, __pyx_k_nopython, sizeof(__pyx_k_nopython), 0, 0, 1, 1},
  {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
  {&__pyx_n_s_numpypy, __pyx_k_numpypy, sizeof(__pyx_k_numpypy), 0, 0, 1, 1},
  {&__pyx_n_s_numpypy_multiarray, __pyx_k_numpypy_multiarray, sizeof(__pyx_k_numpypy_multiarray), 0, 0, 1, 1},
  {&__pyx_n_s_ob_mpi, __pyx_k_ob_mpi, sizeof(__pyx_k_ob_mpi), 0, 0, 1, 1},
  {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1},
  {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
  {&__pyx_n_s_op, __pyx_k_op, sizeof(__pyx_k_op), 0, 0, 1, 1},
  {&__pyx_n_s_order, __pyx_k_order, sizeof(__pyx_k_order), 0, 0, 1, 1},
  {&__pyx_n_s_origin, __pyx_k_origin, sizeof(__pyx_k_origin), 0, 0, 1, 1},
  {&__pyx_kp_s_origin_expecting_a_single_elemen, __pyx_k_origin_expecting_a_single_elemen, sizeof(__pyx_k_origin_expecting_a_single_elemen), 0, 0, 1, 0},
  {&__pyx_n_s_other, __pyx_k_other, sizeof(__pyx_k_other), 0, 0, 1, 1},
  {&__pyx_n_s_outbuf, __pyx_k_outbuf, sizeof(__pyx_k_outbuf), 0, 0, 1, 1},
  {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1},
  {&__pyx_n_s_peer_comm, __pyx_k_peer_comm, sizeof(__pyx_k_peer_comm), 0, 0, 1, 1},
  {&__pyx_n_s_periods, __pyx_k_periods, sizeof(__pyx_k_periods), 0, 0, 1, 1},
  {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
  {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1},
  {&__pyx_n_s_port_name, __pyx_k_port_name, sizeof(__pyx_k_port_name), 0, 0, 1, 1},
  {&__pyx_n_s_position, __pyx_k_position, sizeof(__pyx_k_position), 0, 0, 1, 1},
  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
  {&__pyx_n_s_print_exc, __pyx_k_print_exc, sizeof(__pyx_k_print_exc), 0, 0, 1, 1},
  {&__pyx_n_s_probe, __pyx_k_probe, sizeof(__pyx_k_probe), 0, 0, 1, 1},
  {&__pyx_n_s_property, __pyx_k_property, sizeof(__pyx_k_property), 0, 0, 1, 1},
  {&__pyx_n_s_protocol, __pyx_k_protocol, sizeof(__pyx_k_protocol), 0, 0, 1, 1},
  {&__pyx_n_s_provided, __pyx_k_provided, sizeof(__pyx_k_provided), 0, 0, 1, 1},
  {&__pyx_n_s_psizes, __pyx_k_psizes, sizeof(__pyx_k_psizes), 0, 0, 1, 1},
  {&__pyx_n_s_ptr, __pyx_k_ptr, sizeof(__pyx_k_ptr), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
  {&__pyx_n_s_query_fn, __pyx_k_query_fn, sizeof(__pyx_k_query_fn), 0, 0, 1, 1},
  {&__pyx_n_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1},
  {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
  {&__pyx_n_s_rank, __pyx_k_rank, sizeof(__pyx_k_rank), 0, 0, 1, 1},
  {&__pyx_n_s_ranks, __pyx_k_ranks, sizeof(__pyx_k_ranks), 0, 0, 1, 1},
  {&__pyx_n_s_ranks1, __pyx_k_ranks1, sizeof(__pyx_k_ranks1), 0, 0, 1, 1},
  {&__pyx_n_s_rc, __pyx_k_rc, sizeof(__pyx_k_rc), 0, 0, 1, 1},
  {&__pyx_n_s_rd, __pyx_k_rd, sizeof(__pyx_k_rd), 0, 0, 1, 1},
  {&__pyx_n_s_read_fn, __pyx_k_read_fn, sizeof(__pyx_k_read_fn), 0, 0, 1, 1},
  {&__pyx_n_s_readonly, __pyx_k_readonly, sizeof(__pyx_k_readonly), 0, 0, 1, 1},
  {&__pyx_n_s_recv, __pyx_k_recv, sizeof(__pyx_k_recv), 0, 0, 1, 1},
  {&__pyx_n_s_recv_mprobe, __pyx_k_recv_mprobe, sizeof(__pyx_k_recv_mprobe), 0, 0, 1, 1},
  {&__pyx_n_s_recvbuf, __pyx_k_recvbuf, sizeof(__pyx_k_recvbuf), 0, 0, 1, 1},
  {&__pyx_n_s_recvcounts, __pyx_k_recvcounts, sizeof(__pyx_k_recvcounts), 0, 0, 1, 1},
  {&__pyx_n_s_recvtag, __pyx_k_recvtag, sizeof(__pyx_k_recvtag), 0, 0, 1, 1},
  {&__pyx_n_s_release, __pyx_k_release, sizeof(__pyx_k_release), 0, 0, 1, 1},
  {&__pyx_n_s_remain_dims, __pyx_k_remain_dims, sizeof(__pyx_k_remain_dims), 0, 0, 1, 1},
  {&__pyx_n_s_remote_leader, __pyx_k_remote_leader, sizeof(__pyx_k_remote_leader), 0, 0, 1, 1},
  {&__pyx_n_s_reorder, __pyx_k_reorder, sizeof(__pyx_k_reorder), 0, 0, 1, 1},
  {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1},
  {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1},
  {&__pyx_n_s_requests, __pyx_k_requests, sizeof(__pyx_k_requests), 0, 0, 1, 1},
  {&__pyx_n_s_required, __pyx_k_required, sizeof(__pyx_k_required), 0, 0, 1, 1},
  {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1},
  {&__pyx_kp_s_result_expecting_a_single_elemen, __pyx_k_result_expecting_a_single_elemen, sizeof(__pyx_k_result_expecting_a_single_elemen), 0, 0, 1, 0},
  {&__pyx_n_s_resultlen, __pyx_k_resultlen, sizeof(__pyx_k_resultlen), 0, 0, 1, 1},
  {&__pyx_n_s_root, __pyx_k_root, sizeof(__pyx_k_root), 0, 0, 1, 1},
  {&__pyx_n_s_scatter, __pyx_k_scatter, sizeof(__pyx_k_scatter), 0, 0, 1, 1},
  {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
  {&__pyx_n_s_sendbuf, __pyx_k_sendbuf, sizeof(__pyx_k_sendbuf), 0, 0, 1, 1},
  {&__pyx_n_s_sendobj, __pyx_k_sendobj, sizeof(__pyx_k_sendobj), 0, 0, 1, 1},
  {&__pyx_n_s_sendtag, __pyx_k_sendtag, sizeof(__pyx_k_sendtag), 0, 0, 1, 1},
  {&__pyx_n_s_serialized, __pyx_k_serialized, sizeof(__pyx_k_serialized), 0, 0, 1, 1},
  {&__pyx_n_s_service_name, __pyx_k_service_name, sizeof(__pyx_k_service_name), 0, 0, 1, 1},
  {&__pyx_n_s_set_abort_status, __pyx_k_set_abort_status, sizeof(__pyx_k_set_abort_status), 0, 0, 1, 1},
  {&__pyx_n_s_single, __pyx_k_single, sizeof(__pyx_k_single), 0, 0, 1, 1},
  {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
  {&__pyx_n_s_sizeof, __pyx_k_sizeof, sizeof(__pyx_k_sizeof), 0, 0, 1, 1},
  {&__pyx_n_s_sizes, __pyx_k_sizes, sizeof(__pyx_k_sizes), 0, 0, 1, 1},
  {&__pyx_kp_s_slice_length_does_not_match_buff, __pyx_k_slice_length_does_not_match_buff, sizeof(__pyx_k_slice_length_does_not_match_buff), 0, 0, 1, 0},
  {&__pyx_kp_s_slice_with_step_not_supported, __pyx_k_slice_with_step_not_supported, sizeof(__pyx_k_slice_with_step_not_supported), 0, 0, 1, 0},
  {&__pyx_n_s_source, __pyx_k_source, sizeof(__pyx_k_source), 0, 0, 1, 1},
  {&__pyx_n_s_sources, __pyx_k_sources, sizeof(__pyx_k_sources), 0, 0, 1, 1},
  {&__pyx_n_s_sourceweights, __pyx_k_sourceweights, sizeof(__pyx_k_sourceweights), 0, 0, 1, 1},
  {&__pyx_n_s_split_type, __pyx_k_split_type, sizeof(__pyx_k_split_type), 0, 0, 1, 1},
  {&__pyx_n_s_starts, __pyx_k_starts, sizeof(__pyx_k_starts), 0, 0, 1, 1},
  {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1},
  {&__pyx_n_s_staticmethod, __pyx_k_staticmethod, sizeof(__pyx_k_staticmethod), 0, 0, 1, 1},
  {&__pyx_n_s_status, __pyx_k_status, sizeof(__pyx_k_status), 0, 0, 1, 1},
  {&__pyx_n_s_statuses, __pyx_k_statuses, sizeof(__pyx_k_statuses), 0, 0, 1, 1},
  {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1},
  {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
  {&__pyx_n_s_stride, __pyx_k_stride, sizeof(__pyx_k_stride), 0, 0, 1, 1},
  {&__pyx_n_s_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 0, 1, 1},
  {&__pyx_n_s_subsizes, __pyx_k_subsizes, sizeof(__pyx_k_subsizes), 0, 0, 1, 1},
  {&__pyx_n_s_subversion, __pyx_k_subversion, sizeof(__pyx_k_subversion), 0, 0, 1, 1},
  {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1},
  {&__pyx_n_s_tag, __pyx_k_tag, sizeof(__pyx_k_tag), 0, 0, 1, 1},
  {&__pyx_n_s_target, __pyx_k_target, sizeof(__pyx_k_target), 0, 0, 1, 1},
  {&__pyx_n_s_target_disp, __pyx_k_target_disp, sizeof(__pyx_k_target_disp), 0, 0, 1, 1},
  {&__pyx_kp_s_target_expecting_3_items_at_most, __pyx_k_target_expecting_3_items_at_most, sizeof(__pyx_k_target_expecting_3_items_at_most), 0, 0, 1, 0},
  {&__pyx_kp_s_target_expecting_integral_or_lis, __pyx_k_target_expecting_integral_or_lis, sizeof(__pyx_k_target_expecting_integral_or_lis), 0, 0, 1, 0},
  {&__pyx_n_s_target_rank, __pyx_k_target_rank, sizeof(__pyx_k_target_rank), 0, 0, 1, 1},
  {&__pyx_n_s_tc, __pyx_k_tc, sizeof(__pyx_k_tc), 0, 0, 1, 1},
  {&__pyx_n_s_testall, __pyx_k_testall, sizeof(__pyx_k_testall), 0, 0, 1, 1},
  {&__pyx_n_s_testany, __pyx_k_testany, sizeof(__pyx_k_testany), 0, 0, 1, 1},
  {&__pyx_n_s_thread, __pyx_k_thread, sizeof(__pyx_k_thread), 0, 0, 1, 1},
  {&__pyx_n_s_thread_2, __pyx_k_thread_2, sizeof(__pyx_k_thread_2), 0, 0, 1, 1},
  {&__pyx_n_s_thread_level, __pyx_k_thread_level, sizeof(__pyx_k_thread_level), 0, 0, 1, 1},
  {&__pyx_n_s_threaded, __pyx_k_threaded, sizeof(__pyx_k_threaded), 0, 0, 1, 1},
  {&__pyx_n_s_threads, __pyx_k_threads, sizeof(__pyx_k_threads), 0, 0, 1, 1},
  {&__pyx_n_s_tmp, __pyx_k_tmp, sizeof(__pyx_k_tmp), 0, 0, 1, 1},
  {&__pyx_n_s_traceback, __pyx_k_traceback, sizeof(__pyx_k_traceback), 0, 0, 1, 1},
  {&__pyx_n_s_typeclass, __pyx_k_typeclass, sizeof(__pyx_k_typeclass), 0, 0, 1, 1},
  {&__pyx_n_s_typecode, __pyx_k_typecode, sizeof(__pyx_k_typecode), 0, 0, 1, 1},
  {&__pyx_n_s_typecode_2, __pyx_k_typecode_2, sizeof(__pyx_k_typecode_2), 0, 0, 1, 1},
  {&__pyx_n_s_typedict, __pyx_k_typedict, sizeof(__pyx_k_typedict), 0, 0, 1, 1},
  {&__pyx_n_s_typedict_c, __pyx_k_typedict_c, sizeof(__pyx_k_typedict_c), 0, 0, 1, 1},
  {&__pyx_n_s_typedict_f, __pyx_k_typedict_f, sizeof(__pyx_k_typedict_f), 0, 0, 1, 1},
  {&__pyx_kp_s_unorderable_type_s_s, __pyx_k_unorderable_type_s_s, sizeof(__pyx_k_unorderable_type_s_s), 0, 0, 1, 0},
  {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
  {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1},
  {&__pyx_n_s_waitall, __pyx_k_waitall, sizeof(__pyx_k_waitall), 0, 0, 1, 1},
  {&__pyx_n_s_waitany, __pyx_k_waitany, sizeof(__pyx_k_waitany), 0, 0, 1, 1},
  {&__pyx_n_s_warn, __pyx_k_warn, sizeof(__pyx_k_warn), 0, 0, 1, 1},
  {&__pyx_n_s_warnings, __pyx_k_warnings, sizeof(__pyx_k_warnings), 0, 0, 1, 1},
  {&__pyx_n_s_weights, __pyx_k_weights, sizeof(__pyx_k_weights), 0, 0, 1, 1},
  {&__pyx_n_s_whence, __pyx_k_whence, sizeof(__pyx_k_whence), 0, 0, 1, 1},
  {&__pyx_n_s_win, __pyx_k_win, sizeof(__pyx_k_win), 0, 0, 1, 1},
  {&__pyx_n_s_wr, __pyx_k_wr, sizeof(__pyx_k_wr), 0, 0, 1, 1},
  {&__pyx_n_s_write_fn, __pyx_k_write_fn, sizeof(__pyx_k_write_fn), 0, 0, 1, 1},
  {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
  {&__pyx_n_s_xs, __pyx_k_xs, sizeof(__pyx_k_xs), 0, 0, 1, 1},
  {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1},
  {&__pyx_n_s_yes, __pyx_k_yes, sizeof(__pyx_k_yes), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(0, 70, __pyx_L1_error)
  __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_n_s_staticmethod); if (!__pyx_builtin_staticmethod) __PYX_ERR(0, 158, __pyx_L1_error)
  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(1, 1, __pyx_L1_error)
  __pyx_builtin_property = __Pyx_GetBuiltinName(__pyx_n_s_property); if (!__pyx_builtin_property) __PYX_ERR(1, 64, __pyx_L1_error)
  __pyx_builtin_SystemError = __Pyx_GetBuiltinName(__pyx_n_s_SystemError); if (!__pyx_builtin_SystemError) __PYX_ERR(0, 90, __pyx_L1_error)
  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 92, __pyx_L1_error)
  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 174, __pyx_L1_error)
  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 250, __pyx_L1_error)
  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 320, __pyx_L1_error)
  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(2, 22, __pyx_L1_error)
  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(3, 95, __pyx_L1_error)
  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(4, 75, __pyx_L1_error)
  __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(5, 44, __pyx_L1_error)
  __pyx_builtin_UserWarning = __Pyx_GetBuiltinName(__pyx_n_s_UserWarning); if (!__pyx_builtin_UserWarning) __PYX_ERR(6, 226, __pyx_L1_error)
  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(7, 1673, __pyx_L1_error)
  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(8, 347, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "mpi4py/MPI/asbuffer.pxi":174
 *         cdef Py_ssize_t size = nbytes
 *         if size < 0:
 *             raise ValueError("expecting non-negative buffer length")             # <<<<<<<<<<<<<<
 *         elif size > 0 and buf == NULL:
 *             raise ValueError("expecting non-NULL address")
 */
  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_expecting_non_negative_buffer_le); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);

  /* "mpi4py/MPI/asbuffer.pxi":176
 *             raise ValueError("expecting non-negative buffer length")
 *         elif size > 0 and buf == NULL:
 *             raise ValueError("expecting non-NULL address")             # <<<<<<<<<<<<<<
 *         cdef memory mem = <memory>memory.__new__(memory)
 *         PyBuffer_FillInfo(&mem.view, <object>NULL,
 */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_expecting_non_NULL_address); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);

  /* "mpi4py/MPI/asbuffer.pxi":228
 *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")             # <<<<<<<<<<<<<<
 *         p[0] = self.view.buf
 *         return self.view.len
 */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);

  /* "mpi4py/MPI/asbuffer.pxi":234
 *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
 *         if self.view.readonly:
 *             raise TypeError("memory buffer is read-only")             # <<<<<<<<<<<<<<
 *         if idx != 0:
 *             raise SystemError("accessing non-existent buffer segment")
 */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_memory_buffer_is_read_only); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);

  /* "mpi4py/MPI/asbuffer.pxi":253
 *             if start < 0: start += blen
 *             if start < 0 or start >= blen:
 *                 raise IndexError("index out of range")             # <<<<<<<<<<<<<<
 *             return <long>buf[start]
 *         elif PySlice_Check(item):
 */
  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_index_out_of_range); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);

  /* "mpi4py/MPI/asbuffer.pxi":257
 *         elif PySlice_Check(item):
 *             PySlice_GetIndicesEx(item, blen, &start, &stop, &step, &slen)
 *             if step != 1: raise IndexError("slice with step not supported")             # <<<<<<<<<<<<<<
 *             return asbuffer(self, buf+start, slen, self.view.readonly)
 *         else:
 */
  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_slice_with_step_not_supported); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);

  /* "mpi4py/MPI/asbuffer.pxi":260
 *             return asbuffer(self, buf+start, slen, self.view.readonly)
 *         else:
 *             raise TypeError("index must be integer or slice")             # <<<<<<<<<<<<<<
 * 
 *     def __setitem__(self, object item, object value):
 */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_index_must_be_integer_or_slice); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);

  /* "mpi4py/MPI/asbuffer.pxi":283
 *                 inmem = getbuffer(value, 1, 0)
 *                 if inmem.view.len != slen:
 *                     raise ValueError("slice length does not match buffer")             # <<<<<<<<<<<<<<
 *                 <void>memmove(buf+start, inmem.view.buf, <size_t>slen)
 *         else:
 */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_slice_length_does_not_match_buff); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);

  /* "mpi4py/MPI/asmemory.pxi":22
 * cdef inline _p_mem allocate(Py_ssize_t m, size_t b, void *buf):
 *   if m > PY_SSIZE_T_MAX/<Py_ssize_t>b:
 *       raise MemoryError("memory allocation size too large")             # <<<<<<<<<<<<<<
 *   if m < 0:
 *       raise RuntimeError("memory allocation with negative size")
 */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_memory_allocation_size_too_large); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);

  /* "mpi4py/MPI/asmemory.pxi":24
 *       raise MemoryError("memory allocation size too large")
 *   if m < 0:
 *       raise RuntimeError("memory allocation with negative size")             # <<<<<<<<<<<<<<
 *   cdef size_t n = <size_t>m * b
 *   cdef _p_mem ob = <_p_mem>_p_mem.__new__(_p_mem)
 */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_memory_allocation_with_negative); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);

  /* "mpi4py/MPI/asarray.pxi":101
 * cdef inline object asarray_cmds(object sequence, int *count, char ***p):
 *      if is_string(sequence):
 *          raise ValueError("expecting a sequence of strings")             # <<<<<<<<<<<<<<
 *      sequence = list(sequence)
 *      count[0] = <int>len(sequence)
 */
  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_sequence_of_strings); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(11, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);

  /* "mpi4py/MPI/opimpl.pxi":261
 *         index = op_user_registry.index(None, 1)
 *     except ValueError:
 *         raise RuntimeError("cannot create too many "             # <<<<<<<<<<<<<<
 *                            "user-defined reduction operations")
 *     # the line below will fail
 */
  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_cannot_create_too_many_user_defi); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(14, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);

  /* "mpi4py/MPI/commimpl.pxi":42
 *         return None
 *     if weights is __WEIGHTS_EMPTY__:
 *         if nweight > 0: raise ValueError("empty weights but nonzero degree")             # <<<<<<<<<<<<<<
 *         iweight[0] = MPI_WEIGHTS_EMPTY
 *         return None
 */
  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_empty_weights_but_nonzero_degree); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(3, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);

  /* "mpi4py/MPI/msgbuffer.pxi":145
 *             (o_buf, o_count, o_displ, o_type) = msg
 *         else:
 *             raise ValueError("message: expecting 2 to 4 items")             # <<<<<<<<<<<<<<
 *     elif PYPY:
 *         o_buf = msg
 */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_message_expecting_2_to_4_items); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(5, 145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);

  /* "mpi4py/MPI/msgbuffer.pxi":149
 *         o_buf = msg
 *     else:
 *         raise TypeError("message: expecting buffer or list/tuple")             # <<<<<<<<<<<<<<
 *     # buffer: address, length, and datatype
 *     cdef void *baddr = NULL
 */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_message_expecting_buffer_or_list); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(5, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);

  /* "mpi4py/MPI/msgbuffer.pxi":167
 *             "message: negative diplacement %d" % displ)
 *         if displ > 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(             # <<<<<<<<<<<<<<
 *                 "message: cannot handle diplacement, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_message_cannot_handle_diplacemen); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(5, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);

  /* "mpi4py/MPI/msgbuffer.pxi":188
 *     elif length > 0:
 *         if extent == 0:
 *             if btype == MPI_DATATYPE_NULL: raise ValueError(             # <<<<<<<<<<<<<<
 *                 "message: cannot infer count, datatype is null")
 *             CHKERR( MPI_Type_get_extent(btype, &lb, &extent) )
 */
  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_message_cannot_infer_count_datat); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(5, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);

  /* "mpi4py/MPI/msgbuffer.pxi":699
 *         if self.sbuf != MPI_IN_PLACE:
 *             if self.stype != self.rtype:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "mismatch in send and receive MPI datatypes")
 *             if self.scount != self.rcount:
 */
  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_mismatch_in_send_and_receive_MPI); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(5, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);

  /* "mpi4py/MPI/msgbuffer.pxi":973
 *                 self.ttype  = (<Datatype?>target[2]).ob_mpi
 *             if nargs >= 4:
 *                 raise ValueError("target: expecting 3 items at most")             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("target: expecting integral or list/tuple")
 */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_target_expecting_3_items_at_most); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(5, 973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);

  /* "mpi4py/MPI/msgbuffer.pxi":975
 *                 raise ValueError("target: expecting 3 items at most")
 *         else:
 *             raise ValueError("target: expecting integral or list/tuple")             # <<<<<<<<<<<<<<
 *         self._target = target
 *         return 0
 */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_target_expecting_integral_or_lis); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(5, 975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);

  /* "mpi4py/MPI/msgbuffer.pxi":1026
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.rtype: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in origin and result MPI datatypes")
 *         return 0
 */
  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_mismatch_in_origin_and_result_MP); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(5, 1026, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);

  /* "mpi4py/MPI/msgbuffer.pxi":1044
 *         if self.rcount != 1: raise ValueError(
 *             "result: expecting a single element, got %d" % self.rcount)
 *         if self.otype != self.ctype: raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in origin and compare MPI datatypes")
 *         if self.otype != self.rtype: raise ValueError(
 */
  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_mismatch_in_origin_and_compare_M); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(5, 1044, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);

  /* "mpi4py/MPI/msgpickle.pxi":283
 *     <void>obj # unused
 *     #
 *     with PyMPI_Lock(comm, "recv"):             # <<<<<<<<<<<<<<
 *         with nogil:
 *             CHKERR( MPI_Probe(source, tag, comm, &rsts) )
 */
  __pyx_tuple__24 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(6, 283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);

  /* "mpi4py/MPI/msgpickle.pxi":922
 *     seq = _py_scan(seq, op)
 *     seq.pop(-1)
 *     seq.insert(0, None)             # <<<<<<<<<<<<<<
 *     return seq
 * 
 */
  __pyx_tuple__25 = PyTuple_Pack(2, __pyx_int_0, Py_None); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(6, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);

  /* "mpi4py/MPI/Op.pyx":97
 *             "mismatch in inbuf count %d and inoutbuf count %d" %
 *             (m.scount, m.rcount))
 *         if (m.stype != m.rtype): raise ValueError(             # <<<<<<<<<<<<<<
 *             "mismatch in inbuf and inoutbuf MPI datatypes")
 *         # do local reduction
 */
  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_mismatch_in_inbuf_and_inoutbuf_M); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(28, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);

  /* "mpi4py/MPI/Comm.pyx":1302
 *         cdef int inter = 1
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 *         if inter: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting an intracommunicator")
 * 
 */
  __pyx_tuple__81 = PyTuple_Pack(1, __pyx_kp_s_expecting_an_intracommunicator); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(7, 1302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__81);
  __Pyx_GIVEREF(__pyx_tuple__81);

  /* "mpi4py/MPI/Comm.pyx":1540
 *         cdef int i=0
 *         if errcodes is not None:
 *             errcodes[:] = [ierrcodes[i] for i from 0 <= i < maxprocs]             # <<<<<<<<<<<<<<
 *         #
 *         comm_set_eh(comm.ob_mpi)
 */
  __pyx_slice__91 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__91)) __PYX_ERR(7, 1540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__91);
  __Pyx_GIVEREF(__pyx_slice__91);

  /* "mpi4py/MPI/Comm.pyx":1636
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo == MPI_UNDEFINED: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a topology communicator")
 * 
 */
  __pyx_tuple__95 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_topology_communicato); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(7, 1636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__95);
  __Pyx_GIVEREF(__pyx_tuple__95);

  /* "mpi4py/MPI/Comm.pyx":1652
 *                 return (nneighbors, nneighbors)
 *             if isinstance(self, Distgraphcomm):
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]             # <<<<<<<<<<<<<<
 *                 return nneighbors
 *             raise TypeError("Not a topology communicator")
 */
  __pyx_slice__96 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__96)) __PYX_ERR(7, 1652, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__96);
  __Pyx_GIVEREF(__pyx_slice__96);

  /* "mpi4py/MPI/Comm.pyx":1654
 *                 nneighbors = self.Get_dist_neighbors_count()[:2]
 *                 return nneighbors
 *             raise TypeError("Not a topology communicator")             # <<<<<<<<<<<<<<
 * 
 *     property indegree:
 */
  __pyx_tuple__97 = PyTuple_Pack(1, __pyx_kp_s_Not_a_topology_communicator); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(7, 1654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__97);
  __Pyx_GIVEREF(__pyx_tuple__97);

  /* "mpi4py/MPI/Comm.pyx":1851
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_CART: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a Cartesian communicator")
 * 
 */
  __pyx_tuple__98 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_Cartesian_communicat); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(7, 1851, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__98);
  __Pyx_GIVEREF(__pyx_tuple__98);

  /* "mpi4py/MPI/Comm.pyx":1998
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_GRAPH: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a general graph communicator")
 * 
 */
  __pyx_tuple__99 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_general_graph_commun); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(7, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__99);
  __Pyx_GIVEREF(__pyx_tuple__99);

  /* "mpi4py/MPI/Comm.pyx":2105
 *         cdef int topo = MPI_UNDEFINED
 *         CHKERR( MPI_Topo_test(self.ob_mpi, &topo) )
 *         if topo != MPI_DIST_GRAPH: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting a distributed graph communicator")
 * 
 */
  __pyx_tuple__100 = PyTuple_Pack(1, __pyx_kp_s_expecting_a_distributed_graph_co); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(7, 2105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__100);
  __Pyx_GIVEREF(__pyx_tuple__100);

  /* "mpi4py/MPI/Comm.pyx":2167
 *         cdef int inter = 0
 *         CHKERR( MPI_Comm_test_inter(self.ob_mpi, &inter) )
 *         if not inter: raise TypeError(             # <<<<<<<<<<<<<<
 *             "expecting an intercommunicator")
 * 
 */
  __pyx_tuple__101 = PyTuple_Pack(1, __pyx_kp_s_expecting_an_intercommunicator); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(7, 2167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__101);
  __Pyx_GIVEREF(__pyx_tuple__101);

  /* "mpi4py/MPI/MPI.pyx":309
 *     if _mpi_type(arg, Win):        return sizeof(MPI_Win)
 *     if _mpi_type(arg, File):       return sizeof(MPI_File)
 *     raise TypeError("expecting an MPI type or instance")             # <<<<<<<<<<<<<<
 * 
 * def _addressof(arg):
 */
  __pyx_tuple__128 = PyTuple_Pack(1, __pyx_kp_s_expecting_an_MPI_type_or_instanc); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(8, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__128);
  __Pyx_GIVEREF(__pyx_tuple__128);

  /* "mpi4py/MPI/MPI.pyx":339
 *         ptr = <void*>&(<File>arg).ob_mpi
 *     else:
 *         raise TypeError("expecting an MPI instance")             # <<<<<<<<<<<<<<
 *     return PyLong_FromVoidPtr(ptr)
 * 
 */
  __pyx_tuple__129 = PyTuple_Pack(1, __pyx_kp_s_expecting_an_MPI_instance); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(8, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__129);
  __Pyx_GIVEREF(__pyx_tuple__129);

  /* "mpi4py/MPI/atimport.pxi":213
 *         <void>MPI_Finalize()
 * 
 * def _set_abort_status(object status):             # <<<<<<<<<<<<<<
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 */
  __pyx_tuple__130 = PyTuple_Pack(1, __pyx_n_s_status); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(9, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__130);
  __Pyx_GIVEREF(__pyx_tuple__130);
  __pyx_codeobj__131 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_atimport_pxi, __pyx_n_s_set_abort_status, 213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__131)) __PYX_ERR(9, 213, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":159
 * 
 *     @staticmethod
 *     def frombuffer(obj, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from buffer-like object"""
 *         cdef int flags = PyBUF_SIMPLE
 */
  __pyx_tuple__132 = PyTuple_Pack(4, __pyx_n_s_obj, __pyx_n_s_readonly, __pyx_n_s_flags, __pyx_n_s_mem); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__132);
  __Pyx_GIVEREF(__pyx_tuple__132);
  __pyx_codeobj__133 = (PyObject*)__Pyx_PyCode_New(2, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__132, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_asbuffer_pxi, __pyx_n_s_frombuffer, 159, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) __PYX_ERR(0, 159, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":169
 * 
 *     @staticmethod
 *     def fromaddress(address, nbytes, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from address and size in bytes"""
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 */
  __pyx_tuple__134 = PyTuple_Pack(6, __pyx_n_s_address, __pyx_n_s_nbytes, __pyx_n_s_readonly, __pyx_n_s_buf, __pyx_n_s_size, __pyx_n_s_mem); if (unlikely(!__pyx_tuple__134)) __PYX_ERR(0, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__134);
  __Pyx_GIVEREF(__pyx_tuple__134);
  __pyx_codeobj__135 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_asbuffer_pxi, __pyx_n_s_fromaddress, 169, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__135)) __PYX_ERR(0, 169, __pyx_L1_error)

  /* "mpi4py/MPI/commimpl.pxi":136
 *     return lock
 * 
 * def _lock_table(Comm comm):             # <<<<<<<<<<<<<<
 *     "Internal communicator lock table"
 *     return PyMPI_Lock_table(comm.ob_mpi)
 */
  __pyx_tuple__136 = PyTuple_Pack(1, __pyx_n_s_comm); if (unlikely(!__pyx_tuple__136)) __PYX_ERR(3, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__136);
  __Pyx_GIVEREF(__pyx_tuple__136);
  __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_commimpl_pxi, __pyx_n_s_lock_table, 136, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) __PYX_ERR(3, 136, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":1
 * class Exception(RuntimeError):             # <<<<<<<<<<<<<<
 * 
 *     """
 */
  __pyx_tuple__138 = PyTuple_Pack(1, __pyx_builtin_RuntimeError); if (unlikely(!__pyx_tuple__138)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__138);
  __Pyx_GIVEREF(__pyx_tuple__138);

  /* "mpi4py/MPI/ExceptionP.pyx":7
 *     """
 * 
 *     def __init__(self, int ierr=0):             # <<<<<<<<<<<<<<
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN
 *         self.ob_mpi = ierr
 */
  __pyx_tuple__139 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__139)) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__139);
  __Pyx_GIVEREF(__pyx_tuple__139);
  __pyx_codeobj__140 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__139, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_init, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__140)) __PYX_ERR(1, 7, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":12
 *         RuntimeError.__init__(self, self.ob_mpi)
 * 
 *     def __eq__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr == error)
 */
  __pyx_tuple__141 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_error, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__141)) __PYX_ERR(1, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__141);
  __Pyx_GIVEREF(__pyx_tuple__141);
  __pyx_codeobj__142 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__141, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_eq, 12, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__142)) __PYX_ERR(1, 12, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":16
 *         return <bint> (ierr == error)
 * 
 *     def __ne__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr != error)
 */
  __pyx_tuple__143 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_error, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__143)) __PYX_ERR(1, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__143);
  __Pyx_GIVEREF(__pyx_tuple__143);
  __pyx_codeobj__144 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__143, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_ne, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__144)) __PYX_ERR(1, 16, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":20
 *         return <bint> (ierr != error)
 * 
 *     def __lt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr < error)
 */
  __pyx_tuple__145 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_error, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__145)) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__145);
  __Pyx_GIVEREF(__pyx_tuple__145);
  __pyx_codeobj__146 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__145, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_lt, 20, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__146)) __PYX_ERR(1, 20, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":24
 *         return <bint> (ierr < error)
 * 
 *     def __le__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr <= error)
 */
  __pyx_tuple__147 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_error, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__147)) __PYX_ERR(1, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__147);
  __Pyx_GIVEREF(__pyx_tuple__147);
  __pyx_codeobj__148 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__147, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_le, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__148)) __PYX_ERR(1, 24, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":28
 *         return <bint> (ierr <= error)
 * 
 *     def __gt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr > error)
 */
  __pyx_tuple__149 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_error, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__149)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__149);
  __Pyx_GIVEREF(__pyx_tuple__149);
  __pyx_codeobj__150 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__149, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_gt, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__150)) __PYX_ERR(1, 28, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":32
 *         return <bint> (ierr > error)
 * 
 *     def __ge__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr >= error)
 */
  __pyx_tuple__151 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_error, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__151)) __PYX_ERR(1, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__151);
  __Pyx_GIVEREF(__pyx_tuple__151);
  __pyx_codeobj__152 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__151, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_ge, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__152)) __PYX_ERR(1, 32, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":36
 *         return <bint> (ierr >= error)
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         return hash(self.ob_mpi)
 * 
 */
  __pyx_tuple__153 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__153)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__153);
  __Pyx_GIVEREF(__pyx_tuple__153);
  __pyx_codeobj__154 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__153, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_hash, 36, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__154)) __PYX_ERR(1, 36, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":39
 *         return hash(self.ob_mpi)
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return ierr != MPI_SUCCESS
 */
  __pyx_tuple__155 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__155)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__155);
  __Pyx_GIVEREF(__pyx_tuple__155);
  __pyx_codeobj__156 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__155, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_bool, 39, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__156)) __PYX_ERR(1, 39, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":45
 *     __nonzero__ = __bool__
 * 
 *     def __int__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi
 * 
 */
  __pyx_tuple__157 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__157)) __PYX_ERR(1, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__157);
  __Pyx_GIVEREF(__pyx_tuple__157);
  __pyx_codeobj__158 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__157, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_int, 45, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__158)) __PYX_ERR(1, 45, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":48
 *         return self.ob_mpi
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 */
  __pyx_tuple__159 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__159)) __PYX_ERR(1, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__159);
  __Pyx_GIVEREF(__pyx_tuple__159);
  __pyx_codeobj__160 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__159, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_repr, 48, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__160)) __PYX_ERR(1, 48, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":51
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         if not mpi_active():
 *             return "error code: %d" % self.ob_mpi
 */
  __pyx_tuple__161 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__161)) __PYX_ERR(1, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__161);
  __Pyx_GIVEREF(__pyx_tuple__161);
  __pyx_codeobj__162 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__161, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_str, 51, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__162)) __PYX_ERR(1, 51, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":56
 *         return self.Get_error_string()
 * 
 *     def Get_error_code(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error code
 */
  __pyx_tuple__163 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_errorcode); if (unlikely(!__pyx_tuple__163)) __PYX_ERR(1, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__163);
  __Pyx_GIVEREF(__pyx_tuple__163);
  __pyx_codeobj__164 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__163, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_Get_error_code, 56, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__164)) __PYX_ERR(1, 56, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":66
 *     error_code = property(Get_error_code, doc="error code")
 * 
 *     def Get_error_class(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error class
 */
  __pyx_tuple__165 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_errorclass); if (unlikely(!__pyx_tuple__165)) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__165);
  __Pyx_GIVEREF(__pyx_tuple__165);
  __pyx_codeobj__166 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__165, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_Get_error_class, 66, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__166)) __PYX_ERR(1, 66, __pyx_L1_error)

  /* "mpi4py/MPI/ExceptionP.pyx":76
 *     error_class = property(Get_error_class, doc="error class")
 * 
 *     def Get_error_string(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error string
 */
  __pyx_tuple__167 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_string, __pyx_n_s_resultlen); if (unlikely(!__pyx_tuple__167)) __PYX_ERR(1, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__167);
  __Pyx_GIVEREF(__pyx_tuple__167);
  __pyx_codeobj__168 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__167, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_ExceptionP_pyx, __pyx_n_s_Get_error_string, 76, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__168)) __PYX_ERR(1, 76, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":87
 * 
 * 
 * def Get_error_class(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Convert an *error code* into an *error class*
 */
  __pyx_tuple__169 = PyTuple_Pack(2, __pyx_n_s_errorcode, __pyx_n_s_errorclass); if (unlikely(!__pyx_tuple__169)) __PYX_ERR(19, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__169);
  __Pyx_GIVEREF(__pyx_tuple__169);
  __pyx_codeobj__170 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__169, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Exception_pyx, __pyx_n_s_Get_error_class, 87, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__170)) __PYX_ERR(19, 87, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":95
 *     return errorclass
 * 
 * def Get_error_string(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Return the *error string* for a given
 */
  __pyx_tuple__171 = PyTuple_Pack(3, __pyx_n_s_errorcode, __pyx_n_s_string, __pyx_n_s_resultlen); if (unlikely(!__pyx_tuple__171)) __PYX_ERR(19, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__171);
  __Pyx_GIVEREF(__pyx_tuple__171);
  __pyx_codeobj__172 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__171, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Exception_pyx, __pyx_n_s_Get_error_string, 95, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__172)) __PYX_ERR(19, 95, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":106
 * 
 * 
 * def Add_error_class():             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error class* to the known error classes
 */
  __pyx_tuple__173 = PyTuple_Pack(1, __pyx_n_s_errorclass); if (unlikely(!__pyx_tuple__173)) __PYX_ERR(19, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__173);
  __Pyx_GIVEREF(__pyx_tuple__173);
  __pyx_codeobj__174 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__173, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Exception_pyx, __pyx_n_s_Add_error_class, 106, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__174)) __PYX_ERR(19, 106, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":114
 *     return errorclass
 * 
 * def Add_error_code(int errorclass):             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error code* to an *error class*
 */
  __pyx_tuple__175 = PyTuple_Pack(2, __pyx_n_s_errorclass, __pyx_n_s_errorcode); if (unlikely(!__pyx_tuple__175)) __PYX_ERR(19, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__175);
  __Pyx_GIVEREF(__pyx_tuple__175);
  __pyx_codeobj__176 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__175, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Exception_pyx, __pyx_n_s_Add_error_code, 114, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__176)) __PYX_ERR(19, 114, __pyx_L1_error)

  /* "mpi4py/MPI/Exception.pyx":122
 *     return errorcode
 * 
 * def Add_error_string(int errorcode, string):             # <<<<<<<<<<<<<<
 *     """
 *     Associate an *error string* with an
 */
  __pyx_tuple__177 = PyTuple_Pack(3, __pyx_n_s_errorcode, __pyx_n_s_string, __pyx_n_s_cstring); if (unlikely(!__pyx_tuple__177)) __PYX_ERR(19, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__177);
  __Pyx_GIVEREF(__pyx_tuple__177);
  __pyx_codeobj__178 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__177, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Exception_pyx, __pyx_n_s_Add_error_string, 122, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__178)) __PYX_ERR(19, 122, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":836
 * # -----------------
 * 
 * def Get_address(location):             # <<<<<<<<<<<<<<
 *     """
 *     Get the address of a location in memory
 */
  __pyx_tuple__179 = PyTuple_Pack(3, __pyx_n_s_location, __pyx_n_s_baseptr, __pyx_n_s_address); if (unlikely(!__pyx_tuple__179)) __PYX_ERR(21, 836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__179);
  __Pyx_GIVEREF(__pyx_tuple__179);
  __pyx_codeobj__180 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__179, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Datatype_pyx, __pyx_n_s_Get_address, 836, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__180)) __PYX_ERR(21, 836, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":847
 *     return address
 * 
 * def Aint_add(Aint base, Aint disp):             # <<<<<<<<<<<<<<
 *     """
 *     Return the sum of base address and displacement
 */
  __pyx_tuple__181 = PyTuple_Pack(2, __pyx_n_s_base, __pyx_n_s_disp); if (unlikely(!__pyx_tuple__181)) __PYX_ERR(21, 847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__181);
  __Pyx_GIVEREF(__pyx_tuple__181);
  __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Datatype_pyx, __pyx_n_s_Aint_add, 847, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) __PYX_ERR(21, 847, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":853
 *     return MPI_Aint_add(base, disp)
 * 
 * def Aint_diff(Aint addr1, Aint addr2):             # <<<<<<<<<<<<<<
 *     """
 *     Return the difference between absolute addresses
 */
  __pyx_tuple__183 = PyTuple_Pack(2, __pyx_n_s_addr1, __pyx_n_s_addr2); if (unlikely(!__pyx_tuple__183)) __PYX_ERR(21, 853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__183);
  __Pyx_GIVEREF(__pyx_tuple__183);
  __pyx_codeobj__184 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__183, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Datatype_pyx, __pyx_n_s_Aint_diff, 853, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__184)) __PYX_ERR(21, 853, __pyx_L1_error)

  /* "mpi4py/MPI/typestr.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * def _typecode(Datatype datatype):             # <<<<<<<<<<<<<<
 *     """
 *     Map MPI datatype to typecode string
 */
  __pyx_tuple__185 = PyTuple_Pack(2, __pyx_n_s_datatype, __pyx_n_s_tc); if (unlikely(!__pyx_tuple__185)) __PYX_ERR(23, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__185);
  __Pyx_GIVEREF(__pyx_tuple__185);
  __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_typestr_pxi, __pyx_n_s_typecode_2, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) __PYX_ERR(23, 3, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":1971
 * # Cartesian Convenience Function
 * 
 * def Compute_dims(int nnodes, dims):             # <<<<<<<<<<<<<<
 *     """
 *     Return a balanced distribution of
 */
  __pyx_tuple__187 = PyTuple_Pack(6, __pyx_n_s_nnodes, __pyx_n_s_dims, __pyx_n_s_i, __pyx_n_s_ndims, __pyx_n_s_idims, __pyx_n_s_tmp); if (unlikely(!__pyx_tuple__187)) __PYX_ERR(7, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__187);
  __Pyx_GIVEREF(__pyx_tuple__187);
  __pyx_codeobj__188 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__187, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Compute_dims, 1971, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__188)) __PYX_ERR(7, 1971, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2236
 * #: Upper bound of memory overhead for sending in buffered mode
 * 
 * def Attach_buffer(buf):             # <<<<<<<<<<<<<<
 *     """
 *     Attach a user-provided buffer for
 */
  __pyx_tuple__189 = PyTuple_Pack(3, __pyx_n_s_buf, __pyx_n_s_base, __pyx_n_s_size); if (unlikely(!__pyx_tuple__189)) __PYX_ERR(7, 2236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__189);
  __Pyx_GIVEREF(__pyx_tuple__189);
  __pyx_codeobj__190 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__189, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Attach_buffer, 2236, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__190)) __PYX_ERR(7, 2236, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2246
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )
 * 
 * def Detach_buffer():             # <<<<<<<<<<<<<<
 *     """
 *     Remove an existing attached buffer
 */
  __pyx_tuple__191 = PyTuple_Pack(2, __pyx_n_s_base, __pyx_n_s_size); if (unlikely(!__pyx_tuple__191)) __PYX_ERR(7, 2246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__191);
  __Pyx_GIVEREF(__pyx_tuple__191);
  __pyx_codeobj__192 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__191, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Detach_buffer, 2246, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__192)) __PYX_ERR(7, 2246, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2263
 * # ---------------
 * 
 * def Open_port(Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Return an address that can be used to establish
 */
  __pyx_tuple__193 = PyTuple_Pack(2, __pyx_n_s_info, __pyx_n_s_cportname); if (unlikely(!__pyx_tuple__193)) __PYX_ERR(7, 2263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__193);
  __Pyx_GIVEREF(__pyx_tuple__193);
  __pyx_codeobj__194 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__193, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Open_port, 2263, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__194)) __PYX_ERR(7, 2263, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2273
 *     return mpistr(cportname)
 * 
 * def Close_port(port_name):             # <<<<<<<<<<<<<<
 *     """
 *     Close a port
 */
  __pyx_tuple__195 = PyTuple_Pack(2, __pyx_n_s_port_name, __pyx_n_s_cportname); if (unlikely(!__pyx_tuple__195)) __PYX_ERR(7, 2273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__195);
  __Pyx_GIVEREF(__pyx_tuple__195);
  __pyx_codeobj__196 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__195, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Close_port, 2273, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__196)) __PYX_ERR(7, 2273, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2284
 * # ---------------
 * 
 * def Publish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Publish a service name
 */
  __pyx_tuple__197 = PyTuple_Pack(6, __pyx_n_s_service_name, __pyx_n_s_port_name, __pyx_n_s_info, __pyx_n_s_csrvcname, __pyx_n_s_cportname, __pyx_n_s_cinfo); if (unlikely(!__pyx_tuple__197)) __PYX_ERR(7, 2284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__197);
  __Pyx_GIVEREF(__pyx_tuple__197);
  __pyx_codeobj__198 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__197, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Publish_name, 2284, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__198)) __PYX_ERR(7, 2284, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2297
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )
 * 
 * def Unpublish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Unpublish a service name
 */
  __pyx_tuple__199 = PyTuple_Pack(6, __pyx_n_s_service_name, __pyx_n_s_port_name, __pyx_n_s_info, __pyx_n_s_csrvcname, __pyx_n_s_cportname, __pyx_n_s_cinfo); if (unlikely(!__pyx_tuple__199)) __PYX_ERR(7, 2297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__199);
  __Pyx_GIVEREF(__pyx_tuple__199);
  __pyx_codeobj__200 = (PyObject*)__Pyx_PyCode_New(3, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__199, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Unpublish_name, 2297, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__200)) __PYX_ERR(7, 2297, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2310
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )
 * 
 * def Lookup_name(service_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Lookup a port name given a service name
 */
  __pyx_tuple__201 = PyTuple_Pack(5, __pyx_n_s_service_name, __pyx_n_s_info, __pyx_n_s_csrvcname, __pyx_n_s_cinfo, __pyx_n_s_cportname); if (unlikely(!__pyx_tuple__201)) __PYX_ERR(7, 2310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__201);
  __Pyx_GIVEREF(__pyx_tuple__201);
  __pyx_codeobj__202 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__201, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_Comm_pyx, __pyx_n_s_Lookup_name, 2310, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__202)) __PYX_ERR(7, 2310, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":712
 * # ---------------------------------
 * 
 * def Register_datarep(datarep, read_fn, write_fn, extent_fn):             # <<<<<<<<<<<<<<
 *     """
 *     Register user-defined data representations
 */
  __pyx_tuple__203 = PyTuple_Pack(10, __pyx_n_s_datarep, __pyx_n_s_read_fn, __pyx_n_s_write_fn, __pyx_n_s_extent_fn, __pyx_n_s_cdatarep, __pyx_n_s_state, __pyx_n_s_rd, __pyx_n_s_wr, __pyx_n_s_ex, __pyx_n_s_xs); if (unlikely(!__pyx_tuple__203)) __PYX_ERR(31, 712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__203);
  __Pyx_GIVEREF(__pyx_tuple__203);
  __pyx_codeobj__204 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__203, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_File_pyx, __pyx_n_s_Register_datarep, 712, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__204)) __PYX_ERR(31, 712, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":90
 * # -----------------
 * 
 * def Alloc_mem(Aint size, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Allocate memory for message passing and RMA
 */
  __pyx_tuple__205 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_info, __pyx_n_s_base); if (unlikely(!__pyx_tuple__205)) __PYX_ERR(8, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__205);
  __Pyx_GIVEREF(__pyx_tuple__205);
  __pyx_codeobj__206 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__205, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Alloc_mem, 90, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__206)) __PYX_ERR(8, 90, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":98
 *     return tomemory(base, size)
 * 
 * def Free_mem(mem):             # <<<<<<<<<<<<<<
 *     """
 *     Free memory allocated with `Alloc_mem()`
 */
  __pyx_tuple__207 = PyTuple_Pack(3, __pyx_n_s_mem, __pyx_n_s_base, __pyx_n_s_m); if (unlikely(!__pyx_tuple__207)) __PYX_ERR(8, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__207);
  __Pyx_GIVEREF(__pyx_tuple__207);
  __pyx_codeobj__208 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__207, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Free_mem, 98, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__208)) __PYX_ERR(8, 98, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":110
 * # -----------------------
 * 
 * def Init():             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */
  __pyx_codeobj__209 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Init, 110, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__209)) __PYX_ERR(8, 110, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":117
 *     initialize()
 * 
 * def Finalize():             # <<<<<<<<<<<<<<
 *     """
 *     Terminate the MPI execution environment
 */
  __pyx_codeobj__210 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Finalize, 117, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__210)) __PYX_ERR(8, 117, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":139
 * #: Multiple threads may call MPI
 * 
 * def Init_thread(int required=THREAD_MULTIPLE):             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */
  __pyx_tuple__211 = PyTuple_Pack(2, __pyx_n_s_required, __pyx_n_s_provided); if (unlikely(!__pyx_tuple__211)) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__211);
  __Pyx_GIVEREF(__pyx_tuple__211);
  __pyx_codeobj__212 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__211, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Init_thread, 139, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__212)) __PYX_ERR(8, 139, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":148
 *     return provided
 * 
 * def Query_thread():             # <<<<<<<<<<<<<<
 *     """
 *     Return the level of thread support
 */
  __pyx_tuple__213 = PyTuple_Pack(1, __pyx_n_s_provided); if (unlikely(!__pyx_tuple__213)) __PYX_ERR(8, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__213);
  __Pyx_GIVEREF(__pyx_tuple__213);
  __pyx_codeobj__214 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__213, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Query_thread, 148, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__214)) __PYX_ERR(8, 148, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":157
 *     return provided
 * 
 * def Is_thread_main():             # <<<<<<<<<<<<<<
 *     """
 *     Indicate whether this thread called
 */
  __pyx_tuple__215 = PyTuple_Pack(1, __pyx_n_s_flag); if (unlikely(!__pyx_tuple__215)) __PYX_ERR(8, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__215);
  __Pyx_GIVEREF(__pyx_tuple__215);
  __pyx_codeobj__216 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__215, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Is_thread_main, 157, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__216)) __PYX_ERR(8, 157, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":166
 *     return <bint>flag
 * 
 * def Is_initialized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Init`` has been called
 */
  __pyx_tuple__217 = PyTuple_Pack(1, __pyx_n_s_flag); if (unlikely(!__pyx_tuple__217)) __PYX_ERR(8, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__217);
  __Pyx_GIVEREF(__pyx_tuple__217);
  __pyx_codeobj__218 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__217, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Is_initialized, 166, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__218)) __PYX_ERR(8, 166, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":174
 *     return <bint>flag
 * 
 * def Is_finalized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Finalize`` has completed
 */
  __pyx_tuple__219 = PyTuple_Pack(1, __pyx_n_s_flag); if (unlikely(!__pyx_tuple__219)) __PYX_ERR(8, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__219);
  __Pyx_GIVEREF(__pyx_tuple__219);
  __pyx_codeobj__220 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__219, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Is_finalized, 174, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__220)) __PYX_ERR(8, 174, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":191
 * SUBVERSION = MPI_SUBVERSION
 * 
 * def Get_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version number of the MPI standard supported
 */
  __pyx_tuple__221 = PyTuple_Pack(2, __pyx_n_s_version, __pyx_n_s_subversion); if (unlikely(!__pyx_tuple__221)) __PYX_ERR(8, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__221);
  __Pyx_GIVEREF(__pyx_tuple__221);
  __pyx_codeobj__222 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__221, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Get_version, 191, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__222)) __PYX_ERR(8, 191, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":201
 *     return (version, subversion)
 * 
 * def Get_library_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version string of the MPI library
 */
  __pyx_tuple__223 = PyTuple_Pack(2, __pyx_n_s_name_2, __pyx_n_s_nlen); if (unlikely(!__pyx_tuple__223)) __PYX_ERR(8, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__223);
  __Pyx_GIVEREF(__pyx_tuple__223);
  __pyx_codeobj__224 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__223, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Get_library_version, 201, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__224)) __PYX_ERR(8, 201, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":213
 * # ----------------------
 * 
 * def Get_processor_name():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the name of the calling processor
 */
  __pyx_tuple__225 = PyTuple_Pack(2, __pyx_n_s_name_2, __pyx_n_s_nlen); if (unlikely(!__pyx_tuple__225)) __PYX_ERR(8, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__225);
  __Pyx_GIVEREF(__pyx_tuple__225);
  __pyx_codeobj__226 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__225, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Get_processor_name, 213, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__226)) __PYX_ERR(8, 213, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":225
 * # --------------------------
 * 
 * def Wtime():             # <<<<<<<<<<<<<<
 *     """
 *     Return an elapsed time on the calling processor
 */
  __pyx_codeobj__227 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Wtime, 225, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__227)) __PYX_ERR(8, 225, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":231
 *     return MPI_Wtime()
 * 
 * def Wtick():             # <<<<<<<<<<<<<<
 *     """
 *     Return the resolution of ``Wtime``
 */
  __pyx_codeobj__228 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Wtick, 231, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__228)) __PYX_ERR(8, 231, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":240
 * # --------------------
 * 
 * def Pcontrol(int level):             # <<<<<<<<<<<<<<
 *     """
 *     Control profiling
 */
  __pyx_tuple__229 = PyTuple_Pack(1, __pyx_n_s_level); if (unlikely(!__pyx_tuple__229)) __PYX_ERR(8, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__229);
  __Pyx_GIVEREF(__pyx_tuple__229);
  __pyx_codeobj__230 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__229, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_Pcontrol, 240, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__230)) __PYX_ERR(8, 240, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":268
 *     int PyMPI_Get_vendor(const char**,int*,int*,int*) nogil
 * 
 * def get_vendor():             # <<<<<<<<<<<<<<
 *     """
 *     Infomation about the underlying MPI implementation
 */
  __pyx_tuple__231 = PyTuple_Pack(4, __pyx_n_s_name_2, __pyx_n_s_major, __pyx_n_s_minor, __pyx_n_s_micro); if (unlikely(!__pyx_tuple__231)) __PYX_ERR(8, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__231);
  __Pyx_GIVEREF(__pyx_tuple__231);
  __pyx_codeobj__232 = (PyObject*)__Pyx_PyCode_New(0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__231, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_get_vendor, 268, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__232)) __PYX_ERR(8, 268, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":294
 *     return 0
 * 
 * def _sizeof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Size in bytes of the underlying MPI handle
 */
  __pyx_tuple__233 = PyTuple_Pack(1, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__233)) __PYX_ERR(8, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__233);
  __Pyx_GIVEREF(__pyx_tuple__233);
  __pyx_codeobj__234 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__233, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_sizeof, 294, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__234)) __PYX_ERR(8, 294, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":311
 *     raise TypeError("expecting an MPI type or instance")
 * 
 * def _addressof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Memory address of the underlying MPI handle
 */
  __pyx_tuple__235 = PyTuple_Pack(2, __pyx_n_s_arg, __pyx_n_s_ptr); if (unlikely(!__pyx_tuple__235)) __PYX_ERR(8, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__235);
  __Pyx_GIVEREF(__pyx_tuple__235);
  __pyx_codeobj__236 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__235, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_addressof, 311, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__236)) __PYX_ERR(8, 311, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":342
 *     return PyLong_FromVoidPtr(ptr)
 * 
 * def _handleof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Unsigned integer value with the underlying MPI handle
 */
  __pyx_tuple__237 = PyTuple_Pack(1, __pyx_n_s_arg); if (unlikely(!__pyx_tuple__237)) __PYX_ERR(8, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__237);
  __Pyx_GIVEREF(__pyx_tuple__237);
  __pyx_codeobj__238 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__237, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_mpi4py_MPI_MPI_pyx, __pyx_n_s_handleof, 342, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__238)) __PYX_ERR(8, 342, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
  __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type;
  __pyx_umethod_PyDict_Type_items.type = (PyObject*)&PyDict_Type;
  __pyx_umethod_PyList_Type_index.type = (PyObject*)&PyList_Type;
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(32, 1, __pyx_L1_error);
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(32, 1, __pyx_L1_error)
  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(32, 1, __pyx_L1_error)
  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(32, 1, __pyx_L1_error)
  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(32, 1, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/

static int __Pyx_modinit_global_init_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __pyx_v_6mpi4py_3MPI_MPIException = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI__pypy_sentinel = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_array_array = ((PyTypeObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_numpy_array = ((PyTypeObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_op_user_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI__buffer = ((struct __pyx_obj_6mpi4py_3MPI_memory *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UNWEIGHTED__ = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__ = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_allocate_lock = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_lock_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_datarep_registry = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_type_keyval = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_comm_keyval = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_win_keyval = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___BOTTOM__ = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___IN_PLACE__ = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_PyPickle_dumps = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_PyPickle_loads = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_PyBytesIO_New = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_PyPickle_loadf = Py_None; Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_PyMPI_PICKLE = ((struct __pyx_obj_6mpi4py_3MPI_Pickle *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___ERRHANDLER_NULL__ = ((struct PyMPIErrhandlerObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___ERRORS_RETURN__ = ((struct PyMPIErrhandlerObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__ = ((struct PyMPIErrhandlerObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___DATATYPE_NULL__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UB__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LB__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___PACKED__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___BYTE__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___AINT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___OFFSET__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COUNT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___CHAR__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___WCHAR__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___SIGNED_CHAR__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___SHORT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LONG__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LONG_LONG__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UNSIGNED__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___FLOAT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___DOUBLE__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LONG_DOUBLE__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___C_BOOL__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INT8_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INT16_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INT32_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INT64_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UINT8_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UINT16_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UINT32_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___UINT64_T__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___C_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___CXX_BOOL__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___SHORT_INT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___TWOINT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LONG_INT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___FLOAT_INT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___DOUBLE_INT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___CHARACTER__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LOGICAL__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INTEGER__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REAL__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LOGICAL1__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LOGICAL2__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LOGICAL4__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LOGICAL8__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INTEGER1__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INTEGER2__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INTEGER4__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INTEGER8__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INTEGER16__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REAL2__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REAL4__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REAL8__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REAL16__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMPLEX4__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMPLEX8__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMPLEX16__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMPLEX32__ = ((struct PyMPIDatatypeObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_TypeDict = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_CTypeDict = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI_FTypeDict = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REQUEST_NULL__ = ((struct PyMPIRequestObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___MESSAGE_NULL__ = ((struct PyMPIMessageObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__ = ((struct PyMPIMessageObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INFO_NULL__ = ((struct PyMPIInfoObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___INFO_ENV__ = ((struct PyMPIInfoObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___OP_NULL__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___MAX__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___MIN__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___SUM__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___PROD__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LAND__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___BAND__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LOR__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___BOR__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___LXOR__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___BXOR__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___MAXLOC__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___MINLOC__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___REPLACE__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___NO_OP__ = ((struct PyMPIOpObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___GROUP_NULL__ = ((struct PyMPIGroupObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___GROUP_EMPTY__ = ((struct PyMPIGroupObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMM_NULL__ = ((struct PyMPICommObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMM_SELF__ = ((struct PyMPIIntracommObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMM_WORLD__ = ((struct PyMPIIntracommObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___COMM_PARENT__ = ((struct PyMPIIntercommObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___WIN_NULL__ = ((struct PyMPIWinObject *)Py_None); Py_INCREF(Py_None);
  __pyx_v_6mpi4py_3MPI___FILE_NULL__ = ((struct PyMPIFileObject *)Py_None); Py_INCREF(Py_None);
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  if (__Pyx_ExportFunction("PyMPIDatatype_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIDatatype_New, "PyObject *(MPI_Datatype)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIDatatype_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIDatatype_Get, "MPI_Datatype *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIStatus_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIStatus_New, "PyObject *(MPI_Status *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIStatus_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIStatus_Get, "MPI_Status *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIRequest_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIRequest_New, "PyObject *(MPI_Request)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIRequest_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIRequest_Get, "MPI_Request *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIMessage_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIMessage_New, "PyObject *(MPI_Message)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIMessage_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIMessage_Get, "MPI_Message *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIOp_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIOp_New, "PyObject *(MPI_Op)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIOp_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIOp_Get, "MPI_Op *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIInfo_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIInfo_New, "PyObject *(MPI_Info)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIInfo_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIInfo_Get, "MPI_Info *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIGroup_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIGroup_New, "PyObject *(MPI_Group)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIGroup_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIGroup_Get, "MPI_Group *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIComm_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIComm_New, "PyObject *(MPI_Comm)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIComm_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIComm_Get, "MPI_Comm *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIWin_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIWin_New, "PyObject *(MPI_Win)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIWin_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIWin_Get, "MPI_Win *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIFile_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIFile_New, "PyObject *(MPI_File)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIFile_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIFile_Get, "MPI_File *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIErrhandler_New", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIErrhandler_New, "PyObject *(MPI_Errhandler)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  if (__Pyx_ExportFunction("PyMPIErrhandler_Get", (void (*)(void))__pyx_f_6mpi4py_3MPI_PyMPIErrhandler_Get, "MPI_Errhandler *(PyObject *)") < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_init_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  if (PyType_Ready(&PyMPIStatus_Type) < 0) __PYX_ERR(24, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIStatus_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIStatus_Type.tp_dictoffset && PyMPIStatus_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIStatus_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Status, (PyObject *)&PyMPIStatus_Type) < 0) __PYX_ERR(24, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Status = &PyMPIStatus_Type;
  if (PyType_Ready(&PyMPIDatatype_Type) < 0) __PYX_ERR(21, 43, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIDatatype_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIDatatype_Type.tp_dictoffset && PyMPIDatatype_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIDatatype_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Datatype, (PyObject *)&PyMPIDatatype_Type) < 0) __PYX_ERR(21, 43, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Datatype = &PyMPIDatatype_Type;
  if (PyType_Ready(&PyMPIRequest_Type) < 0) __PYX_ERR(25, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIRequest_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIRequest_Type.tp_dictoffset && PyMPIRequest_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIRequest_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Request, (PyObject *)&PyMPIRequest_Type) < 0) __PYX_ERR(25, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Request = &PyMPIRequest_Type;
  PyMPIPrequest_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Request;
  if (PyType_Ready(&PyMPIPrequest_Type) < 0) __PYX_ERR(25, 283, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIPrequest_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIPrequest_Type.tp_dictoffset && PyMPIPrequest_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIPrequest_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Prequest, (PyObject *)&PyMPIPrequest_Type) < 0) __PYX_ERR(25, 283, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Prequest = &PyMPIPrequest_Type;
  PyMPIGrequest_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Request;
  if (PyType_Ready(&PyMPIGrequest_Type) < 0) __PYX_ERR(25, 315, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIGrequest_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIGrequest_Type.tp_dictoffset && PyMPIGrequest_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIGrequest_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Grequest, (PyObject *)&PyMPIGrequest_Type) < 0) __PYX_ERR(25, 315, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Grequest = &PyMPIGrequest_Type;
  if (PyType_Ready(&PyMPIMessage_Type) < 0) __PYX_ERR(26, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIMessage_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIMessage_Type.tp_dictoffset && PyMPIMessage_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIMessage_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Message, (PyObject *)&PyMPIMessage_Type) < 0) __PYX_ERR(26, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Message = &PyMPIMessage_Type;
  if (PyType_Ready(&PyMPIOp_Type) < 0) __PYX_ERR(28, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIOp_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIOp_Type.tp_dictoffset && PyMPIOp_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIOp_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Op, (PyObject *)&PyMPIOp_Type) < 0) __PYX_ERR(28, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Op = &PyMPIOp_Type;
  if (PyType_Ready(&PyMPIGroup_Type) < 0) __PYX_ERR(29, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIGroup_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIGroup_Type.tp_dictoffset && PyMPIGroup_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIGroup_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Group, (PyObject *)&PyMPIGroup_Type) < 0) __PYX_ERR(29, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Group = &PyMPIGroup_Type;
  if (PyType_Ready(&PyMPIInfo_Type) < 0) __PYX_ERR(27, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIInfo_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIInfo_Type.tp_dictoffset && PyMPIInfo_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIInfo_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Info, (PyObject *)&PyMPIInfo_Type) < 0) __PYX_ERR(27, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Info = &PyMPIInfo_Type;
  if (PyType_Ready(&PyMPIErrhandler_Type) < 0) __PYX_ERR(20, 1, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIErrhandler_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIErrhandler_Type.tp_dictoffset && PyMPIErrhandler_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIErrhandler_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Errhandler, (PyObject *)&PyMPIErrhandler_Type) < 0) __PYX_ERR(20, 1, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Errhandler = &PyMPIErrhandler_Type;
  if (PyType_Ready(&PyMPIComm_Type) < 0) __PYX_ERR(7, 31, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIComm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIComm_Type.tp_dictoffset && PyMPIComm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIComm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Comm, (PyObject *)&PyMPIComm_Type) < 0) __PYX_ERR(7, 31, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Comm = &PyMPIComm_Type;
  PyMPIIntracomm_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Comm;
  if (PyType_Ready(&PyMPIIntracomm_Type) < 0) __PYX_ERR(7, 1292, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIIntracomm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIIntracomm_Type.tp_dictoffset && PyMPIIntracomm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIIntracomm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Intracomm, (PyObject *)&PyMPIIntracomm_Type) < 0) __PYX_ERR(7, 1292, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Intracomm = &PyMPIIntracomm_Type;
  PyMPITopocomm_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Intracomm;
  if (PyType_Ready(&PyMPITopocomm_Type) < 0) __PYX_ERR(7, 1626, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPITopocomm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPITopocomm_Type.tp_dictoffset && PyMPITopocomm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPITopocomm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Topocomm, (PyObject *)&PyMPITopocomm_Type) < 0) __PYX_ERR(7, 1626, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Topocomm = &PyMPITopocomm_Type;
  PyMPICartcomm_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Topocomm;
  if (PyType_Ready(&PyMPICartcomm_Type) < 0) __PYX_ERR(7, 1841, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPICartcomm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPICartcomm_Type.tp_dictoffset && PyMPICartcomm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPICartcomm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Cartcomm, (PyObject *)&PyMPICartcomm_Type) < 0) __PYX_ERR(7, 1841, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Cartcomm = &PyMPICartcomm_Type;
  PyMPIGraphcomm_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Topocomm;
  if (PyType_Ready(&PyMPIGraphcomm_Type) < 0) __PYX_ERR(7, 1988, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIGraphcomm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIGraphcomm_Type.tp_dictoffset && PyMPIGraphcomm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIGraphcomm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Graphcomm, (PyObject *)&PyMPIGraphcomm_Type) < 0) __PYX_ERR(7, 1988, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Graphcomm = &PyMPIGraphcomm_Type;
  PyMPIDistgraphcomm_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Topocomm;
  if (PyType_Ready(&PyMPIDistgraphcomm_Type) < 0) __PYX_ERR(7, 2095, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIDistgraphcomm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIDistgraphcomm_Type.tp_dictoffset && PyMPIDistgraphcomm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIDistgraphcomm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Distgraphcomm, (PyObject *)&PyMPIDistgraphcomm_Type) < 0) __PYX_ERR(7, 2095, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Distgraphcomm = &PyMPIDistgraphcomm_Type;
  PyMPIIntercomm_Type.tp_base = __pyx_ptype_6mpi4py_3MPI_Comm;
  if (PyType_Ready(&PyMPIIntercomm_Type) < 0) __PYX_ERR(7, 2157, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIIntercomm_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIIntercomm_Type.tp_dictoffset && PyMPIIntercomm_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIIntercomm_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Intercomm, (PyObject *)&PyMPIIntercomm_Type) < 0) __PYX_ERR(7, 2157, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Intercomm = &PyMPIIntercomm_Type;
  if (PyType_Ready(&PyMPIWin_Type) < 0) __PYX_ERR(30, 27, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIWin_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIWin_Type.tp_dictoffset && PyMPIWin_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIWin_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Win, (PyObject *)&PyMPIWin_Type) < 0) __PYX_ERR(30, 27, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Win = &PyMPIWin_Type;
  if (PyType_Ready(&PyMPIFile_Type) < 0) __PYX_ERR(31, 51, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  PyMPIFile_Type.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!PyMPIFile_Type.tp_dictoffset && PyMPIFile_Type.tp_getattro == PyObject_GenericGetAttr)) {
    PyMPIFile_Type.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_File, (PyObject *)&PyMPIFile_Type) < 0) __PYX_ERR(31, 51, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_File = &PyMPIFile_Type;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI_memory) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI_memory.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI_memory.tp_dictoffset && __pyx_type_6mpi4py_3MPI_memory.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI_memory.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_memory, (PyObject *)&__pyx_type_6mpi4py_3MPI_memory) < 0) __PYX_ERR(0, 143, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_memory = &__pyx_type_6mpi4py_3MPI_memory;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_mem) < 0) __PYX_ERR(2, 13, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_mem.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_mem.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_mem.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_mem.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6mpi4py_3MPI__p_mem = &__pyx_type_6mpi4py_3MPI__p_mem;
  __pyx_vtabptr_6mpi4py_3MPI__p_greq = &__pyx_vtable_6mpi4py_3MPI__p_greq;
  __pyx_vtable_6mpi4py_3MPI__p_greq.query = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_greq *, MPI_Status *))__pyx_f_6mpi4py_3MPI_7_p_greq_query;
  __pyx_vtable_6mpi4py_3MPI__p_greq.free = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_greq *))__pyx_f_6mpi4py_3MPI_7_p_greq_free;
  __pyx_vtable_6mpi4py_3MPI__p_greq.cancel = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_greq *, int))__pyx_f_6mpi4py_3MPI_7_p_greq_cancel;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_greq) < 0) __PYX_ERR(13, 56, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_greq.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_greq.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_greq.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_greq.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_greq.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_greq) < 0) __PYX_ERR(13, 56, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_greq = &__pyx_type_6mpi4py_3MPI__p_greq;
  __pyx_vtabptr_6mpi4py_3MPI__p_datarep = &__pyx_vtable_6mpi4py_3MPI__p_datarep;
  __pyx_vtable_6mpi4py_3MPI__p_datarep.read = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, void *, MPI_Datatype, int, void *, MPI_Offset))__pyx_f_6mpi4py_3MPI_10_p_datarep_read;
  __pyx_vtable_6mpi4py_3MPI__p_datarep.write = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, void *, MPI_Datatype, int, void *, MPI_Offset))__pyx_f_6mpi4py_3MPI_10_p_datarep_write;
  __pyx_vtable_6mpi4py_3MPI__p_datarep.extent = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_datarep *, MPI_Datatype, MPI_Aint *))__pyx_f_6mpi4py_3MPI_10_p_datarep_extent;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_datarep) < 0) __PYX_ERR(16, 7, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_datarep.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_datarep.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_datarep.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_datarep.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_datarep.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_datarep) < 0) __PYX_ERR(16, 7, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_datarep = &__pyx_type_6mpi4py_3MPI__p_datarep;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_keyval) < 0) __PYX_ERR(4, 5, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_keyval.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_keyval.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_keyval.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_keyval.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6mpi4py_3MPI__p_keyval = &__pyx_type_6mpi4py_3MPI__p_keyval;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_message) < 0) __PYX_ERR(5, 64, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_message.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_message.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_message.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_message.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_6mpi4py_3MPI__p_message = &__pyx_type_6mpi4py_3MPI__p_message;
  __pyx_vtabptr_6mpi4py_3MPI__p_msg_p2p = &__pyx_vtable_6mpi4py_3MPI__p_msg_p2p;
  __pyx_vtable_6mpi4py_3MPI__p_msg_p2p.for_send = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_send;
  __pyx_vtable_6mpi4py_3MPI__p_msg_p2p.for_recv = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_p2p *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_p2p_for_recv;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_msg_p2p) < 0) __PYX_ERR(5, 364, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_msg_p2p.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_msg_p2p.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_msg_p2p.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_msg_p2p.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_msg_p2p.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_msg_p2p) < 0) __PYX_ERR(5, 364, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_msg_p2p = &__pyx_type_6mpi4py_3MPI__p_msg_p2p;
  __pyx_vtabptr_6mpi4py_3MPI__p_msg_cco = &__pyx_vtable_6mpi4py_3MPI__p_msg_cco;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_cco_send = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, int, int))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_send;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_cco_recv = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, int, int))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cco_recv;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_bcast = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_bcast;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_gather = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, int, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_gather;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_scatter = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, int, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scatter;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_allgather = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allgather;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_alltoall = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_alltoall;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_neighbor_allgather = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_allgather;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_neighbor_alltoall = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, int, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_neighbor_alltoall;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_cro_send = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_send;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_cro_recv = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_cro_recv;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_reduce = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, int, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_allreduce = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_allreduce;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_reduce_scatter_block = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter_block;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_reduce_scatter = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_reduce_scatter;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_scan = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_scan;
  __pyx_vtable_6mpi4py_3MPI__p_msg_cco.for_exscan = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_cco *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_10_p_msg_cco_for_exscan;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_msg_cco) < 0) __PYX_ERR(5, 408, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_msg_cco.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_msg_cco.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_msg_cco.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_msg_cco.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_msg_cco.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_msg_cco) < 0) __PYX_ERR(5, 408, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_msg_cco = &__pyx_type_6mpi4py_3MPI__p_msg_cco;
  __pyx_vtabptr_6mpi4py_3MPI__p_msg_ccow = &__pyx_vtable_6mpi4py_3MPI__p_msg_ccow;
  __pyx_vtable_6mpi4py_3MPI__p_msg_ccow.for_alltoallw = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_alltoallw;
  __pyx_vtable_6mpi4py_3MPI__p_msg_ccow.for_neighbor_alltoallw = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_ccow *, PyObject *, PyObject *, MPI_Comm))__pyx_f_6mpi4py_3MPI_11_p_msg_ccow_for_neighbor_alltoallw;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_msg_ccow) < 0) __PYX_ERR(5, 832, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_msg_ccow.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_msg_ccow.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_msg_ccow.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_msg_ccow.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_msg_ccow.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_msg_ccow) < 0) __PYX_ERR(5, 832, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_msg_ccow = &__pyx_type_6mpi4py_3MPI__p_msg_ccow;
  __pyx_vtabptr_6mpi4py_3MPI__p_msg_rma = &__pyx_vtable_6mpi4py_3MPI__p_msg_rma;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_rma = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, int, PyObject *, int, PyObject *))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_rma;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_put = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_put;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_get = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_acc = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int, PyObject *))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_acc;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.set_origin = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_origin;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.set_compare = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_compare;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.set_result = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, int))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_set_result;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_get_acc = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, int, PyObject *))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_get_acc;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_fetch_op = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, int, MPI_Aint))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_fetch_op;
  __pyx_vtable_6mpi4py_3MPI__p_msg_rma.for_cmp_swap = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_rma *, PyObject *, PyObject *, PyObject *, int, MPI_Aint))__pyx_f_6mpi4py_3MPI_10_p_msg_rma_for_cmp_swap;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_msg_rma) < 0) __PYX_ERR(5, 904, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_msg_rma.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_msg_rma.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_msg_rma.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_msg_rma.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_msg_rma.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_msg_rma) < 0) __PYX_ERR(5, 904, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_msg_rma = &__pyx_type_6mpi4py_3MPI__p_msg_rma;
  __pyx_vtabptr_6mpi4py_3MPI__p_msg_io = &__pyx_vtable_6mpi4py_3MPI__p_msg_io;
  __pyx_vtable_6mpi4py_3MPI__p_msg_io.for_read = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *, PyObject *))__pyx_f_6mpi4py_3MPI_9_p_msg_io_for_read;
  __pyx_vtable_6mpi4py_3MPI__p_msg_io.for_write = (int (*)(struct __pyx_obj_6mpi4py_3MPI__p_msg_io *, PyObject *))__pyx_f_6mpi4py_3MPI_9_p_msg_io_for_write;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI__p_msg_io) < 0) __PYX_ERR(5, 1058, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI__p_msg_io.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI__p_msg_io.tp_dictoffset && __pyx_type_6mpi4py_3MPI__p_msg_io.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI__p_msg_io.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI__p_msg_io.tp_dict, __pyx_vtabptr_6mpi4py_3MPI__p_msg_io) < 0) __PYX_ERR(5, 1058, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI__p_msg_io = &__pyx_type_6mpi4py_3MPI__p_msg_io;
  __pyx_vtabptr_6mpi4py_3MPI_Pickle = &__pyx_vtable_6mpi4py_3MPI_Pickle;
  __pyx_vtable_6mpi4py_3MPI_Pickle.cdumps = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *))__pyx_f_6mpi4py_3MPI_6Pickle_cdumps;
  __pyx_vtable_6mpi4py_3MPI_Pickle.cloads = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *))__pyx_f_6mpi4py_3MPI_6Pickle_cloads;
  __pyx_vtable_6mpi4py_3MPI_Pickle.dump = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *, void **, int *))__pyx_f_6mpi4py_3MPI_6Pickle_dump;
  __pyx_vtable_6mpi4py_3MPI_Pickle.load = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void *, int))__pyx_f_6mpi4py_3MPI_6Pickle_load;
  __pyx_vtable_6mpi4py_3MPI_Pickle.dumpv = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, PyObject *, void **, int, int *, int *))__pyx_f_6mpi4py_3MPI_6Pickle_dumpv;
  __pyx_vtable_6mpi4py_3MPI_Pickle.loadv = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void *, int, int *, int *))__pyx_f_6mpi4py_3MPI_6Pickle_loadv;
  __pyx_vtable_6mpi4py_3MPI_Pickle.alloc = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void **, int))__pyx_f_6mpi4py_3MPI_6Pickle_alloc;
  __pyx_vtable_6mpi4py_3MPI_Pickle.allocv = (PyObject *(*)(struct __pyx_obj_6mpi4py_3MPI_Pickle *, void **, int, int *, int *))__pyx_f_6mpi4py_3MPI_6Pickle_allocv;
  if (PyType_Ready(&__pyx_type_6mpi4py_3MPI_Pickle) < 0) __PYX_ERR(6, 44, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_6mpi4py_3MPI_Pickle.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_6mpi4py_3MPI_Pickle.tp_dictoffset && __pyx_type_6mpi4py_3MPI_Pickle.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_6mpi4py_3MPI_Pickle.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  if (__Pyx_SetVtable(__pyx_type_6mpi4py_3MPI_Pickle.tp_dict, __pyx_vtabptr_6mpi4py_3MPI_Pickle) < 0) __PYX_ERR(6, 44, __pyx_L1_error)
  __pyx_ptype_6mpi4py_3MPI_Pickle = &__pyx_type_6mpi4py_3MPI_Pickle;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_import_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_import_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
  /*--- Variable import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_import_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}


#if PY_MAJOR_VERSION < 3
#ifdef CYTHON_NO_PYINIT_EXPORT
#define __Pyx_PyMODINIT_FUNC void
#else
#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#endif
#else
#ifdef CYTHON_NO_PYINIT_EXPORT
#define __Pyx_PyMODINIT_FUNC PyObject *
#else
#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#endif
#endif


#if PY_MAJOR_VERSION < 3
__Pyx_PyMODINIT_FUNC initMPI(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC initMPI(void)
#else
__Pyx_PyMODINIT_FUNC PyInit_MPI(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit_MPI(void)
#if CYTHON_PEP489_MULTI_PHASE_INIT
{
  return PyModuleDef_Init(&__pyx_moduledef);
}
static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
    #if PY_VERSION_HEX >= 0x030700A1
    static PY_INT64_T main_interpreter_id = -1;
    PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
    if (main_interpreter_id == -1) {
        main_interpreter_id = current_id;
        return (unlikely(current_id == -1)) ? -1 : 0;
    } else if (unlikely(main_interpreter_id != current_id))
    #else
    static PyInterpreterState *main_interpreter = NULL;
    PyInterpreterState *current_interpreter = PyThreadState_Get()->interp;
    if (!main_interpreter) {
        main_interpreter = current_interpreter;
    } else if (unlikely(main_interpreter != current_interpreter))
    #endif
    {
        PyErr_SetString(
            PyExc_ImportError,
            "Interpreter change detected - this module can only be loaded into one interpreter per process.");
        return -1;
    }
    return 0;
}
static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) {
    PyObject *value = PyObject_GetAttrString(spec, from_name);
    int result = 0;
    if (likely(value)) {
        if (allow_none || value != Py_None) {
            result = PyDict_SetItemString(moddict, to_name, value);
        }
        Py_DECREF(value);
    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Clear();
    } else {
        result = -1;
    }
    return result;
}
static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
    PyObject *module = NULL, *moddict, *modname;
    if (__Pyx_check_single_interpreter())
        return NULL;
    if (__pyx_m)
        return __Pyx_NewRef(__pyx_m);
    modname = PyObject_GetAttrString(spec, "name");
    if (unlikely(!modname)) goto bad;
    module = PyModule_NewObject(modname);
    Py_DECREF(modname);
    if (unlikely(!module)) goto bad;
    moddict = PyModule_GetDict(module);
    if (unlikely(!moddict)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
    return module;
bad:
    Py_XDECREF(module);
    return NULL;
}


static CYTHON_SMALL_CODE int __pyx_pymod_exec_MPI(PyObject *__pyx_pyinit_module)
#endif
#endif
{
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  int __pyx_t_23;
  __Pyx_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module 'MPI' has already been imported. Re-initialisation is not supported.");
    return -1;
  }
  #elif PY_MAJOR_VERSION >= 3
  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
  #endif
  #if CYTHON_REFNANNY
__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
if (!__Pyx_RefNanny) {
  PyErr_Clear();
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
  if (!__Pyx_RefNanny)
      Py_FatalError("failed to import 'refnanny' module");
}
#endif
  __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_MPI(void)", 0);
  if (__Pyx_check_binary_version() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #ifdef __Pxy_PyFrame_Initialize_Offsets
  __Pxy_PyFrame_Initialize_Offsets();
  #endif
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(32, 1, __pyx_L1_error)
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(32, 1, __pyx_L1_error)
  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(32, 1, __pyx_L1_error)
  #ifdef __Pyx_CyFunction_USED
  if (__pyx_CyFunction_init() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Coroutine_USED
  if (__pyx_Coroutine_init() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_AsyncGen_USED
  if (__pyx_AsyncGen_init() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_StopAsyncIteration_USED
  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __pyx_m = __pyx_pyinit_module;
  Py_INCREF(__pyx_m);
  #else
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4("MPI", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (unlikely(!__pyx_m)) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(32, 1, __pyx_L1_error)
  Py_INCREF(__pyx_d);
  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(32, 1, __pyx_L1_error)
  Py_INCREF(__pyx_b);
  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(32, 1, __pyx_L1_error)
  Py_INCREF(__pyx_cython_runtime);
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(32, 1, __pyx_L1_error);
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitGlobals() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif
  if (__pyx_module_is_main_mpi4py__MPI) {
    if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  }
  #if PY_MAJOR_VERSION >= 3
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(32, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "mpi4py.MPI")) {
      if (unlikely(PyDict_SetItemString(modules, "mpi4py.MPI", __pyx_m) < 0)) __PYX_ERR(32, 1, __pyx_L1_error)
    }
  }
  #endif
  /*--- Builtin init code ---*/
  if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error;
  /*--- Constants init code ---*/
  if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error;
  /*--- Global type/function init code ---*/
  (void)__Pyx_modinit_global_init_code();
  (void)__Pyx_modinit_variable_export_code();
  if (unlikely(__Pyx_modinit_function_export_code() != 0)) goto __pyx_L1_error;
  if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error;
  (void)__Pyx_modinit_type_import_code();
  (void)__Pyx_modinit_variable_import_code();
  (void)__Pyx_modinit_function_import_code();
  /*--- Execution code ---*/
  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
  if (__Pyx_patch_abc() < 0) __PYX_ERR(32, 1, __pyx_L1_error)
  #endif

  /* "mpi4py/MPI/MPI.pyx":1
 * __doc__ = """             # <<<<<<<<<<<<<<
 * Message Passing Interface
 * """
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_s_Message_Passing_Interface) < 0) __PYX_ERR(8, 1, __pyx_L1_error)

  /* "mpi4py/MPI/atimport.pxi":37
 * 
 * cdef Options options
 * options.initialize = 1             # <<<<<<<<<<<<<<
 * options.threads = 1
 * options.thread_level = MPI_THREAD_MULTIPLE
 */
  __pyx_v_6mpi4py_3MPI_options.initialize = 1;

  /* "mpi4py/MPI/atimport.pxi":38
 * cdef Options options
 * options.initialize = 1
 * options.threads = 1             # <<<<<<<<<<<<<<
 * options.thread_level = MPI_THREAD_MULTIPLE
 * options.finalize = 1
 */
  __pyx_v_6mpi4py_3MPI_options.threads = 1;

  /* "mpi4py/MPI/atimport.pxi":39
 * options.initialize = 1
 * options.threads = 1
 * options.thread_level = MPI_THREAD_MULTIPLE             # <<<<<<<<<<<<<<
 * options.finalize = 1
 * options.fast_reduce = 1
 */
  __pyx_v_6mpi4py_3MPI_options.thread_level = MPI_THREAD_MULTIPLE;

  /* "mpi4py/MPI/atimport.pxi":40
 * options.threads = 1
 * options.thread_level = MPI_THREAD_MULTIPLE
 * options.finalize = 1             # <<<<<<<<<<<<<<
 * options.fast_reduce = 1
 * options.recv_mprobe = 1
 */
  __pyx_v_6mpi4py_3MPI_options.finalize = 1;

  /* "mpi4py/MPI/atimport.pxi":41
 * options.thread_level = MPI_THREAD_MULTIPLE
 * options.finalize = 1
 * options.fast_reduce = 1             # <<<<<<<<<<<<<<
 * options.recv_mprobe = 1
 * options.errors = 1
 */
  __pyx_v_6mpi4py_3MPI_options.fast_reduce = 1;

  /* "mpi4py/MPI/atimport.pxi":42
 * options.finalize = 1
 * options.fast_reduce = 1
 * options.recv_mprobe = 1             # <<<<<<<<<<<<<<
 * options.errors = 1
 * 
 */
  __pyx_v_6mpi4py_3MPI_options.recv_mprobe = 1;

  /* "mpi4py/MPI/atimport.pxi":43
 * options.fast_reduce = 1
 * options.recv_mprobe = 1
 * options.errors = 1             # <<<<<<<<<<<<<<
 * 
 * cdef int warnOpt(object name, object value) except -1:
 */
  __pyx_v_6mpi4py_3MPI_options.errors = 1;

  /* "mpi4py/MPI/atimport.pxi":203
 *     <void>PyMPI_Commctx_finalize()
 * 
 * cdef int abort_status = 0             # <<<<<<<<<<<<<<
 * 
 * cdef void atexit() nogil:
 */
  __pyx_v_6mpi4py_3MPI_abort_status = 0;

  /* "mpi4py/MPI/atimport.pxi":213
 *         <void>MPI_Finalize()
 * 
 * def _set_abort_status(object status):             # <<<<<<<<<<<<<<
 *     "Helper for ``python -m mpi4py.run ...``"
 *     global abort_status
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_1_set_abort_status, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_abort_status, __pyx_t_1) < 0) __PYX_ERR(9, 213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/atimport.pxi":233
 *     void *PyExc_NotImplementedError
 * 
 * cdef object MPIException = <object>PyExc_RuntimeError             # <<<<<<<<<<<<<<
 * 
 * cdef int PyMPI_Raise(int ierr) except -1 with gil:
 */
  __pyx_t_1 = ((PyObject *)PyExc_RuntimeError);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_MPIException);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_MPIException, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/atimport.pxi":264
 *     int _Py_IsInitialized"Py_IsInitialized"() nogil
 * 
 * cdef object _pypy_sentinel = None             # <<<<<<<<<<<<<<
 * 
 * cdef inline int Py_IsInitialized() nogil:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI__pypy_sentinel);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI__pypy_sentinel, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/MPI.pyx":10
 * include "atimport.pxi"
 * 
 * bootstrap()             # <<<<<<<<<<<<<<
 * initialize()
 * 
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_bootstrap(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 10, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":11
 * 
 * bootstrap()
 * initialize()             # <<<<<<<<<<<<<<
 * 
 * include "asstring.pxi"
 */
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_initialize(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(8, 11, __pyx_L1_error)

  /* "mpi4py/MPI/asbuffer.pxi":53
 * 
 * cdef char BYTE_FMT[2]
 * BYTE_FMT[0] = c'B'             # <<<<<<<<<<<<<<
 * BYTE_FMT[1] = 0
 * 
 */
  (__pyx_v_6mpi4py_3MPI_BYTE_FMT[0]) = 'B';

  /* "mpi4py/MPI/asbuffer.pxi":54
 * cdef char BYTE_FMT[2]
 * BYTE_FMT[0] = c'B'
 * BYTE_FMT[1] = 0             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  (__pyx_v_6mpi4py_3MPI_BYTE_FMT[1]) = 0;

  /* "mpi4py/MPI/asbuffer.pxi":64
 * cdef type array_array
 * cdef type numpy_array
 * cdef int  pypy_have_numpy = 0             # <<<<<<<<<<<<<<
 * if PYPY:
 *     from array import array as array_array
 */
  __pyx_v_6mpi4py_3MPI_pypy_have_numpy = 0;

  /* "mpi4py/MPI/asbuffer.pxi":65
 * cdef type numpy_array
 * cdef int  pypy_have_numpy = 0
 * if PYPY:             # <<<<<<<<<<<<<<
 *     from array import array as array_array
 *     try:
 */
  if (PyMPI_RUNTIME_PYPY) {

    /* "mpi4py/MPI/asbuffer.pxi":66
 * cdef int  pypy_have_numpy = 0
 * if PYPY:
 *     from array import array as array_array             # <<<<<<<<<<<<<<
 *     try:
 *         from _numpypy.multiarray import ndarray as numpy_array
 */
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_array);
    __Pyx_GIVEREF(__pyx_n_s_array);
    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_array);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_array, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(PyType_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 66, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI_array_array));
    __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_array_array, ((PyTypeObject*)__pyx_t_1));
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/asbuffer.pxi":67
 * if PYPY:
 *     from array import array as array_array
 *     try:             # <<<<<<<<<<<<<<
 *         from _numpypy.multiarray import ndarray as numpy_array
 *         pypy_have_numpy = 1
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "mpi4py/MPI/asbuffer.pxi":68
 *     from array import array as array_array
 *     try:
 *         from _numpypy.multiarray import ndarray as numpy_array             # <<<<<<<<<<<<<<
 *         pypy_have_numpy = 1
 *     except ImportError:
 */
        __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_n_s_ndarray);
        __Pyx_GIVEREF(__pyx_n_s_ndarray);
        PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_ndarray);
        __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpypy_multiarray, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (!(likely(PyType_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 68, __pyx_L3_error)
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI_numpy_array));
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_numpy_array, ((PyTypeObject*)__pyx_t_3));
        __Pyx_GIVEREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "mpi4py/MPI/asbuffer.pxi":69
 *     try:
 *         from _numpypy.multiarray import ndarray as numpy_array
 *         pypy_have_numpy = 1             # <<<<<<<<<<<<<<
 *     except ImportError:
 *         try:
 */
        __pyx_v_6mpi4py_3MPI_pypy_have_numpy = 1;

        /* "mpi4py/MPI/asbuffer.pxi":67
 * if PYPY:
 *     from array import array as array_array
 *     try:             # <<<<<<<<<<<<<<
 *         from _numpypy.multiarray import ndarray as numpy_array
 *         pypy_have_numpy = 1
 */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L8_try_end;
      __pyx_L3_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "mpi4py/MPI/asbuffer.pxi":70
 *         from _numpypy.multiarray import ndarray as numpy_array
 *         pypy_have_numpy = 1
 *     except ImportError:             # <<<<<<<<<<<<<<
 *         try:
 *             from numpypy import ndarray as numpy_array
 */
      __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_2) {
        __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_3, &__pyx_t_9) < 0) __PYX_ERR(0, 70, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_9);

        /* "mpi4py/MPI/asbuffer.pxi":71
 *         pypy_have_numpy = 1
 *     except ImportError:
 *         try:             # <<<<<<<<<<<<<<
 *             from numpypy import ndarray as numpy_array
 *             pypy_have_numpy = 1
 */
        {
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_10);
          __Pyx_XGOTREF(__pyx_t_11);
          __Pyx_XGOTREF(__pyx_t_12);
          /*try:*/ {

            /* "mpi4py/MPI/asbuffer.pxi":72
 *     except ImportError:
 *         try:
 *             from numpypy import ndarray as numpy_array             # <<<<<<<<<<<<<<
 *             pypy_have_numpy = 1
 *         except ImportError:
 */
            __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 72, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_INCREF(__pyx_n_s_ndarray);
            __Pyx_GIVEREF(__pyx_n_s_ndarray);
            PyList_SET_ITEM(__pyx_t_13, 0, __pyx_n_s_ndarray);
            __pyx_t_14 = __Pyx_Import(__pyx_n_s_numpypy, __pyx_t_13, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 72, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_t_13 = __Pyx_ImportFrom(__pyx_t_14, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 72, __pyx_L11_error)
            __Pyx_GOTREF(__pyx_t_13);
            if (!(likely(PyType_CheckExact(__pyx_t_13))||((__pyx_t_13) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_13)->tp_name), 0))) __PYX_ERR(0, 72, __pyx_L11_error)
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI_numpy_array));
            __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_numpy_array, ((PyTypeObject*)__pyx_t_13));
            __Pyx_GIVEREF(__pyx_t_13);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;

            /* "mpi4py/MPI/asbuffer.pxi":73
 *         try:
 *             from numpypy import ndarray as numpy_array
 *             pypy_have_numpy = 1             # <<<<<<<<<<<<<<
 *         except ImportError:
 *             try:
 */
            __pyx_v_6mpi4py_3MPI_pypy_have_numpy = 1;

            /* "mpi4py/MPI/asbuffer.pxi":71
 *         pypy_have_numpy = 1
 *     except ImportError:
 *         try:             # <<<<<<<<<<<<<<
 *             from numpypy import ndarray as numpy_array
 *             pypy_have_numpy = 1
 */
          }
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          goto __pyx_L18_try_end;
          __pyx_L11_error:;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;

          /* "mpi4py/MPI/asbuffer.pxi":74
 *             from numpypy import ndarray as numpy_array
 *             pypy_have_numpy = 1
 *         except ImportError:             # <<<<<<<<<<<<<<
 *             try:
 *                 from numpy import ndarray as numpy_array
 */
          __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
          if (__pyx_t_2) {
            __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_16) < 0) __PYX_ERR(0, 74, __pyx_L13_except_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_GOTREF(__pyx_t_16);

            /* "mpi4py/MPI/asbuffer.pxi":75
 *             pypy_have_numpy = 1
 *         except ImportError:
 *             try:             # <<<<<<<<<<<<<<
 *                 from numpy import ndarray as numpy_array
 *                 pypy_have_numpy = 1
 */
            {
              __Pyx_PyThreadState_declare
              __Pyx_PyThreadState_assign
              __Pyx_ExceptionSave(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
              __Pyx_XGOTREF(__pyx_t_17);
              __Pyx_XGOTREF(__pyx_t_18);
              __Pyx_XGOTREF(__pyx_t_19);
              /*try:*/ {

                /* "mpi4py/MPI/asbuffer.pxi":76
 *         except ImportError:
 *             try:
 *                 from numpy import ndarray as numpy_array             # <<<<<<<<<<<<<<
 *                 pypy_have_numpy = 1
 *             except ImportError:
 */
                __pyx_t_20 = PyList_New(1); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 76, __pyx_L21_error)
                __Pyx_GOTREF(__pyx_t_20);
                __Pyx_INCREF(__pyx_n_s_ndarray);
                __Pyx_GIVEREF(__pyx_n_s_ndarray);
                PyList_SET_ITEM(__pyx_t_20, 0, __pyx_n_s_ndarray);
                __pyx_t_21 = __Pyx_Import(__pyx_n_s_numpy, __pyx_t_20, 0); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 76, __pyx_L21_error)
                __Pyx_GOTREF(__pyx_t_21);
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                __pyx_t_20 = __Pyx_ImportFrom(__pyx_t_21, __pyx_n_s_ndarray); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 76, __pyx_L21_error)
                __Pyx_GOTREF(__pyx_t_20);
                if (!(likely(PyType_CheckExact(__pyx_t_20))||((__pyx_t_20) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "type", Py_TYPE(__pyx_t_20)->tp_name), 0))) __PYX_ERR(0, 76, __pyx_L21_error)
                __Pyx_INCREF(__pyx_t_20);
                __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI_numpy_array));
                __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_numpy_array, ((PyTypeObject*)__pyx_t_20));
                __Pyx_GIVEREF(__pyx_t_20);
                __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;

                /* "mpi4py/MPI/asbuffer.pxi":77
 *             try:
 *                 from numpy import ndarray as numpy_array
 *                 pypy_have_numpy = 1             # <<<<<<<<<<<<<<
 *             except ImportError:
 *                 pass
 */
                __pyx_v_6mpi4py_3MPI_pypy_have_numpy = 1;

                /* "mpi4py/MPI/asbuffer.pxi":75
 *             pypy_have_numpy = 1
 *         except ImportError:
 *             try:             # <<<<<<<<<<<<<<
 *                 from numpy import ndarray as numpy_array
 *                 pypy_have_numpy = 1
 */
              }
              __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
              __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
              __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
              goto __pyx_L28_try_end;
              __pyx_L21_error:;
              __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
              __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;

              /* "mpi4py/MPI/asbuffer.pxi":78
 *                 from numpy import ndarray as numpy_array
 *                 pypy_have_numpy = 1
 *             except ImportError:             # <<<<<<<<<<<<<<
 *                 pass
 * 
 */
              __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
              if (__pyx_t_2) {
                __Pyx_ErrRestore(0,0,0);
                goto __pyx_L22_exception_handled;
              }
              goto __pyx_L23_except_error;
              __pyx_L23_except_error:;

              /* "mpi4py/MPI/asbuffer.pxi":75
 *             pypy_have_numpy = 1
 *         except ImportError:
 *             try:             # <<<<<<<<<<<<<<
 *                 from numpy import ndarray as numpy_array
 *                 pypy_have_numpy = 1
 */
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
              goto __pyx_L13_except_error;
              __pyx_L22_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_XGIVEREF(__pyx_t_19);
              __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
              __pyx_L28_try_end:;
            }
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            goto __pyx_L12_exception_handled;
          }
          goto __pyx_L13_except_error;
          __pyx_L13_except_error:;

          /* "mpi4py/MPI/asbuffer.pxi":71
 *         pypy_have_numpy = 1
 *     except ImportError:
 *         try:             # <<<<<<<<<<<<<<
 *             from numpypy import ndarray as numpy_array
 *             pypy_have_numpy = 1
 */
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
          goto __pyx_L5_except_error;
          __pyx_L12_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
          __pyx_L18_try_end:;
        }
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L4_exception_handled;
      }
      goto __pyx_L5_except_error;
      __pyx_L5_except_error:;

      /* "mpi4py/MPI/asbuffer.pxi":67
 * if PYPY:
 *     from array import array as array_array
 *     try:             # <<<<<<<<<<<<<<
 *         from _numpypy.multiarray import ndarray as numpy_array
 *         pypy_have_numpy = 1
 */
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L4_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_L8_try_end:;
    }

    /* "mpi4py/MPI/asbuffer.pxi":65
 * cdef type numpy_array
 * cdef int  pypy_have_numpy = 0
 * if PYPY:             # <<<<<<<<<<<<<<
 *     from array import array as array_array
 *     try:
 */
  }

  /* "mpi4py/MPI/asbuffer.pxi":159
 * 
 *     @staticmethod
 *     def frombuffer(obj, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from buffer-like object"""
 *         cdef int flags = PyBUF_SIMPLE
 */
  __pyx_t_9 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_6memory_5frombuffer, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_memory->tp_dict, __pyx_n_s_frombuffer, __pyx_t_9) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_memory);

  /* "mpi4py/MPI/asbuffer.pxi":158
 *         PyBuffer_Release(&self.view)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def frombuffer(obj, bint readonly=False):
 *         """Memory from buffer-like object"""
 */
  __Pyx_GetNameInClass(__pyx_t_9, (PyObject *)__pyx_ptype_6mpi4py_3MPI_memory, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_memory->tp_dict, __pyx_n_s_frombuffer, __pyx_t_3) < 0) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_memory);

  /* "mpi4py/MPI/asbuffer.pxi":169
 * 
 *     @staticmethod
 *     def fromaddress(address, nbytes, bint readonly=False):             # <<<<<<<<<<<<<<
 *         """Memory from address and size in bytes"""
 *         cdef void *buf = PyLong_AsVoidPtr(address)
 */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_6memory_7fromaddress, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_memory->tp_dict, __pyx_n_s_fromaddress, __pyx_t_3) < 0) __PYX_ERR(0, 169, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_memory);

  /* "mpi4py/MPI/asbuffer.pxi":168
 *         return mem
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def fromaddress(address, nbytes, bint readonly=False):
 *         """Memory from address and size in bytes"""
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_memory, __pyx_n_s_fromaddress); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_memory->tp_dict, __pyx_n_s_fromaddress, __pyx_t_9) < 0) __PYX_ERR(0, 169, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_memory);

  /* "mpi4py/MPI/reqimpl.pxi":4
 * 
 * cdef MPI_Status empty_status
 * empty_status.MPI_SOURCE = MPI_ANY_SOURCE             # <<<<<<<<<<<<<<
 * empty_status.MPI_TAG = MPI_ANY_TAG
 * empty_status.MPI_ERROR  = MPI_SUCCESS
 */
  __pyx_v_6mpi4py_3MPI_empty_status.MPI_SOURCE = MPI_ANY_SOURCE;

  /* "mpi4py/MPI/reqimpl.pxi":5
 * cdef MPI_Status empty_status
 * empty_status.MPI_SOURCE = MPI_ANY_SOURCE
 * empty_status.MPI_TAG = MPI_ANY_TAG             # <<<<<<<<<<<<<<
 * empty_status.MPI_ERROR  = MPI_SUCCESS
 * 
 */
  __pyx_v_6mpi4py_3MPI_empty_status.MPI_TAG = MPI_ANY_TAG;

  /* "mpi4py/MPI/reqimpl.pxi":6
 * empty_status.MPI_SOURCE = MPI_ANY_SOURCE
 * empty_status.MPI_TAG = MPI_ANY_TAG
 * empty_status.MPI_ERROR  = MPI_SUCCESS             # <<<<<<<<<<<<<<
 * 
 * cdef object acquire_rs(object requests,
 */
  __pyx_v_6mpi4py_3MPI_empty_status.MPI_ERROR = MPI_SUCCESS;

  /* "mpi4py/MPI/opimpl.pxi":87
 * # -----------------------------------------------------------------------------
 * 
 * cdef list op_user_registry = [None]*(1+32)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object op_user_py(int index, object x, object y, object dt):
 */
  __pyx_t_9 = PyList_New(1 * 33); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  { Py_ssize_t __pyx_temp;
    for (__pyx_temp=0; __pyx_temp < 33; __pyx_temp++) {
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyList_SET_ITEM(__pyx_t_9, __pyx_temp, Py_None);
    }
  }
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_op_user_registry);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_op_user_registry, ((PyObject*)__pyx_t_9));
  __Pyx_GIVEREF(__pyx_t_9);
  __pyx_t_9 = 0;

  /* "mpi4py/MPI/commimpl.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef memory _buffer = None             # <<<<<<<<<<<<<<
 * 
 * cdef inline int attach_buffer(ob, void **p, int *n) except -1:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI__buffer));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI__buffer, ((struct __pyx_obj_6mpi4py_3MPI_memory *)Py_None));
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/commimpl.pxi":30
 * # -----------------------------------------------------------------------------
 * 
 * cdef object __UNWEIGHTED__    = <MPI_Aint>MPI_UNWEIGHTED             # <<<<<<<<<<<<<<
 * 
 * cdef object __WEIGHTS_EMPTY__ = <MPI_Aint>MPI_WEIGHTS_EMPTY
 */
  __pyx_t_9 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)MPI_UNWEIGHTED)); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI___UNWEIGHTED__);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UNWEIGHTED__, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_9);
  __pyx_t_9 = 0;

  /* "mpi4py/MPI/commimpl.pxi":32
 * cdef object __UNWEIGHTED__    = <MPI_Aint>MPI_UNWEIGHTED
 * 
 * cdef object __WEIGHTS_EMPTY__ = <MPI_Aint>MPI_WEIGHTS_EMPTY             # <<<<<<<<<<<<<<
 * 
 * cdef object asarray_weights(object weights, int nweight, int **iweight):
 */
  __pyx_t_9 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)MPI_WEIGHTS_EMPTY)); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_9);
  __pyx_t_9 = 0;

  /* "mpi4py/MPI/commimpl.pxi":77
 * # -----------------------------------------------------------------------------
 * 
 * cdef object allocate_lock = None             # <<<<<<<<<<<<<<
 * if PY3:
 *     try:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_allocate_lock);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_allocate_lock, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/commimpl.pxi":78
 * 
 * cdef object allocate_lock = None
 * if PY3:             # <<<<<<<<<<<<<<
 *     try:
 *         from _thread import allocate_lock
 */
  if ((PY_MAJOR_VERSION>=3)) {

    /* "mpi4py/MPI/commimpl.pxi":79
 * cdef object allocate_lock = None
 * if PY3:
 *     try:             # <<<<<<<<<<<<<<
 *         from _thread import allocate_lock
 *     except ImportError:
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "mpi4py/MPI/commimpl.pxi":80
 * if PY3:
 *     try:
 *         from _thread import allocate_lock             # <<<<<<<<<<<<<<
 *     except ImportError:
 *         from _dummy_thread import allocate_lock
 */
        __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 80, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_n_s_allocate_lock);
        __Pyx_GIVEREF(__pyx_n_s_allocate_lock);
        PyList_SET_ITEM(__pyx_t_9, 0, __pyx_n_s_allocate_lock);
        __pyx_t_3 = __Pyx_Import(__pyx_n_s_thread, __pyx_t_9, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 80, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_allocate_lock); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 80, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_allocate_lock);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_allocate_lock, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

        /* "mpi4py/MPI/commimpl.pxi":79
 * cdef object allocate_lock = None
 * if PY3:
 *     try:             # <<<<<<<<<<<<<<
 *         from _thread import allocate_lock
 *     except ImportError:
 */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L35_try_end;
      __pyx_L30_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/commimpl.pxi":81
 *     try:
 *         from _thread import allocate_lock
 *     except ImportError:             # <<<<<<<<<<<<<<
 *         from _dummy_thread import allocate_lock
 * else:
 */
      __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_2) {
        __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_9, &__pyx_t_1) < 0) __PYX_ERR(3, 81, __pyx_L32_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_1);

        /* "mpi4py/MPI/commimpl.pxi":82
 *         from _thread import allocate_lock
 *     except ImportError:
 *         from _dummy_thread import allocate_lock             # <<<<<<<<<<<<<<
 * else:
 *     try:
 */
        __pyx_t_16 = PyList_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(3, 82, __pyx_L32_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_n_s_allocate_lock);
        __Pyx_GIVEREF(__pyx_n_s_allocate_lock);
        PyList_SET_ITEM(__pyx_t_16, 0, __pyx_n_s_allocate_lock);
        __pyx_t_13 = __Pyx_Import(__pyx_n_s_dummy_thread, __pyx_t_16, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 82, __pyx_L32_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = __Pyx_ImportFrom(__pyx_t_13, __pyx_n_s_allocate_lock); if (unlikely(!__pyx_t_16)) __PYX_ERR(3, 82, __pyx_L32_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_allocate_lock);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_allocate_lock, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L31_exception_handled;
      }
      goto __pyx_L32_except_error;
      __pyx_L32_except_error:;

      /* "mpi4py/MPI/commimpl.pxi":79
 * cdef object allocate_lock = None
 * if PY3:
 *     try:             # <<<<<<<<<<<<<<
 *         from _thread import allocate_lock
 *     except ImportError:
 */
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L31_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_L35_try_end:;
    }

    /* "mpi4py/MPI/commimpl.pxi":78
 * 
 * cdef object allocate_lock = None
 * if PY3:             # <<<<<<<<<<<<<<
 *     try:
 *         from _thread import allocate_lock
 */
    goto __pyx_L29;
  }

  /* "mpi4py/MPI/commimpl.pxi":84
 *         from _dummy_thread import allocate_lock
 * else:
 *     try:             # <<<<<<<<<<<<<<
 *         from thread  import allocate_lock
 *     except ImportError:
 */
  /*else*/ {
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "mpi4py/MPI/commimpl.pxi":85
 * else:
 *     try:
 *         from thread  import allocate_lock             # <<<<<<<<<<<<<<
 *     except ImportError:
 *         from dummy_thread import allocate_lock
 */
        __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 85, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_n_s_allocate_lock);
        __Pyx_GIVEREF(__pyx_n_s_allocate_lock);
        PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_allocate_lock);
        __pyx_t_9 = __Pyx_Import(__pyx_n_s_thread_2, __pyx_t_1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 85, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_9, __pyx_n_s_allocate_lock); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 85, __pyx_L38_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_allocate_lock);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_allocate_lock, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

        /* "mpi4py/MPI/commimpl.pxi":84
 *         from _dummy_thread import allocate_lock
 * else:
 *     try:             # <<<<<<<<<<<<<<
 *         from thread  import allocate_lock
 *     except ImportError:
 */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L43_try_end;
      __pyx_L38_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/commimpl.pxi":86
 *     try:
 *         from thread  import allocate_lock
 *     except ImportError:             # <<<<<<<<<<<<<<
 *         from dummy_thread import allocate_lock
 * 
 */
      __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_2) {
        __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(3, 86, __pyx_L40_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_3);

        /* "mpi4py/MPI/commimpl.pxi":87
 *         from thread  import allocate_lock
 *     except ImportError:
 *         from dummy_thread import allocate_lock             # <<<<<<<<<<<<<<
 * 
 * cdef int  lock_keyval   = MPI_KEYVAL_INVALID
 */
        __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 87, __pyx_L40_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_n_s_allocate_lock);
        __Pyx_GIVEREF(__pyx_n_s_allocate_lock);
        PyList_SET_ITEM(__pyx_t_13, 0, __pyx_n_s_allocate_lock);
        __pyx_t_16 = __Pyx_Import(__pyx_n_s_dummy_thread_2, __pyx_t_13, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(3, 87, __pyx_L40_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = __Pyx_ImportFrom(__pyx_t_16, __pyx_n_s_allocate_lock); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 87, __pyx_L40_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_allocate_lock);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_allocate_lock, __pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L39_exception_handled;
      }
      goto __pyx_L40_except_error;
      __pyx_L40_except_error:;

      /* "mpi4py/MPI/commimpl.pxi":84
 *         from _dummy_thread import allocate_lock
 * else:
 *     try:             # <<<<<<<<<<<<<<
 *         from thread  import allocate_lock
 *     except ImportError:
 */
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L39_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_L43_try_end:;
    }
  }
  __pyx_L29:;

  /* "mpi4py/MPI/commimpl.pxi":89
 *         from dummy_thread import allocate_lock
 * 
 * cdef int  lock_keyval   = MPI_KEYVAL_INVALID             # <<<<<<<<<<<<<<
 * cdef dict lock_registry = {}
 * 
 */
  __pyx_v_6mpi4py_3MPI_lock_keyval = MPI_KEYVAL_INVALID;

  /* "mpi4py/MPI/commimpl.pxi":90
 * 
 * cdef int  lock_keyval   = MPI_KEYVAL_INVALID
 * cdef dict lock_registry = {}             # <<<<<<<<<<<<<<
 * 
 * cdef inline int lock_free_cb(MPI_Comm comm) \
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_lock_registry);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_lock_registry, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/commimpl.pxi":136
 *     return lock
 * 
 * def _lock_table(Comm comm):             # <<<<<<<<<<<<<<
 *     "Internal communicator lock table"
 *     return PyMPI_Lock_table(comm.ob_mpi)
 */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_3_lock_table, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lock_table, __pyx_t_3) < 0) __PYX_ERR(3, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/drepimpl.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * cdef dict datarep_registry = {}             # <<<<<<<<<<<<<<
 * 
 * @cython.final
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_datarep_registry);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_datarep_registry, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":17
 *         self.nopython  = nopython
 * 
 * cdef dict type_keyval = {}             # <<<<<<<<<<<<<<
 * cdef dict comm_keyval = {}
 * cdef dict  win_keyval = {}
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_type_keyval);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_type_keyval, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":18
 * 
 * cdef dict type_keyval = {}
 * cdef dict comm_keyval = {}             # <<<<<<<<<<<<<<
 * cdef dict  win_keyval = {}
 * 
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_comm_keyval);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_comm_keyval, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":19
 * cdef dict type_keyval = {}
 * cdef dict comm_keyval = {}
 * cdef dict  win_keyval = {}             # <<<<<<<<<<<<<<
 * 
 * _keyval_registry = {
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_win_keyval);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_win_keyval, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/attrimpl.pxi":22
 * 
 * _keyval_registry = {
 * 'Datatype' : type_keyval,             # <<<<<<<<<<<<<<
 * 'Comm'     : comm_keyval,
 * 'Win'      :  win_keyval,
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Datatype, __pyx_v_6mpi4py_3MPI_type_keyval) < 0) __PYX_ERR(4, 22, __pyx_L1_error)

  /* "mpi4py/MPI/attrimpl.pxi":23
 * _keyval_registry = {
 * 'Datatype' : type_keyval,
 * 'Comm'     : comm_keyval,             # <<<<<<<<<<<<<<
 * 'Win'      :  win_keyval,
 * }
 */
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Comm, __pyx_v_6mpi4py_3MPI_comm_keyval) < 0) __PYX_ERR(4, 22, __pyx_L1_error)

  /* "mpi4py/MPI/attrimpl.pxi":24
 * 'Datatype' : type_keyval,
 * 'Comm'     : comm_keyval,
 * 'Win'      :  win_keyval,             # <<<<<<<<<<<<<<
 * }
 * 
 */
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Win, __pyx_v_6mpi4py_3MPI_win_keyval) < 0) __PYX_ERR(4, 22, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_keyval_registry, __pyx_t_3) < 0) __PYX_ERR(4, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":56
 * #------------------------------------------------------------------------------
 * 
 * cdef object __BOTTOM__   = <MPI_Aint>MPI_BOTTOM             # <<<<<<<<<<<<<<
 * 
 * cdef object __IN_PLACE__ = <MPI_Aint>MPI_IN_PLACE
 */
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)MPI_BOTTOM)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI___BOTTOM__);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___BOTTOM__, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgbuffer.pxi":58
 * cdef object __BOTTOM__   = <MPI_Aint>MPI_BOTTOM
 * 
 * cdef object __IN_PLACE__ = <MPI_Aint>MPI_IN_PLACE             # <<<<<<<<<<<<<<
 * 
 * #------------------------------------------------------------------------------
 */
  __pyx_t_3 = __Pyx_PyInt_From_MPI_Aint(((MPI_Aint)MPI_IN_PLACE)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI___IN_PLACE__);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___IN_PLACE__, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":12
 * # -----------------------------------------------------------------------------
 * 
 * cdef object PyPickle_dumps = None             # <<<<<<<<<<<<<<
 * cdef object PyPickle_loads = None
 * cdef object PyPickle_PROTOCOL = None
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_dumps, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/msgpickle.pxi":13
 * 
 * cdef object PyPickle_dumps = None
 * cdef object PyPickle_loads = None             # <<<<<<<<<<<<<<
 * cdef object PyPickle_PROTOCOL = None
 * if PY3:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loads, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/msgpickle.pxi":14
 * cdef object PyPickle_dumps = None
 * cdef object PyPickle_loads = None
 * cdef object PyPickle_PROTOCOL = None             # <<<<<<<<<<<<<<
 * if PY3:
 *     from pickle import dumps as PyPickle_dumps
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/msgpickle.pxi":15
 * cdef object PyPickle_loads = None
 * cdef object PyPickle_PROTOCOL = None
 * if PY3:             # <<<<<<<<<<<<<<
 *     from pickle import dumps as PyPickle_dumps
 *     from pickle import loads as PyPickle_loads
 */
  if ((PY_MAJOR_VERSION>=3)) {

    /* "mpi4py/MPI/msgpickle.pxi":16
 * cdef object PyPickle_PROTOCOL = None
 * if PY3:
 *     from pickle import dumps as PyPickle_dumps             # <<<<<<<<<<<<<<
 *     from pickle import loads as PyPickle_loads
 *     from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL
 */
    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 16, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_n_s_dumps);
    __Pyx_GIVEREF(__pyx_n_s_dumps);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_dumps);
    __pyx_t_1 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 16, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_dumps); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 16, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
    __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_dumps, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":17
 * if PY3:
 *     from pickle import dumps as PyPickle_dumps
 *     from pickle import loads as PyPickle_loads             # <<<<<<<<<<<<<<
 *     from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL
 * else:
 */
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_loads);
    __Pyx_GIVEREF(__pyx_n_s_loads);
    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_loads);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_loads); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
    __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loads, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":18
 *     from pickle import dumps as PyPickle_dumps
 *     from pickle import loads as PyPickle_loads
 *     from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL             # <<<<<<<<<<<<<<
 * else:
 *     try:
 */
    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 18, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_n_s_DEFAULT_PROTOCOL);
    __Pyx_GIVEREF(__pyx_n_s_DEFAULT_PROTOCOL);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_DEFAULT_PROTOCOL);
    __pyx_t_1 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 18, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_DEFAULT_PROTOCOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 18, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
    __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/msgpickle.pxi":15
 * cdef object PyPickle_loads = None
 * cdef object PyPickle_PROTOCOL = None
 * if PY3:             # <<<<<<<<<<<<<<
 *     from pickle import dumps as PyPickle_dumps
 *     from pickle import loads as PyPickle_loads
 */
    goto __pyx_L46;
  }

  /* "mpi4py/MPI/msgpickle.pxi":20
 *     from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL
 * else:
 *     try:             # <<<<<<<<<<<<<<
 *         from cPickle import dumps as PyPickle_dumps
 *         from cPickle import loads as PyPickle_loads
 */
  /*else*/ {
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":21
 * else:
 *     try:
 *         from cPickle import dumps as PyPickle_dumps             # <<<<<<<<<<<<<<
 *         from cPickle import loads as PyPickle_loads
 *         from cPickle import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 */
        __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 21, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_n_s_dumps);
        __Pyx_GIVEREF(__pyx_n_s_dumps);
        PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_dumps);
        __pyx_t_3 = __Pyx_Import(__pyx_n_s_cPickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 21, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_dumps); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 21, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_dumps, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":22
 *     try:
 *         from cPickle import dumps as PyPickle_dumps
 *         from cPickle import loads as PyPickle_loads             # <<<<<<<<<<<<<<
 *         from cPickle import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 *     except ImportError:
 */
        __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 22, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_n_s_loads);
        __Pyx_GIVEREF(__pyx_n_s_loads);
        PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_loads);
        __pyx_t_1 = __Pyx_Import(__pyx_n_s_cPickle, __pyx_t_3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 22, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_loads); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 22, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loads, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":23
 *         from cPickle import dumps as PyPickle_dumps
 *         from cPickle import loads as PyPickle_loads
 *         from cPickle import HIGHEST_PROTOCOL as PyPickle_PROTOCOL             # <<<<<<<<<<<<<<
 *     except ImportError:
 *         from pickle  import dumps as PyPickle_dumps
 */
        __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 23, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_n_s_HIGHEST_PROTOCOL);
        __Pyx_GIVEREF(__pyx_n_s_HIGHEST_PROTOCOL);
        PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_HIGHEST_PROTOCOL);
        __pyx_t_3 = __Pyx_Import(__pyx_n_s_cPickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 23, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 23, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":20
 *     from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL
 * else:
 *     try:             # <<<<<<<<<<<<<<
 *         from cPickle import dumps as PyPickle_dumps
 *         from cPickle import loads as PyPickle_loads
 */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L52_try_end;
      __pyx_L47_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":24
 *         from cPickle import loads as PyPickle_loads
 *         from cPickle import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 *     except ImportError:             # <<<<<<<<<<<<<<
 *         from pickle  import dumps as PyPickle_dumps
 *         from pickle  import loads as PyPickle_loads
 */
      __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_2) {
        __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_9) < 0) __PYX_ERR(6, 24, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_9);

        /* "mpi4py/MPI/msgpickle.pxi":25
 *         from cPickle import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 *     except ImportError:
 *         from pickle  import dumps as PyPickle_dumps             # <<<<<<<<<<<<<<
 *         from pickle  import loads as PyPickle_loads
 *         from pickle  import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 */
        __pyx_t_16 = PyList_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 25, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_n_s_dumps);
        __Pyx_GIVEREF(__pyx_n_s_dumps);
        PyList_SET_ITEM(__pyx_t_16, 0, __pyx_n_s_dumps);
        __pyx_t_13 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_16, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 25, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = __Pyx_ImportFrom(__pyx_t_13, __pyx_n_s_dumps); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 25, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_dumps, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":26
 *     except ImportError:
 *         from pickle  import dumps as PyPickle_dumps
 *         from pickle  import loads as PyPickle_loads             # <<<<<<<<<<<<<<
 *         from pickle  import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 * 
 */
        __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 26, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_n_s_loads);
        __Pyx_GIVEREF(__pyx_n_s_loads);
        PyList_SET_ITEM(__pyx_t_13, 0, __pyx_n_s_loads);
        __pyx_t_16 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_13, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 26, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = __Pyx_ImportFrom(__pyx_t_16, __pyx_n_s_loads); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 26, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loads, __pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":27
 *         from pickle  import dumps as PyPickle_dumps
 *         from pickle  import loads as PyPickle_loads
 *         from pickle  import HIGHEST_PROTOCOL as PyPickle_PROTOCOL             # <<<<<<<<<<<<<<
 * 
 * cdef object PyBytesIO_New = None
 */
        __pyx_t_16 = PyList_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 27, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_n_s_HIGHEST_PROTOCOL);
        __Pyx_GIVEREF(__pyx_n_s_HIGHEST_PROTOCOL);
        PyList_SET_ITEM(__pyx_t_16, 0, __pyx_n_s_HIGHEST_PROTOCOL);
        __pyx_t_13 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_16, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 27, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = __Pyx_ImportFrom(__pyx_t_13, __pyx_n_s_HIGHEST_PROTOCOL); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 27, __pyx_L49_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L48_exception_handled;
      }
      goto __pyx_L49_except_error;
      __pyx_L49_except_error:;

      /* "mpi4py/MPI/msgpickle.pxi":20
 *     from pickle import DEFAULT_PROTOCOL as PyPickle_PROTOCOL
 * else:
 *     try:             # <<<<<<<<<<<<<<
 *         from cPickle import dumps as PyPickle_dumps
 *         from cPickle import loads as PyPickle_loads
 */
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L48_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_L52_try_end:;
    }
  }
  __pyx_L46:;

  /* "mpi4py/MPI/msgpickle.pxi":29
 *         from pickle  import HIGHEST_PROTOCOL as PyPickle_PROTOCOL
 * 
 * cdef object PyBytesIO_New = None             # <<<<<<<<<<<<<<
 * cdef object PyPickle_loadf = None
 * if PY2:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyBytesIO_New);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyBytesIO_New, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/msgpickle.pxi":30
 * 
 * cdef object PyBytesIO_New = None
 * cdef object PyPickle_loadf = None             # <<<<<<<<<<<<<<
 * if PY2:
 *     try:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loadf);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loadf, Py_None);
  __Pyx_GIVEREF(Py_None);

  /* "mpi4py/MPI/msgpickle.pxi":31
 * cdef object PyBytesIO_New = None
 * cdef object PyPickle_loadf = None
 * if PY2:             # <<<<<<<<<<<<<<
 *     try:
 *         from cStringIO import StringIO as PyBytesIO_New
 */
  if ((PY_MAJOR_VERSION==2)) {

    /* "mpi4py/MPI/msgpickle.pxi":32
 * cdef object PyPickle_loadf = None
 * if PY2:
 *     try:             # <<<<<<<<<<<<<<
 *         from cStringIO import StringIO as PyBytesIO_New
 *     except ImportError:
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":33
 * if PY2:
 *     try:
 *         from cStringIO import StringIO as PyBytesIO_New             # <<<<<<<<<<<<<<
 *     except ImportError:
 *         from io import BytesIO as PyBytesIO_New
 */
        __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 33, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_n_s_StringIO);
        __Pyx_GIVEREF(__pyx_n_s_StringIO);
        PyList_SET_ITEM(__pyx_t_9, 0, __pyx_n_s_StringIO);
        __pyx_t_1 = __Pyx_Import(__pyx_n_s_cStringIO, __pyx_t_9, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 33, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_StringIO); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 33, __pyx_L56_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyBytesIO_New);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyBytesIO_New, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":32
 * cdef object PyPickle_loadf = None
 * if PY2:
 *     try:             # <<<<<<<<<<<<<<
 *         from cStringIO import StringIO as PyBytesIO_New
 *     except ImportError:
 */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L61_try_end;
      __pyx_L56_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":34
 *     try:
 *         from cStringIO import StringIO as PyBytesIO_New
 *     except ImportError:             # <<<<<<<<<<<<<<
 *         from io import BytesIO as PyBytesIO_New
 *     try:
 */
      __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_2) {
        __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_9, &__pyx_t_3) < 0) __PYX_ERR(6, 34, __pyx_L58_except_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_3);

        /* "mpi4py/MPI/msgpickle.pxi":35
 *         from cStringIO import StringIO as PyBytesIO_New
 *     except ImportError:
 *         from io import BytesIO as PyBytesIO_New             # <<<<<<<<<<<<<<
 *     try:
 *         from cPickle import load as PyPickle_loadf
 */
        __pyx_t_13 = PyList_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 35, __pyx_L58_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_n_s_BytesIO);
        __Pyx_GIVEREF(__pyx_n_s_BytesIO);
        PyList_SET_ITEM(__pyx_t_13, 0, __pyx_n_s_BytesIO);
        __pyx_t_16 = __Pyx_Import(__pyx_n_s_io, __pyx_t_13, 0); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 35, __pyx_L58_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = __Pyx_ImportFrom(__pyx_t_16, __pyx_n_s_BytesIO); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 35, __pyx_L58_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyBytesIO_New);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyBytesIO_New, __pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L57_exception_handled;
      }
      goto __pyx_L58_except_error;
      __pyx_L58_except_error:;

      /* "mpi4py/MPI/msgpickle.pxi":32
 * cdef object PyPickle_loadf = None
 * if PY2:
 *     try:             # <<<<<<<<<<<<<<
 *         from cStringIO import StringIO as PyBytesIO_New
 *     except ImportError:
 */
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L57_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_L61_try_end:;
    }

    /* "mpi4py/MPI/msgpickle.pxi":36
 *     except ImportError:
 *         from io import BytesIO as PyBytesIO_New
 *     try:             # <<<<<<<<<<<<<<
 *         from cPickle import load as PyPickle_loadf
 *     except ImportError:
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "mpi4py/MPI/msgpickle.pxi":37
 *         from io import BytesIO as PyBytesIO_New
 *     try:
 *         from cPickle import load as PyPickle_loadf             # <<<<<<<<<<<<<<
 *     except ImportError:
 *         from pickle import load as PyPickle_loadf
 */
        __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 37, __pyx_L64_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_n_s_load);
        __Pyx_GIVEREF(__pyx_n_s_load);
        PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_load);
        __pyx_t_9 = __Pyx_Import(__pyx_n_s_cPickle, __pyx_t_3, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 37, __pyx_L64_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_9, __pyx_n_s_load); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 37, __pyx_L64_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loadf);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loadf, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

        /* "mpi4py/MPI/msgpickle.pxi":36
 *     except ImportError:
 *         from io import BytesIO as PyBytesIO_New
 *     try:             # <<<<<<<<<<<<<<
 *         from cPickle import load as PyPickle_loadf
 *     except ImportError:
 */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L69_try_end;
      __pyx_L64_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
      __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "mpi4py/MPI/msgpickle.pxi":38
 *     try:
 *         from cPickle import load as PyPickle_loadf
 *     except ImportError:             # <<<<<<<<<<<<<<
 *         from pickle import load as PyPickle_loadf
 * 
 */
      __pyx_t_2 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_ImportError);
      if (__pyx_t_2) {
        __Pyx_AddTraceback("mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(6, 38, __pyx_L66_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_1);

        /* "mpi4py/MPI/msgpickle.pxi":39
 *         from cPickle import load as PyPickle_loadf
 *     except ImportError:
 *         from pickle import load as PyPickle_loadf             # <<<<<<<<<<<<<<
 * 
 * 
 */
        __pyx_t_16 = PyList_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 39, __pyx_L66_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_n_s_load);
        __Pyx_GIVEREF(__pyx_n_s_load);
        PyList_SET_ITEM(__pyx_t_16, 0, __pyx_n_s_load);
        __pyx_t_13 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_16, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 39, __pyx_L66_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_16 = __Pyx_ImportFrom(__pyx_t_13, __pyx_n_s_load); if (unlikely(!__pyx_t_16)) __PYX_ERR(6, 39, __pyx_L66_except_error)
        __Pyx_GOTREF(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_PyPickle_loadf);
        __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyPickle_loadf, __pyx_t_16);
        __Pyx_GIVEREF(__pyx_t_16);
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L65_exception_handled;
      }
      goto __pyx_L66_except_error;
      __pyx_L66_except_error:;

      /* "mpi4py/MPI/msgpickle.pxi":36
 *     except ImportError:
 *         from io import BytesIO as PyBytesIO_New
 *     try:             # <<<<<<<<<<<<<<
 *         from cPickle import load as PyPickle_loadf
 *     except ImportError:
 */
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L65_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_L69_try_end:;
    }

    /* "mpi4py/MPI/msgpickle.pxi":31
 * cdef object PyBytesIO_New = None
 * cdef object PyPickle_loadf = None
 * if PY2:             # <<<<<<<<<<<<<<
 *     try:
 *         from cStringIO import StringIO as PyBytesIO_New
 */
  }

  /* "mpi4py/MPI/msgpickle.pxi":151
 * 
 * 
 * cdef Pickle PyMPI_PICKLE = Pickle()             # <<<<<<<<<<<<<<
 * pickle = PyMPI_PICKLE
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_6mpi4py_3MPI_Pickle)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE, ((struct __pyx_obj_6mpi4py_3MPI_Pickle *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/msgpickle.pxi":152
 * 
 * cdef Pickle PyMPI_PICKLE = Pickle()
 * pickle = PyMPI_PICKLE             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pickle, ((PyObject *)__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE)) < 0) __PYX_ERR(6, 152, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":28
 * # ------------------
 * 
 * UNDEFINED = MPI_UNDEFINED             # <<<<<<<<<<<<<<
 * #: Undefined integer value
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_UNDEFINED); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNDEFINED, __pyx_t_1) < 0) __PYX_ERR(8, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":31
 * #: Undefined integer value
 * 
 * ANY_SOURCE = MPI_ANY_SOURCE             # <<<<<<<<<<<<<<
 * #: Wildcard source value for receives
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ANY_SOURCE, __pyx_t_1) < 0) __PYX_ERR(8, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":34
 * #: Wildcard source value for receives
 * 
 * ANY_TAG = MPI_ANY_TAG             # <<<<<<<<<<<<<<
 * #: Wildcard tag value for receives
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ANY_TAG, __pyx_t_1) < 0) __PYX_ERR(8, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":37
 * #: Wildcard tag value for receives
 * 
 * PROC_NULL = MPI_PROC_NULL             # <<<<<<<<<<<<<<
 * #: Special process rank for send/receive
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_PROC_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PROC_NULL, __pyx_t_1) < 0) __PYX_ERR(8, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":40
 * #: Special process rank for send/receive
 * 
 * ROOT = MPI_ROOT             # <<<<<<<<<<<<<<
 * #: Root process for collective inter-communications
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ROOT); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ROOT, __pyx_t_1) < 0) __PYX_ERR(8, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":43
 * #: Root process for collective inter-communications
 * 
 * BOTTOM = __BOTTOM__             # <<<<<<<<<<<<<<
 * #: Special address for buffers
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BOTTOM, __pyx_v_6mpi4py_3MPI___BOTTOM__) < 0) __PYX_ERR(8, 43, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":46
 * #: Special address for buffers
 * 
 * IN_PLACE = __IN_PLACE__             # <<<<<<<<<<<<<<
 * #: *In-place* option for collective communications
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IN_PLACE, __pyx_v_6mpi4py_3MPI___IN_PLACE__) < 0) __PYX_ERR(8, 46, __pyx_L1_error)

  /* "mpi4py/MPI/MPI.pyx":53
 * # ----------------------------
 * 
 * KEYVAL_INVALID    = MPI_KEYVAL_INVALID             # <<<<<<<<<<<<<<
 * 
 * TAG_UB            = MPI_TAG_UB
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_KEYVAL_INVALID); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KEYVAL_INVALID, __pyx_t_1) < 0) __PYX_ERR(8, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":55
 * KEYVAL_INVALID    = MPI_KEYVAL_INVALID
 * 
 * TAG_UB            = MPI_TAG_UB             # <<<<<<<<<<<<<<
 * HOST              = MPI_HOST
 * IO                = MPI_IO
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_TAG_UB); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAG_UB, __pyx_t_1) < 0) __PYX_ERR(8, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":56
 * 
 * TAG_UB            = MPI_TAG_UB
 * HOST              = MPI_HOST             # <<<<<<<<<<<<<<
 * IO                = MPI_IO
 * WTIME_IS_GLOBAL   = MPI_WTIME_IS_GLOBAL
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_HOST); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_HOST, __pyx_t_1) < 0) __PYX_ERR(8, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":57
 * TAG_UB            = MPI_TAG_UB
 * HOST              = MPI_HOST
 * IO                = MPI_IO             # <<<<<<<<<<<<<<
 * WTIME_IS_GLOBAL   = MPI_WTIME_IS_GLOBAL
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_IO); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IO, __pyx_t_1) < 0) __PYX_ERR(8, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":58
 * HOST              = MPI_HOST
 * IO                = MPI_IO
 * WTIME_IS_GLOBAL   = MPI_WTIME_IS_GLOBAL             # <<<<<<<<<<<<<<
 * 
 * UNIVERSE_SIZE     = MPI_UNIVERSE_SIZE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WTIME_IS_GLOBAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WTIME_IS_GLOBAL, __pyx_t_1) < 0) __PYX_ERR(8, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":60
 * WTIME_IS_GLOBAL   = MPI_WTIME_IS_GLOBAL
 * 
 * UNIVERSE_SIZE     = MPI_UNIVERSE_SIZE             # <<<<<<<<<<<<<<
 * APPNUM            = MPI_APPNUM
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_UNIVERSE_SIZE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNIVERSE_SIZE, __pyx_t_1) < 0) __PYX_ERR(8, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":61
 * 
 * UNIVERSE_SIZE     = MPI_UNIVERSE_SIZE
 * APPNUM            = MPI_APPNUM             # <<<<<<<<<<<<<<
 * 
 * LASTUSEDCODE      = MPI_LASTUSEDCODE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_APPNUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_APPNUM, __pyx_t_1) < 0) __PYX_ERR(8, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":63
 * APPNUM            = MPI_APPNUM
 * 
 * LASTUSEDCODE      = MPI_LASTUSEDCODE             # <<<<<<<<<<<<<<
 * 
 * WIN_BASE          = MPI_WIN_BASE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_LASTUSEDCODE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LASTUSEDCODE, __pyx_t_1) < 0) __PYX_ERR(8, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":65
 * LASTUSEDCODE      = MPI_LASTUSEDCODE
 * 
 * WIN_BASE          = MPI_WIN_BASE             # <<<<<<<<<<<<<<
 * WIN_SIZE          = MPI_WIN_SIZE
 * WIN_DISP_UNIT     = MPI_WIN_DISP_UNIT
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_BASE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_BASE, __pyx_t_1) < 0) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":66
 * 
 * WIN_BASE          = MPI_WIN_BASE
 * WIN_SIZE          = MPI_WIN_SIZE             # <<<<<<<<<<<<<<
 * WIN_DISP_UNIT     = MPI_WIN_DISP_UNIT
 * WIN_CREATE_FLAVOR = MPI_WIN_CREATE_FLAVOR
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_SIZE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_SIZE, __pyx_t_1) < 0) __PYX_ERR(8, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":67
 * WIN_BASE          = MPI_WIN_BASE
 * WIN_SIZE          = MPI_WIN_SIZE
 * WIN_DISP_UNIT     = MPI_WIN_DISP_UNIT             # <<<<<<<<<<<<<<
 * WIN_CREATE_FLAVOR = MPI_WIN_CREATE_FLAVOR
 * WIN_FLAVOR        = MPI_WIN_CREATE_FLAVOR
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_DISP_UNIT); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_DISP_UNIT, __pyx_t_1) < 0) __PYX_ERR(8, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":68
 * WIN_SIZE          = MPI_WIN_SIZE
 * WIN_DISP_UNIT     = MPI_WIN_DISP_UNIT
 * WIN_CREATE_FLAVOR = MPI_WIN_CREATE_FLAVOR             # <<<<<<<<<<<<<<
 * WIN_FLAVOR        = MPI_WIN_CREATE_FLAVOR
 * WIN_MODEL         = MPI_WIN_MODEL
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_CREATE_FLAVOR); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_CREATE_FLAVOR, __pyx_t_1) < 0) __PYX_ERR(8, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":69
 * WIN_DISP_UNIT     = MPI_WIN_DISP_UNIT
 * WIN_CREATE_FLAVOR = MPI_WIN_CREATE_FLAVOR
 * WIN_FLAVOR        = MPI_WIN_CREATE_FLAVOR             # <<<<<<<<<<<<<<
 * WIN_MODEL         = MPI_WIN_MODEL
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_CREATE_FLAVOR); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_FLAVOR, __pyx_t_1) < 0) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":70
 * WIN_CREATE_FLAVOR = MPI_WIN_CREATE_FLAVOR
 * WIN_FLAVOR        = MPI_WIN_CREATE_FLAVOR
 * WIN_MODEL         = MPI_WIN_MODEL             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_MODEL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_MODEL, __pyx_t_1) < 0) __PYX_ERR(8, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":1
 * class Exception(RuntimeError):             # <<<<<<<<<<<<<<
 * 
 *     """
 */
  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__138); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__138, __pyx_n_s_Exception_2, __pyx_n_s_Exception_2, (PyObject *) NULL, __pyx_n_s_mpi4py_MPI, __pyx_kp_s_Exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/ExceptionP.pyx":7
 *     """
 * 
 *     def __init__(self, int ierr=0):             # <<<<<<<<<<<<<<
 *         if ierr < MPI_SUCCESS: ierr = MPI_ERR_UNKNOWN
 *         self.ob_mpi = ierr
 */
  __pyx_t_9 = __Pyx_PyInt_From_int(((int)0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_1__init__, 0, __pyx_n_s_Exception___init, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__140)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_t_13);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_9) < 0) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":12
 *         RuntimeError.__init__(self, self.ob_mpi)
 * 
 *     def __eq__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr == error)
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_3__eq__, 0, __pyx_n_s_Exception___eq, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__142)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_eq, __pyx_t_9) < 0) __PYX_ERR(1, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":16
 *         return <bint> (ierr == error)
 * 
 *     def __ne__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr != error)
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_5__ne__, 0, __pyx_n_s_Exception___ne, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__144)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_ne, __pyx_t_9) < 0) __PYX_ERR(1, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":20
 *         return <bint> (ierr != error)
 * 
 *     def __lt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr < error)
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_7__lt__, 0, __pyx_n_s_Exception___lt, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__146)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_lt, __pyx_t_9) < 0) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":24
 *         return <bint> (ierr < error)
 * 
 *     def __le__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr <= error)
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_9__le__, 0, __pyx_n_s_Exception___le, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__148)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_le, __pyx_t_9) < 0) __PYX_ERR(1, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":28
 *         return <bint> (ierr <= error)
 * 
 *     def __gt__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr > error)
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_11__gt__, 0, __pyx_n_s_Exception___gt, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__150)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_gt, __pyx_t_9) < 0) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":32
 *         return <bint> (ierr > error)
 * 
 *     def __ge__(self, object error):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return <bint> (ierr >= error)
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_13__ge__, 0, __pyx_n_s_Exception___ge, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__152)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_ge, __pyx_t_9) < 0) __PYX_ERR(1, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":36
 *         return <bint> (ierr >= error)
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         return hash(self.ob_mpi)
 * 
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_15__hash__, 0, __pyx_n_s_Exception___hash, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__154)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_hash, __pyx_t_9) < 0) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":39
 *         return hash(self.ob_mpi)
 * 
 *     def __bool__(self):             # <<<<<<<<<<<<<<
 *         cdef int ierr = self.ob_mpi
 *         return ierr != MPI_SUCCESS
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_17__bool__, 0, __pyx_n_s_Exception___bool, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__156)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_bool, __pyx_t_9) < 0) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":43
 *         return ierr != MPI_SUCCESS
 * 
 *     __nonzero__ = __bool__             # <<<<<<<<<<<<<<
 * 
 *     def __int__(self):
 */
  __pyx_t_9 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_bool);
  if (unlikely(!__pyx_t_9)) {
    PyErr_Clear();
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_bool);
  }
  if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_nonzero, __pyx_t_9) < 0) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":45
 *     __nonzero__ = __bool__
 * 
 *     def __int__(self):             # <<<<<<<<<<<<<<
 *         return self.ob_mpi
 * 
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_19__int__, 0, __pyx_n_s_Exception___int, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__158)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_int, __pyx_t_9) < 0) __PYX_ERR(1, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":48
 *         return self.ob_mpi
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_21__repr__, 0, __pyx_n_s_Exception___repr, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__160)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_9) < 0) __PYX_ERR(1, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":51
 *         return "MPI.Exception(%d)" % self.ob_mpi
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         if not mpi_active():
 *             return "error code: %d" % self.ob_mpi
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_23__str__, 0, __pyx_n_s_Exception___str, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__162)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_str, __pyx_t_9) < 0) __PYX_ERR(1, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":56
 *         return self.Get_error_string()
 * 
 *     def Get_error_code(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error code
 */
  __pyx_t_9 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_25Get_error_code, 0, __pyx_n_s_Exception_Get_error_code, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__164)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Get_error_code, __pyx_t_9) < 0) __PYX_ERR(1, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":64
 *         return errorcode
 * 
 *     error_code = property(Get_error_code, doc="error code")             # <<<<<<<<<<<<<<
 * 
 *     def Get_error_class(self):
 */
  __pyx_t_9 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_Get_error_code);
  if (unlikely(!__pyx_t_9)) {
    PyErr_Clear();
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Get_error_code);
  }
  if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_doc_2, __pyx_kp_s_error_code) < 0) __PYX_ERR(1, 64, __pyx_L1_error)
  __pyx_t_16 = __Pyx_PyObject_Call(__pyx_builtin_property, __pyx_t_13, __pyx_t_9); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_error_code_2, __pyx_t_16) < 0) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":66
 *     error_code = property(Get_error_code, doc="error code")
 * 
 *     def Get_error_class(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error class
 */
  __pyx_t_16 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_27Get_error_class, 0, __pyx_n_s_Exception_Get_error_class, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__166)); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Get_error_class, __pyx_t_16) < 0) __PYX_ERR(1, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":74
 *         return errorclass
 * 
 *     error_class = property(Get_error_class, doc="error class")             # <<<<<<<<<<<<<<
 * 
 *     def Get_error_string(self):
 */
  __pyx_t_16 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_Get_error_class);
  if (unlikely(!__pyx_t_16)) {
    PyErr_Clear();
    __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_Get_error_class);
  }
  if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_16);
  __pyx_t_16 = 0;
  __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  if (PyDict_SetItem(__pyx_t_16, __pyx_n_s_doc_2, __pyx_kp_s_error_class) < 0) __PYX_ERR(1, 74, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_property, __pyx_t_9, __pyx_t_16); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_error_class_2, __pyx_t_13) < 0) __PYX_ERR(1, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":76
 *     error_class = property(Get_error_class, doc="error class")
 * 
 *     def Get_error_string(self):             # <<<<<<<<<<<<<<
 *         """
 *         Error string
 */
  __pyx_t_13 = __Pyx_CyFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Exception_29Get_error_string, 0, __pyx_n_s_Exception_Get_error_string, NULL, __pyx_n_s_mpi4py_MPI, __pyx_d, ((PyObject *)__pyx_codeobj__168)); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_Get_error_string, __pyx_t_13) < 0) __PYX_ERR(1, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":85
 *         return tompistr(string, resultlen)
 * 
 *     error_string = property(Get_error_string, doc="error string")             # <<<<<<<<<<<<<<
 */
  __pyx_t_13 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_Get_error_string);
  if (unlikely(!__pyx_t_13)) {
    PyErr_Clear();
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_Get_error_string);
  }
  if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_16 = PyTuple_New(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_13);
  __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_t_13, __pyx_n_s_doc_2, __pyx_kp_s_error_string) < 0) __PYX_ERR(1, 85, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_property, __pyx_t_16, __pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_error_string_2, __pyx_t_9) < 0) __PYX_ERR(1, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "mpi4py/MPI/ExceptionP.pyx":1
 * class Exception(RuntimeError):             # <<<<<<<<<<<<<<
 * 
 *     """
 */
  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_Exception_2, __pyx_tuple__138, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Exception_2, __pyx_t_9) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":3
 * include "ExceptionP.pyx"
 * #include "ExceptionC.pyx"
 * MPIException = Exception             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Exception_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_MPIException);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_MPIException, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":7
 * 
 * # Actually no errors
 * SUCCESS      = MPI_SUCCESS             # <<<<<<<<<<<<<<
 * ERR_LASTCODE = MPI_ERR_LASTCODE
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_SUCCESS); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUCCESS, __pyx_t_1) < 0) __PYX_ERR(19, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":8
 * # Actually no errors
 * SUCCESS      = MPI_SUCCESS
 * ERR_LASTCODE = MPI_ERR_LASTCODE             # <<<<<<<<<<<<<<
 * 
 * # MPI-1 Error classes
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_LASTCODE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_LASTCODE, __pyx_t_1) < 0) __PYX_ERR(19, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":13
 * # -------------------
 * # MPI-1 Objects
 * ERR_COMM      = MPI_ERR_COMM             # <<<<<<<<<<<<<<
 * ERR_GROUP     = MPI_ERR_GROUP
 * ERR_TYPE      = MPI_ERR_TYPE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_COMM); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_COMM, __pyx_t_1) < 0) __PYX_ERR(19, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":14
 * # MPI-1 Objects
 * ERR_COMM      = MPI_ERR_COMM
 * ERR_GROUP     = MPI_ERR_GROUP             # <<<<<<<<<<<<<<
 * ERR_TYPE      = MPI_ERR_TYPE
 * ERR_REQUEST   = MPI_ERR_REQUEST
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_GROUP); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_GROUP, __pyx_t_1) < 0) __PYX_ERR(19, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":15
 * ERR_COMM      = MPI_ERR_COMM
 * ERR_GROUP     = MPI_ERR_GROUP
 * ERR_TYPE      = MPI_ERR_TYPE             # <<<<<<<<<<<<<<
 * ERR_REQUEST   = MPI_ERR_REQUEST
 * ERR_OP        = MPI_ERR_OP
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_TYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_TYPE, __pyx_t_1) < 0) __PYX_ERR(19, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":16
 * ERR_GROUP     = MPI_ERR_GROUP
 * ERR_TYPE      = MPI_ERR_TYPE
 * ERR_REQUEST   = MPI_ERR_REQUEST             # <<<<<<<<<<<<<<
 * ERR_OP        = MPI_ERR_OP
 * # Communication argument parameters
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_REQUEST); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_REQUEST, __pyx_t_1) < 0) __PYX_ERR(19, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":17
 * ERR_TYPE      = MPI_ERR_TYPE
 * ERR_REQUEST   = MPI_ERR_REQUEST
 * ERR_OP        = MPI_ERR_OP             # <<<<<<<<<<<<<<
 * # Communication argument parameters
 * ERR_BUFFER    = MPI_ERR_BUFFER
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_OP); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_OP, __pyx_t_1) < 0) __PYX_ERR(19, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":19
 * ERR_OP        = MPI_ERR_OP
 * # Communication argument parameters
 * ERR_BUFFER    = MPI_ERR_BUFFER             # <<<<<<<<<<<<<<
 * ERR_COUNT     = MPI_ERR_COUNT
 * ERR_TAG       = MPI_ERR_TAG
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_BUFFER); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_BUFFER, __pyx_t_1) < 0) __PYX_ERR(19, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":20
 * # Communication argument parameters
 * ERR_BUFFER    = MPI_ERR_BUFFER
 * ERR_COUNT     = MPI_ERR_COUNT             # <<<<<<<<<<<<<<
 * ERR_TAG       = MPI_ERR_TAG
 * ERR_RANK      = MPI_ERR_RANK
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_COUNT); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_COUNT, __pyx_t_1) < 0) __PYX_ERR(19, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":21
 * ERR_BUFFER    = MPI_ERR_BUFFER
 * ERR_COUNT     = MPI_ERR_COUNT
 * ERR_TAG       = MPI_ERR_TAG             # <<<<<<<<<<<<<<
 * ERR_RANK      = MPI_ERR_RANK
 * ERR_ROOT      = MPI_ERR_ROOT
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_TAG, __pyx_t_1) < 0) __PYX_ERR(19, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":22
 * ERR_COUNT     = MPI_ERR_COUNT
 * ERR_TAG       = MPI_ERR_TAG
 * ERR_RANK      = MPI_ERR_RANK             # <<<<<<<<<<<<<<
 * ERR_ROOT      = MPI_ERR_ROOT
 * ERR_TRUNCATE  = MPI_ERR_TRUNCATE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RANK); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RANK, __pyx_t_1) < 0) __PYX_ERR(19, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":23
 * ERR_TAG       = MPI_ERR_TAG
 * ERR_RANK      = MPI_ERR_RANK
 * ERR_ROOT      = MPI_ERR_ROOT             # <<<<<<<<<<<<<<
 * ERR_TRUNCATE  = MPI_ERR_TRUNCATE
 * # Multiple completion
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_ROOT); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_ROOT, __pyx_t_1) < 0) __PYX_ERR(19, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":24
 * ERR_RANK      = MPI_ERR_RANK
 * ERR_ROOT      = MPI_ERR_ROOT
 * ERR_TRUNCATE  = MPI_ERR_TRUNCATE             # <<<<<<<<<<<<<<
 * # Multiple completion
 * ERR_IN_STATUS = MPI_ERR_IN_STATUS
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_TRUNCATE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_TRUNCATE, __pyx_t_1) < 0) __PYX_ERR(19, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":26
 * ERR_TRUNCATE  = MPI_ERR_TRUNCATE
 * # Multiple completion
 * ERR_IN_STATUS = MPI_ERR_IN_STATUS             # <<<<<<<<<<<<<<
 * ERR_PENDING   = MPI_ERR_PENDING
 * # Topology argument parameters
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_IN_STATUS); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_IN_STATUS, __pyx_t_1) < 0) __PYX_ERR(19, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":27
 * # Multiple completion
 * ERR_IN_STATUS = MPI_ERR_IN_STATUS
 * ERR_PENDING   = MPI_ERR_PENDING             # <<<<<<<<<<<<<<
 * # Topology argument parameters
 * ERR_TOPOLOGY  = MPI_ERR_TOPOLOGY
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_PENDING); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_PENDING, __pyx_t_1) < 0) __PYX_ERR(19, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":29
 * ERR_PENDING   = MPI_ERR_PENDING
 * # Topology argument parameters
 * ERR_TOPOLOGY  = MPI_ERR_TOPOLOGY             # <<<<<<<<<<<<<<
 * ERR_DIMS      = MPI_ERR_DIMS
 * # Other arguments parameters
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_TOPOLOGY); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_TOPOLOGY, __pyx_t_1) < 0) __PYX_ERR(19, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":30
 * # Topology argument parameters
 * ERR_TOPOLOGY  = MPI_ERR_TOPOLOGY
 * ERR_DIMS      = MPI_ERR_DIMS             # <<<<<<<<<<<<<<
 * # Other arguments parameters
 * ERR_ARG       = MPI_ERR_ARG
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_DIMS); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_DIMS, __pyx_t_1) < 0) __PYX_ERR(19, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":32
 * ERR_DIMS      = MPI_ERR_DIMS
 * # Other arguments parameters
 * ERR_ARG       = MPI_ERR_ARG             # <<<<<<<<<<<<<<
 * # Other errors
 * ERR_OTHER     = MPI_ERR_OTHER
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_ARG); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_ARG, __pyx_t_1) < 0) __PYX_ERR(19, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":34
 * ERR_ARG       = MPI_ERR_ARG
 * # Other errors
 * ERR_OTHER     = MPI_ERR_OTHER             # <<<<<<<<<<<<<<
 * ERR_UNKNOWN   = MPI_ERR_UNKNOWN
 * ERR_INTERN    = MPI_ERR_INTERN
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_OTHER); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_OTHER, __pyx_t_1) < 0) __PYX_ERR(19, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":35
 * # Other errors
 * ERR_OTHER     = MPI_ERR_OTHER
 * ERR_UNKNOWN   = MPI_ERR_UNKNOWN             # <<<<<<<<<<<<<<
 * ERR_INTERN    = MPI_ERR_INTERN
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_UNKNOWN); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_UNKNOWN, __pyx_t_1) < 0) __PYX_ERR(19, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":36
 * ERR_OTHER     = MPI_ERR_OTHER
 * ERR_UNKNOWN   = MPI_ERR_UNKNOWN
 * ERR_INTERN    = MPI_ERR_INTERN             # <<<<<<<<<<<<<<
 * 
 * # MPI-2 Error classes
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_INTERN); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_INTERN, __pyx_t_1) < 0) __PYX_ERR(19, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":41
 * # -------------------
 * # MPI-2 Objects
 * ERR_INFO                   = MPI_ERR_INFO             # <<<<<<<<<<<<<<
 * ERR_FILE                   = MPI_ERR_FILE
 * ERR_WIN                    = MPI_ERR_WIN
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_INFO); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_INFO, __pyx_t_1) < 0) __PYX_ERR(19, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":42
 * # MPI-2 Objects
 * ERR_INFO                   = MPI_ERR_INFO
 * ERR_FILE                   = MPI_ERR_FILE             # <<<<<<<<<<<<<<
 * ERR_WIN                    = MPI_ERR_WIN
 * # Object attributes
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_FILE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_FILE, __pyx_t_1) < 0) __PYX_ERR(19, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":43
 * ERR_INFO                   = MPI_ERR_INFO
 * ERR_FILE                   = MPI_ERR_FILE
 * ERR_WIN                    = MPI_ERR_WIN             # <<<<<<<<<<<<<<
 * # Object attributes
 * ERR_KEYVAL                 = MPI_ERR_KEYVAL
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_WIN); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_WIN, __pyx_t_1) < 0) __PYX_ERR(19, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":45
 * ERR_WIN                    = MPI_ERR_WIN
 * # Object attributes
 * ERR_KEYVAL                 = MPI_ERR_KEYVAL             # <<<<<<<<<<<<<<
 * # Info Object
 * ERR_INFO_KEY               = MPI_ERR_INFO_KEY
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_KEYVAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_KEYVAL, __pyx_t_1) < 0) __PYX_ERR(19, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":47
 * ERR_KEYVAL                 = MPI_ERR_KEYVAL
 * # Info Object
 * ERR_INFO_KEY               = MPI_ERR_INFO_KEY             # <<<<<<<<<<<<<<
 * ERR_INFO_VALUE             = MPI_ERR_INFO_VALUE
 * ERR_INFO_NOKEY             = MPI_ERR_INFO_NOKEY
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_INFO_KEY); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_INFO_KEY, __pyx_t_1) < 0) __PYX_ERR(19, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":48
 * # Info Object
 * ERR_INFO_KEY               = MPI_ERR_INFO_KEY
 * ERR_INFO_VALUE             = MPI_ERR_INFO_VALUE             # <<<<<<<<<<<<<<
 * ERR_INFO_NOKEY             = MPI_ERR_INFO_NOKEY
 * # Input/Ouput
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_INFO_VALUE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_INFO_VALUE, __pyx_t_1) < 0) __PYX_ERR(19, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":49
 * ERR_INFO_KEY               = MPI_ERR_INFO_KEY
 * ERR_INFO_VALUE             = MPI_ERR_INFO_VALUE
 * ERR_INFO_NOKEY             = MPI_ERR_INFO_NOKEY             # <<<<<<<<<<<<<<
 * # Input/Ouput
 * ERR_ACCESS                 = MPI_ERR_ACCESS
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_INFO_NOKEY); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_INFO_NOKEY, __pyx_t_1) < 0) __PYX_ERR(19, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":51
 * ERR_INFO_NOKEY             = MPI_ERR_INFO_NOKEY
 * # Input/Ouput
 * ERR_ACCESS                 = MPI_ERR_ACCESS             # <<<<<<<<<<<<<<
 * ERR_AMODE                  = MPI_ERR_AMODE
 * ERR_BAD_FILE               = MPI_ERR_BAD_FILE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_ACCESS); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_ACCESS, __pyx_t_1) < 0) __PYX_ERR(19, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":52
 * # Input/Ouput
 * ERR_ACCESS                 = MPI_ERR_ACCESS
 * ERR_AMODE                  = MPI_ERR_AMODE             # <<<<<<<<<<<<<<
 * ERR_BAD_FILE               = MPI_ERR_BAD_FILE
 * ERR_FILE_EXISTS            = MPI_ERR_FILE_EXISTS
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_AMODE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_AMODE, __pyx_t_1) < 0) __PYX_ERR(19, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":53
 * ERR_ACCESS                 = MPI_ERR_ACCESS
 * ERR_AMODE                  = MPI_ERR_AMODE
 * ERR_BAD_FILE               = MPI_ERR_BAD_FILE             # <<<<<<<<<<<<<<
 * ERR_FILE_EXISTS            = MPI_ERR_FILE_EXISTS
 * ERR_FILE_IN_USE            = MPI_ERR_FILE_IN_USE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_BAD_FILE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_BAD_FILE, __pyx_t_1) < 0) __PYX_ERR(19, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":54
 * ERR_AMODE                  = MPI_ERR_AMODE
 * ERR_BAD_FILE               = MPI_ERR_BAD_FILE
 * ERR_FILE_EXISTS            = MPI_ERR_FILE_EXISTS             # <<<<<<<<<<<<<<
 * ERR_FILE_IN_USE            = MPI_ERR_FILE_IN_USE
 * ERR_NO_SPACE               = MPI_ERR_NO_SPACE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_FILE_EXISTS); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_FILE_EXISTS, __pyx_t_1) < 0) __PYX_ERR(19, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":55
 * ERR_BAD_FILE               = MPI_ERR_BAD_FILE
 * ERR_FILE_EXISTS            = MPI_ERR_FILE_EXISTS
 * ERR_FILE_IN_USE            = MPI_ERR_FILE_IN_USE             # <<<<<<<<<<<<<<
 * ERR_NO_SPACE               = MPI_ERR_NO_SPACE
 * ERR_NO_SUCH_FILE           = MPI_ERR_NO_SUCH_FILE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_FILE_IN_USE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_FILE_IN_USE, __pyx_t_1) < 0) __PYX_ERR(19, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":56
 * ERR_FILE_EXISTS            = MPI_ERR_FILE_EXISTS
 * ERR_FILE_IN_USE            = MPI_ERR_FILE_IN_USE
 * ERR_NO_SPACE               = MPI_ERR_NO_SPACE             # <<<<<<<<<<<<<<
 * ERR_NO_SUCH_FILE           = MPI_ERR_NO_SUCH_FILE
 * ERR_IO                     = MPI_ERR_IO
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_NO_SPACE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_NO_SPACE, __pyx_t_1) < 0) __PYX_ERR(19, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":57
 * ERR_FILE_IN_USE            = MPI_ERR_FILE_IN_USE
 * ERR_NO_SPACE               = MPI_ERR_NO_SPACE
 * ERR_NO_SUCH_FILE           = MPI_ERR_NO_SUCH_FILE             # <<<<<<<<<<<<<<
 * ERR_IO                     = MPI_ERR_IO
 * ERR_READ_ONLY              = MPI_ERR_READ_ONLY
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_NO_SUCH_FILE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_NO_SUCH_FILE, __pyx_t_1) < 0) __PYX_ERR(19, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":58
 * ERR_NO_SPACE               = MPI_ERR_NO_SPACE
 * ERR_NO_SUCH_FILE           = MPI_ERR_NO_SUCH_FILE
 * ERR_IO                     = MPI_ERR_IO             # <<<<<<<<<<<<<<
 * ERR_READ_ONLY              = MPI_ERR_READ_ONLY
 * ERR_CONVERSION             = MPI_ERR_CONVERSION
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_IO); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_IO, __pyx_t_1) < 0) __PYX_ERR(19, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":59
 * ERR_NO_SUCH_FILE           = MPI_ERR_NO_SUCH_FILE
 * ERR_IO                     = MPI_ERR_IO
 * ERR_READ_ONLY              = MPI_ERR_READ_ONLY             # <<<<<<<<<<<<<<
 * ERR_CONVERSION             = MPI_ERR_CONVERSION
 * ERR_DUP_DATAREP            = MPI_ERR_DUP_DATAREP
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_READ_ONLY); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_READ_ONLY, __pyx_t_1) < 0) __PYX_ERR(19, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":60
 * ERR_IO                     = MPI_ERR_IO
 * ERR_READ_ONLY              = MPI_ERR_READ_ONLY
 * ERR_CONVERSION             = MPI_ERR_CONVERSION             # <<<<<<<<<<<<<<
 * ERR_DUP_DATAREP            = MPI_ERR_DUP_DATAREP
 * ERR_UNSUPPORTED_DATAREP    = MPI_ERR_UNSUPPORTED_DATAREP
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_CONVERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_CONVERSION, __pyx_t_1) < 0) __PYX_ERR(19, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":61
 * ERR_READ_ONLY              = MPI_ERR_READ_ONLY
 * ERR_CONVERSION             = MPI_ERR_CONVERSION
 * ERR_DUP_DATAREP            = MPI_ERR_DUP_DATAREP             # <<<<<<<<<<<<<<
 * ERR_UNSUPPORTED_DATAREP    = MPI_ERR_UNSUPPORTED_DATAREP
 * ERR_UNSUPPORTED_OPERATION  = MPI_ERR_UNSUPPORTED_OPERATION
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_DUP_DATAREP); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_DUP_DATAREP, __pyx_t_1) < 0) __PYX_ERR(19, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":62
 * ERR_CONVERSION             = MPI_ERR_CONVERSION
 * ERR_DUP_DATAREP            = MPI_ERR_DUP_DATAREP
 * ERR_UNSUPPORTED_DATAREP    = MPI_ERR_UNSUPPORTED_DATAREP             # <<<<<<<<<<<<<<
 * ERR_UNSUPPORTED_OPERATION  = MPI_ERR_UNSUPPORTED_OPERATION
 * # Dynamic Process Management
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_UNSUPPORTED_DATAREP); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_UNSUPPORTED_DATAREP, __pyx_t_1) < 0) __PYX_ERR(19, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":63
 * ERR_DUP_DATAREP            = MPI_ERR_DUP_DATAREP
 * ERR_UNSUPPORTED_DATAREP    = MPI_ERR_UNSUPPORTED_DATAREP
 * ERR_UNSUPPORTED_OPERATION  = MPI_ERR_UNSUPPORTED_OPERATION             # <<<<<<<<<<<<<<
 * # Dynamic Process Management
 * ERR_NAME                   = MPI_ERR_NAME
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_UNSUPPORTED_OPERATION); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_UNSUPPORTED_OPERATION, __pyx_t_1) < 0) __PYX_ERR(19, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":65
 * ERR_UNSUPPORTED_OPERATION  = MPI_ERR_UNSUPPORTED_OPERATION
 * # Dynamic Process Management
 * ERR_NAME                   = MPI_ERR_NAME             # <<<<<<<<<<<<<<
 * ERR_NO_MEM                 = MPI_ERR_NO_MEM
 * ERR_NOT_SAME               = MPI_ERR_NOT_SAME
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_NAME, __pyx_t_1) < 0) __PYX_ERR(19, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":66
 * # Dynamic Process Management
 * ERR_NAME                   = MPI_ERR_NAME
 * ERR_NO_MEM                 = MPI_ERR_NO_MEM             # <<<<<<<<<<<<<<
 * ERR_NOT_SAME               = MPI_ERR_NOT_SAME
 * ERR_PORT                   = MPI_ERR_PORT
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_NO_MEM); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_NO_MEM, __pyx_t_1) < 0) __PYX_ERR(19, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":67
 * ERR_NAME                   = MPI_ERR_NAME
 * ERR_NO_MEM                 = MPI_ERR_NO_MEM
 * ERR_NOT_SAME               = MPI_ERR_NOT_SAME             # <<<<<<<<<<<<<<
 * ERR_PORT                   = MPI_ERR_PORT
 * ERR_QUOTA                  = MPI_ERR_QUOTA
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_NOT_SAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_NOT_SAME, __pyx_t_1) < 0) __PYX_ERR(19, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":68
 * ERR_NO_MEM                 = MPI_ERR_NO_MEM
 * ERR_NOT_SAME               = MPI_ERR_NOT_SAME
 * ERR_PORT                   = MPI_ERR_PORT             # <<<<<<<<<<<<<<
 * ERR_QUOTA                  = MPI_ERR_QUOTA
 * ERR_SERVICE                = MPI_ERR_SERVICE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_PORT); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_PORT, __pyx_t_1) < 0) __PYX_ERR(19, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":69
 * ERR_NOT_SAME               = MPI_ERR_NOT_SAME
 * ERR_PORT                   = MPI_ERR_PORT
 * ERR_QUOTA                  = MPI_ERR_QUOTA             # <<<<<<<<<<<<<<
 * ERR_SERVICE                = MPI_ERR_SERVICE
 * ERR_SPAWN                  = MPI_ERR_SPAWN
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_QUOTA); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_QUOTA, __pyx_t_1) < 0) __PYX_ERR(19, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":70
 * ERR_PORT                   = MPI_ERR_PORT
 * ERR_QUOTA                  = MPI_ERR_QUOTA
 * ERR_SERVICE                = MPI_ERR_SERVICE             # <<<<<<<<<<<<<<
 * ERR_SPAWN                  = MPI_ERR_SPAWN
 * # Windows
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_SERVICE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_SERVICE, __pyx_t_1) < 0) __PYX_ERR(19, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":71
 * ERR_QUOTA                  = MPI_ERR_QUOTA
 * ERR_SERVICE                = MPI_ERR_SERVICE
 * ERR_SPAWN                  = MPI_ERR_SPAWN             # <<<<<<<<<<<<<<
 * # Windows
 * ERR_BASE         = MPI_ERR_BASE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_SPAWN); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_SPAWN, __pyx_t_1) < 0) __PYX_ERR(19, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":73
 * ERR_SPAWN                  = MPI_ERR_SPAWN
 * # Windows
 * ERR_BASE         = MPI_ERR_BASE             # <<<<<<<<<<<<<<
 * ERR_SIZE         = MPI_ERR_SIZE
 * ERR_DISP         = MPI_ERR_DISP
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_BASE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_BASE, __pyx_t_1) < 0) __PYX_ERR(19, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":74
 * # Windows
 * ERR_BASE         = MPI_ERR_BASE
 * ERR_SIZE         = MPI_ERR_SIZE             # <<<<<<<<<<<<<<
 * ERR_DISP         = MPI_ERR_DISP
 * ERR_ASSERT       = MPI_ERR_ASSERT
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_SIZE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_SIZE, __pyx_t_1) < 0) __PYX_ERR(19, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":75
 * ERR_BASE         = MPI_ERR_BASE
 * ERR_SIZE         = MPI_ERR_SIZE
 * ERR_DISP         = MPI_ERR_DISP             # <<<<<<<<<<<<<<
 * ERR_ASSERT       = MPI_ERR_ASSERT
 * ERR_LOCKTYPE     = MPI_ERR_LOCKTYPE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_DISP); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_DISP, __pyx_t_1) < 0) __PYX_ERR(19, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":76
 * ERR_SIZE         = MPI_ERR_SIZE
 * ERR_DISP         = MPI_ERR_DISP
 * ERR_ASSERT       = MPI_ERR_ASSERT             # <<<<<<<<<<<<<<
 * ERR_LOCKTYPE     = MPI_ERR_LOCKTYPE
 * ERR_RMA_CONFLICT = MPI_ERR_RMA_CONFLICT
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_ASSERT); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_ASSERT, __pyx_t_1) < 0) __PYX_ERR(19, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":77
 * ERR_DISP         = MPI_ERR_DISP
 * ERR_ASSERT       = MPI_ERR_ASSERT
 * ERR_LOCKTYPE     = MPI_ERR_LOCKTYPE             # <<<<<<<<<<<<<<
 * ERR_RMA_CONFLICT = MPI_ERR_RMA_CONFLICT
 * ERR_RMA_SYNC     = MPI_ERR_RMA_SYNC
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_LOCKTYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_LOCKTYPE, __pyx_t_1) < 0) __PYX_ERR(19, 77, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":78
 * ERR_ASSERT       = MPI_ERR_ASSERT
 * ERR_LOCKTYPE     = MPI_ERR_LOCKTYPE
 * ERR_RMA_CONFLICT = MPI_ERR_RMA_CONFLICT             # <<<<<<<<<<<<<<
 * ERR_RMA_SYNC     = MPI_ERR_RMA_SYNC
 * ERR_RMA_RANGE    = MPI_ERR_RMA_RANGE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RMA_CONFLICT); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RMA_CONFLICT, __pyx_t_1) < 0) __PYX_ERR(19, 78, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":79
 * ERR_LOCKTYPE     = MPI_ERR_LOCKTYPE
 * ERR_RMA_CONFLICT = MPI_ERR_RMA_CONFLICT
 * ERR_RMA_SYNC     = MPI_ERR_RMA_SYNC             # <<<<<<<<<<<<<<
 * ERR_RMA_RANGE    = MPI_ERR_RMA_RANGE
 * ERR_RMA_ATTACH   = MPI_ERR_RMA_ATTACH
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RMA_SYNC); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RMA_SYNC, __pyx_t_1) < 0) __PYX_ERR(19, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":80
 * ERR_RMA_CONFLICT = MPI_ERR_RMA_CONFLICT
 * ERR_RMA_SYNC     = MPI_ERR_RMA_SYNC
 * ERR_RMA_RANGE    = MPI_ERR_RMA_RANGE             # <<<<<<<<<<<<<<
 * ERR_RMA_ATTACH   = MPI_ERR_RMA_ATTACH
 * ERR_RMA_SHARED   = MPI_ERR_RMA_SHARED
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RMA_RANGE); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RMA_RANGE, __pyx_t_1) < 0) __PYX_ERR(19, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":81
 * ERR_RMA_SYNC     = MPI_ERR_RMA_SYNC
 * ERR_RMA_RANGE    = MPI_ERR_RMA_RANGE
 * ERR_RMA_ATTACH   = MPI_ERR_RMA_ATTACH             # <<<<<<<<<<<<<<
 * ERR_RMA_SHARED   = MPI_ERR_RMA_SHARED
 * ERR_RMA_FLAVOR   = MPI_ERR_RMA_FLAVOR
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RMA_ATTACH); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RMA_ATTACH, __pyx_t_1) < 0) __PYX_ERR(19, 81, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":82
 * ERR_RMA_RANGE    = MPI_ERR_RMA_RANGE
 * ERR_RMA_ATTACH   = MPI_ERR_RMA_ATTACH
 * ERR_RMA_SHARED   = MPI_ERR_RMA_SHARED             # <<<<<<<<<<<<<<
 * ERR_RMA_FLAVOR   = MPI_ERR_RMA_FLAVOR
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RMA_SHARED); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RMA_SHARED, __pyx_t_1) < 0) __PYX_ERR(19, 82, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":83
 * ERR_RMA_ATTACH   = MPI_ERR_RMA_ATTACH
 * ERR_RMA_SHARED   = MPI_ERR_RMA_SHARED
 * ERR_RMA_FLAVOR   = MPI_ERR_RMA_FLAVOR             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_ERR_RMA_FLAVOR); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERR_RMA_FLAVOR, __pyx_t_1) < 0) __PYX_ERR(19, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":87
 * 
 * 
 * def Get_error_class(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Convert an *error code* into an *error class*
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_5Get_error_class, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Get_error_class, __pyx_t_1) < 0) __PYX_ERR(19, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":95
 *     return errorclass
 * 
 * def Get_error_string(int errorcode):             # <<<<<<<<<<<<<<
 *     """
 *     Return the *error string* for a given
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_7Get_error_string, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Get_error_string, __pyx_t_1) < 0) __PYX_ERR(19, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":106
 * 
 * 
 * def Add_error_class():             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error class* to the known error classes
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_9Add_error_class, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Add_error_class, __pyx_t_1) < 0) __PYX_ERR(19, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":114
 *     return errorclass
 * 
 * def Add_error_code(int errorclass):             # <<<<<<<<<<<<<<
 *     """
 *     Add an *error code* to an *error class*
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_11Add_error_code, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Add_error_code, __pyx_t_1) < 0) __PYX_ERR(19, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Exception.pyx":122
 *     return errorcode
 * 
 * def Add_error_string(int errorcode, string):             # <<<<<<<<<<<<<<
 *     """
 *     Associate an *error string* with an
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_13Add_error_string, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Add_error_string, __pyx_t_1) < 0) __PYX_ERR(19, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":45
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler, __pyx_n_s_f2py); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Errhandler.pyx":44
 *         return MPI_Errhandler_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Errhandler->tp_dict, __pyx_n_s_f2py, __pyx_t_3) < 0) __PYX_ERR(20, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Errhandler);

  /* "mpi4py/MPI/Errhandler.pyx":54
 * 
 * 
 * cdef Errhandler __ERRHANDLER_NULL__  = new_Errhandler(MPI_ERRHANDLER_NULL)             # <<<<<<<<<<<<<<
 * cdef Errhandler __ERRORS_RETURN__    = new_Errhandler(MPI_ERRORS_RETURN)
 * cdef Errhandler __ERRORS_ARE_FATAL__ = new_Errhandler(MPI_ERRORS_ARE_FATAL)
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Errhandler(MPI_ERRHANDLER_NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___ERRHANDLER_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___ERRHANDLER_NULL__, ((struct PyMPIErrhandlerObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":55
 * 
 * cdef Errhandler __ERRHANDLER_NULL__  = new_Errhandler(MPI_ERRHANDLER_NULL)
 * cdef Errhandler __ERRORS_RETURN__    = new_Errhandler(MPI_ERRORS_RETURN)             # <<<<<<<<<<<<<<
 * cdef Errhandler __ERRORS_ARE_FATAL__ = new_Errhandler(MPI_ERRORS_ARE_FATAL)
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Errhandler(MPI_ERRORS_RETURN)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___ERRORS_RETURN__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___ERRORS_RETURN__, ((struct PyMPIErrhandlerObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":56
 * cdef Errhandler __ERRHANDLER_NULL__  = new_Errhandler(MPI_ERRHANDLER_NULL)
 * cdef Errhandler __ERRORS_RETURN__    = new_Errhandler(MPI_ERRORS_RETURN)
 * cdef Errhandler __ERRORS_ARE_FATAL__ = new_Errhandler(MPI_ERRORS_ARE_FATAL)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Errhandler(MPI_ERRORS_ARE_FATAL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__, ((struct PyMPIErrhandlerObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Errhandler.pyx":62
 * # -----------------------------
 * 
 * ERRHANDLER_NULL  = __ERRHANDLER_NULL__  #: Null error handler             # <<<<<<<<<<<<<<
 * ERRORS_RETURN    = __ERRORS_RETURN__    #: Errors return error handler
 * ERRORS_ARE_FATAL = __ERRORS_ARE_FATAL__ #: Errors are fatal error handler
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERRHANDLER_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___ERRHANDLER_NULL__)) < 0) __PYX_ERR(20, 62, __pyx_L1_error)

  /* "mpi4py/MPI/Errhandler.pyx":63
 * 
 * ERRHANDLER_NULL  = __ERRHANDLER_NULL__  #: Null error handler
 * ERRORS_RETURN    = __ERRORS_RETURN__    #: Errors return error handler             # <<<<<<<<<<<<<<
 * ERRORS_ARE_FATAL = __ERRORS_ARE_FATAL__ #: Errors are fatal error handler
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERRORS_RETURN, ((PyObject *)__pyx_v_6mpi4py_3MPI___ERRORS_RETURN__)) < 0) __PYX_ERR(20, 63, __pyx_L1_error)

  /* "mpi4py/MPI/Errhandler.pyx":64
 * ERRHANDLER_NULL  = __ERRHANDLER_NULL__  #: Null error handler
 * ERRORS_RETURN    = __ERRORS_RETURN__    #: Errors return error handler
 * ERRORS_ARE_FATAL = __ERRORS_ARE_FATAL__ #: Errors are fatal error handler             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ERRORS_ARE_FATAL, ((PyObject *)__pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__)) < 0) __PYX_ERR(20, 64, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":3
 * # Storage order for arrays
 * # ------------------------
 * ORDER_C       = MPI_ORDER_C       #: C order (a.k.a. row major)             # <<<<<<<<<<<<<<
 * ORDER_FORTRAN = MPI_ORDER_FORTRAN #: Fortran order (a.k.a. column major)
 * ORDER_F       = MPI_ORDER_FORTRAN #: Convenience alias for ORDER_FORTRAN
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_ORDER_C); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ORDER_C, __pyx_t_3) < 0) __PYX_ERR(21, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":4
 * # ------------------------
 * ORDER_C       = MPI_ORDER_C       #: C order (a.k.a. row major)
 * ORDER_FORTRAN = MPI_ORDER_FORTRAN #: Fortran order (a.k.a. column major)             # <<<<<<<<<<<<<<
 * ORDER_F       = MPI_ORDER_FORTRAN #: Convenience alias for ORDER_FORTRAN
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_ORDER_FORTRAN); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ORDER_FORTRAN, __pyx_t_3) < 0) __PYX_ERR(21, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":5
 * ORDER_C       = MPI_ORDER_C       #: C order (a.k.a. row major)
 * ORDER_FORTRAN = MPI_ORDER_FORTRAN #: Fortran order (a.k.a. column major)
 * ORDER_F       = MPI_ORDER_FORTRAN #: Convenience alias for ORDER_FORTRAN             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_ORDER_FORTRAN); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ORDER_F, __pyx_t_3) < 0) __PYX_ERR(21, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":10
 * # Type classes for Fortran datatype matching
 * # ------------------------------------------
 * TYPECLASS_INTEGER = MPI_TYPECLASS_INTEGER             # <<<<<<<<<<<<<<
 * TYPECLASS_REAL    = MPI_TYPECLASS_REAL
 * TYPECLASS_COMPLEX = MPI_TYPECLASS_COMPLEX
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_TYPECLASS_INTEGER); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TYPECLASS_INTEGER, __pyx_t_3) < 0) __PYX_ERR(21, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":11
 * # ------------------------------------------
 * TYPECLASS_INTEGER = MPI_TYPECLASS_INTEGER
 * TYPECLASS_REAL    = MPI_TYPECLASS_REAL             # <<<<<<<<<<<<<<
 * TYPECLASS_COMPLEX = MPI_TYPECLASS_COMPLEX
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_TYPECLASS_REAL); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TYPECLASS_REAL, __pyx_t_3) < 0) __PYX_ERR(21, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":12
 * TYPECLASS_INTEGER = MPI_TYPECLASS_INTEGER
 * TYPECLASS_REAL    = MPI_TYPECLASS_REAL
 * TYPECLASS_COMPLEX = MPI_TYPECLASS_COMPLEX             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_TYPECLASS_COMPLEX); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TYPECLASS_COMPLEX, __pyx_t_3) < 0) __PYX_ERR(21, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":17
 * # Type of distributions (HPF-like arrays)
 * # ---------------------------------------
 * DISTRIBUTE_NONE      = MPI_DISTRIBUTE_NONE      #: Dimension not distributed             # <<<<<<<<<<<<<<
 * DISTRIBUTE_BLOCK     = MPI_DISTRIBUTE_BLOCK     #: Block distribution
 * DISTRIBUTE_CYCLIC    = MPI_DISTRIBUTE_CYCLIC    #: Cyclic distribution
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_DISTRIBUTE_NONE); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DISTRIBUTE_NONE, __pyx_t_3) < 0) __PYX_ERR(21, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":18
 * # ---------------------------------------
 * DISTRIBUTE_NONE      = MPI_DISTRIBUTE_NONE      #: Dimension not distributed
 * DISTRIBUTE_BLOCK     = MPI_DISTRIBUTE_BLOCK     #: Block distribution             # <<<<<<<<<<<<<<
 * DISTRIBUTE_CYCLIC    = MPI_DISTRIBUTE_CYCLIC    #: Cyclic distribution
 * DISTRIBUTE_DFLT_DARG = MPI_DISTRIBUTE_DFLT_DARG #: Default distribution
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_DISTRIBUTE_BLOCK); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DISTRIBUTE_BLOCK, __pyx_t_3) < 0) __PYX_ERR(21, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":19
 * DISTRIBUTE_NONE      = MPI_DISTRIBUTE_NONE      #: Dimension not distributed
 * DISTRIBUTE_BLOCK     = MPI_DISTRIBUTE_BLOCK     #: Block distribution
 * DISTRIBUTE_CYCLIC    = MPI_DISTRIBUTE_CYCLIC    #: Cyclic distribution             # <<<<<<<<<<<<<<
 * DISTRIBUTE_DFLT_DARG = MPI_DISTRIBUTE_DFLT_DARG #: Default distribution
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_DISTRIBUTE_CYCLIC); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DISTRIBUTE_CYCLIC, __pyx_t_3) < 0) __PYX_ERR(21, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":20
 * DISTRIBUTE_BLOCK     = MPI_DISTRIBUTE_BLOCK     #: Block distribution
 * DISTRIBUTE_CYCLIC    = MPI_DISTRIBUTE_CYCLIC    #: Cyclic distribution
 * DISTRIBUTE_DFLT_DARG = MPI_DISTRIBUTE_DFLT_DARG #: Default distribution             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_DISTRIBUTE_DFLT_DARG); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DISTRIBUTE_DFLT_DARG, __pyx_t_3) < 0) __PYX_ERR(21, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":25
 * # Combiner values for datatype decoding
 * # -------------------------------------
 * COMBINER_NAMED            = MPI_COMBINER_NAMED             # <<<<<<<<<<<<<<
 * COMBINER_DUP              = MPI_COMBINER_DUP
 * COMBINER_CONTIGUOUS       = MPI_COMBINER_CONTIGUOUS
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_NAMED); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_NAMED, __pyx_t_3) < 0) __PYX_ERR(21, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":26
 * # -------------------------------------
 * COMBINER_NAMED            = MPI_COMBINER_NAMED
 * COMBINER_DUP              = MPI_COMBINER_DUP             # <<<<<<<<<<<<<<
 * COMBINER_CONTIGUOUS       = MPI_COMBINER_CONTIGUOUS
 * COMBINER_VECTOR           = MPI_COMBINER_VECTOR
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_DUP); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_DUP, __pyx_t_3) < 0) __PYX_ERR(21, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":27
 * COMBINER_NAMED            = MPI_COMBINER_NAMED
 * COMBINER_DUP              = MPI_COMBINER_DUP
 * COMBINER_CONTIGUOUS       = MPI_COMBINER_CONTIGUOUS             # <<<<<<<<<<<<<<
 * COMBINER_VECTOR           = MPI_COMBINER_VECTOR
 * COMBINER_HVECTOR          = MPI_COMBINER_HVECTOR
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_CONTIGUOUS); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_CONTIGUOUS, __pyx_t_3) < 0) __PYX_ERR(21, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":28
 * COMBINER_DUP              = MPI_COMBINER_DUP
 * COMBINER_CONTIGUOUS       = MPI_COMBINER_CONTIGUOUS
 * COMBINER_VECTOR           = MPI_COMBINER_VECTOR             # <<<<<<<<<<<<<<
 * COMBINER_HVECTOR          = MPI_COMBINER_HVECTOR
 * COMBINER_INDEXED          = MPI_COMBINER_INDEXED
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_VECTOR); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_VECTOR, __pyx_t_3) < 0) __PYX_ERR(21, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":29
 * COMBINER_CONTIGUOUS       = MPI_COMBINER_CONTIGUOUS
 * COMBINER_VECTOR           = MPI_COMBINER_VECTOR
 * COMBINER_HVECTOR          = MPI_COMBINER_HVECTOR             # <<<<<<<<<<<<<<
 * COMBINER_INDEXED          = MPI_COMBINER_INDEXED
 * COMBINER_HINDEXED         = MPI_COMBINER_HINDEXED
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_HVECTOR); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_HVECTOR, __pyx_t_3) < 0) __PYX_ERR(21, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":30
 * COMBINER_VECTOR           = MPI_COMBINER_VECTOR
 * COMBINER_HVECTOR          = MPI_COMBINER_HVECTOR
 * COMBINER_INDEXED          = MPI_COMBINER_INDEXED             # <<<<<<<<<<<<<<
 * COMBINER_HINDEXED         = MPI_COMBINER_HINDEXED
 * COMBINER_INDEXED_BLOCK    = MPI_COMBINER_INDEXED_BLOCK
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_INDEXED); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_INDEXED, __pyx_t_3) < 0) __PYX_ERR(21, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":31
 * COMBINER_HVECTOR          = MPI_COMBINER_HVECTOR
 * COMBINER_INDEXED          = MPI_COMBINER_INDEXED
 * COMBINER_HINDEXED         = MPI_COMBINER_HINDEXED             # <<<<<<<<<<<<<<
 * COMBINER_INDEXED_BLOCK    = MPI_COMBINER_INDEXED_BLOCK
 * COMBINER_HINDEXED_BLOCK   = MPI_COMBINER_HINDEXED_BLOCK
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_HINDEXED); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_HINDEXED, __pyx_t_3) < 0) __PYX_ERR(21, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":32
 * COMBINER_INDEXED          = MPI_COMBINER_INDEXED
 * COMBINER_HINDEXED         = MPI_COMBINER_HINDEXED
 * COMBINER_INDEXED_BLOCK    = MPI_COMBINER_INDEXED_BLOCK             # <<<<<<<<<<<<<<
 * COMBINER_HINDEXED_BLOCK   = MPI_COMBINER_HINDEXED_BLOCK
 * COMBINER_STRUCT           = MPI_COMBINER_STRUCT
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_INDEXED_BLOCK); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_INDEXED_BLOCK, __pyx_t_3) < 0) __PYX_ERR(21, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":33
 * COMBINER_HINDEXED         = MPI_COMBINER_HINDEXED
 * COMBINER_INDEXED_BLOCK    = MPI_COMBINER_INDEXED_BLOCK
 * COMBINER_HINDEXED_BLOCK   = MPI_COMBINER_HINDEXED_BLOCK             # <<<<<<<<<<<<<<
 * COMBINER_STRUCT           = MPI_COMBINER_STRUCT
 * COMBINER_SUBARRAY         = MPI_COMBINER_SUBARRAY
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_HINDEXED_BLOCK); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_HINDEXED_BLOCK, __pyx_t_3) < 0) __PYX_ERR(21, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":34
 * COMBINER_INDEXED_BLOCK    = MPI_COMBINER_INDEXED_BLOCK
 * COMBINER_HINDEXED_BLOCK   = MPI_COMBINER_HINDEXED_BLOCK
 * COMBINER_STRUCT           = MPI_COMBINER_STRUCT             # <<<<<<<<<<<<<<
 * COMBINER_SUBARRAY         = MPI_COMBINER_SUBARRAY
 * COMBINER_DARRAY           = MPI_COMBINER_DARRAY
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_STRUCT); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_STRUCT, __pyx_t_3) < 0) __PYX_ERR(21, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":35
 * COMBINER_HINDEXED_BLOCK   = MPI_COMBINER_HINDEXED_BLOCK
 * COMBINER_STRUCT           = MPI_COMBINER_STRUCT
 * COMBINER_SUBARRAY         = MPI_COMBINER_SUBARRAY             # <<<<<<<<<<<<<<
 * COMBINER_DARRAY           = MPI_COMBINER_DARRAY
 * COMBINER_RESIZED          = MPI_COMBINER_RESIZED
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_SUBARRAY); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_SUBARRAY, __pyx_t_3) < 0) __PYX_ERR(21, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":36
 * COMBINER_STRUCT           = MPI_COMBINER_STRUCT
 * COMBINER_SUBARRAY         = MPI_COMBINER_SUBARRAY
 * COMBINER_DARRAY           = MPI_COMBINER_DARRAY             # <<<<<<<<<<<<<<
 * COMBINER_RESIZED          = MPI_COMBINER_RESIZED
 * COMBINER_F90_REAL         = MPI_COMBINER_F90_REAL
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_DARRAY); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_DARRAY, __pyx_t_3) < 0) __PYX_ERR(21, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":37
 * COMBINER_SUBARRAY         = MPI_COMBINER_SUBARRAY
 * COMBINER_DARRAY           = MPI_COMBINER_DARRAY
 * COMBINER_RESIZED          = MPI_COMBINER_RESIZED             # <<<<<<<<<<<<<<
 * COMBINER_F90_REAL         = MPI_COMBINER_F90_REAL
 * COMBINER_F90_COMPLEX      = MPI_COMBINER_F90_COMPLEX
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_RESIZED); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_RESIZED, __pyx_t_3) < 0) __PYX_ERR(21, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":38
 * COMBINER_DARRAY           = MPI_COMBINER_DARRAY
 * COMBINER_RESIZED          = MPI_COMBINER_RESIZED
 * COMBINER_F90_REAL         = MPI_COMBINER_F90_REAL             # <<<<<<<<<<<<<<
 * COMBINER_F90_COMPLEX      = MPI_COMBINER_F90_COMPLEX
 * COMBINER_F90_INTEGER      = MPI_COMBINER_F90_INTEGER
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_F90_REAL); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_F90_REAL, __pyx_t_3) < 0) __PYX_ERR(21, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":39
 * COMBINER_RESIZED          = MPI_COMBINER_RESIZED
 * COMBINER_F90_REAL         = MPI_COMBINER_F90_REAL
 * COMBINER_F90_COMPLEX      = MPI_COMBINER_F90_COMPLEX             # <<<<<<<<<<<<<<
 * COMBINER_F90_INTEGER      = MPI_COMBINER_F90_INTEGER
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_F90_COMPLEX); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_F90_COMPLEX, __pyx_t_3) < 0) __PYX_ERR(21, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":40
 * COMBINER_F90_REAL         = MPI_COMBINER_F90_REAL
 * COMBINER_F90_COMPLEX      = MPI_COMBINER_F90_COMPLEX
 * COMBINER_F90_INTEGER      = MPI_COMBINER_F90_INTEGER             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_COMBINER_F90_INTEGER); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMBINER_F90_INTEGER, __pyx_t_3) < 0) __PYX_ERR(21, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":129
 *         return datatype
 * 
 *     Create_dup = Dup #: convenience alias             # <<<<<<<<<<<<<<
 * 
 *     def Create_contiguous(self, int count):
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Dup); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Create_dup, __pyx_t_3) < 0) __PYX_ERR(21, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":219
 * 
 *     @classmethod
 *     def Create_struct(cls, blocklengths, displacements, datatypes):             # <<<<<<<<<<<<<<
 *         """
 *         Create an datatype from a general set of
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Create_struct); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Datatype.pyx":218
 *         return datatype
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_struct(cls, blocklengths, displacements, datatypes):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Create_struct, __pyx_t_1) < 0) __PYX_ERR(21, 219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":240
 * 
 *     def Create_subarray(self, sizes, subsizes, starts,
 *                         int order=ORDER_C):             # <<<<<<<<<<<<<<
 *         """
 *         Create a datatype for a subarray of
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ORDER_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__26 = __pyx_t_2;

  /* "mpi4py/MPI/Datatype.pyx":263
 *     def Create_darray(self, int size, int rank,
 *                       gsizes, distribs, dargs, psizes,
 *                       int order=ORDER_C):             # <<<<<<<<<<<<<<
 *         """
 *         Create a datatype representing an HPF-like
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ORDER_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(21, 263, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__27 = __pyx_t_2;

  /* "mpi4py/MPI/Datatype.pyx":286
 * 
 *     @classmethod
 *     def Create_f90_integer(cls, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded integer datatype
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Create_f90_integer); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Datatype.pyx":285
 *     # ------------------------------------------------
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_f90_integer(cls, int r):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Create_f90_integer, __pyx_t_3) < 0) __PYX_ERR(21, 286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":295
 * 
 *     @classmethod
 *     def Create_f90_real(cls, int p, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded real datatype
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Create_f90_real); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Datatype.pyx":294
 *         return datatype
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_f90_real(cls, int p, int r):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Create_f90_real, __pyx_t_1) < 0) __PYX_ERR(21, 295, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":304
 * 
 *     @classmethod
 *     def Create_f90_complex(cls, int p, int r):             # <<<<<<<<<<<<<<
 *         """
 *         Return a bounded complex datatype
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Create_f90_complex); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Datatype.pyx":303
 *         return datatype
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_f90_complex(cls, int p, int r):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Create_f90_complex, __pyx_t_3) < 0) __PYX_ERR(21, 304, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":313
 * 
 *     @classmethod
 *     def Match_size(cls, int typeclass, int size):             # <<<<<<<<<<<<<<
 *         """
 *         Find a datatype matching a specified size in bytes
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Match_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Datatype.pyx":312
 *         return datatype
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Match_size(cls, int typeclass, int size):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Match_size, __pyx_t_1) < 0) __PYX_ERR(21, 313, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":422
 *         return datatype
 * 
 *     Resized = Create_resized #: compatibility alias             # <<<<<<<<<<<<<<
 * 
 *     def Get_true_extent(self):
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Create_resized); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Resized, __pyx_t_1) < 0) __PYX_ERR(21, 422, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":765
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for datatypes
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Create_keyval); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Datatype.pyx":764
 *         CHKERR( MPI_Type_delete_attr(self.ob_mpi, keyval) )
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Create_keyval, __pyx_t_3) < 0) __PYX_ERR(21, 765, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":779
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for datatypes
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_Free_keyval); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Datatype.pyx":778
 *         return keyval
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Free_keyval(cls, int keyval):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_Free_keyval, __pyx_t_1) < 0) __PYX_ERR(21, 779, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":825
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype, __pyx_n_s_f2py); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 825, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Datatype.pyx":824
 *         return MPI_Type_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Datatype->tp_dict, __pyx_n_s_f2py, __pyx_t_3) < 0) __PYX_ERR(21, 825, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Datatype);

  /* "mpi4py/MPI/Datatype.pyx":836
 * # -----------------
 * 
 * def Get_address(location):             # <<<<<<<<<<<<<<
 *     """
 *     Get the address of a location in memory
 */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_15Get_address, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Get_address, __pyx_t_3) < 0) __PYX_ERR(21, 836, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":847
 *     return address
 * 
 * def Aint_add(Aint base, Aint disp):             # <<<<<<<<<<<<<<
 *     """
 *     Return the sum of base address and displacement
 */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_17Aint_add, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Aint_add, __pyx_t_3) < 0) __PYX_ERR(21, 847, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":853
 *     return MPI_Aint_add(base, disp)
 * 
 * def Aint_diff(Aint addr1, Aint addr2):             # <<<<<<<<<<<<<<
 *     """
 *     Return the difference between absolute addresses
 */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_19Aint_diff, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Aint_diff, __pyx_t_3) < 0) __PYX_ERR(21, 853, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":860
 * 
 * 
 * cdef Datatype __DATATYPE_NULL__ = new_Datatype( MPI_DATATYPE_NULL )             # <<<<<<<<<<<<<<
 * 
 * cdef Datatype __UB__ = new_Datatype( MPI_UB )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_DATATYPE_NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 860, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___DATATYPE_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___DATATYPE_NULL__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":862
 * cdef Datatype __DATATYPE_NULL__ = new_Datatype( MPI_DATATYPE_NULL )
 * 
 * cdef Datatype __UB__ = new_Datatype( MPI_UB )             # <<<<<<<<<<<<<<
 * cdef Datatype __LB__ = new_Datatype( MPI_LB )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UB)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 862, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UB__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UB__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":863
 * 
 * cdef Datatype __UB__ = new_Datatype( MPI_UB )
 * cdef Datatype __LB__ = new_Datatype( MPI_LB )             # <<<<<<<<<<<<<<
 * 
 * cdef Datatype __PACKED__ = new_Datatype( MPI_PACKED )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LB)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LB__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LB__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":865
 * cdef Datatype __LB__ = new_Datatype( MPI_LB )
 * 
 * cdef Datatype __PACKED__ = new_Datatype( MPI_PACKED )             # <<<<<<<<<<<<<<
 * cdef Datatype __BYTE__   = new_Datatype( MPI_BYTE   )
 * cdef Datatype __AINT__   = new_Datatype( MPI_AINT   )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_PACKED)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___PACKED__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___PACKED__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":866
 * 
 * cdef Datatype __PACKED__ = new_Datatype( MPI_PACKED )
 * cdef Datatype __BYTE__   = new_Datatype( MPI_BYTE   )             # <<<<<<<<<<<<<<
 * cdef Datatype __AINT__   = new_Datatype( MPI_AINT   )
 * cdef Datatype __OFFSET__ = new_Datatype( MPI_OFFSET )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_BYTE)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 866, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___BYTE__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___BYTE__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":867
 * cdef Datatype __PACKED__ = new_Datatype( MPI_PACKED )
 * cdef Datatype __BYTE__   = new_Datatype( MPI_BYTE   )
 * cdef Datatype __AINT__   = new_Datatype( MPI_AINT   )             # <<<<<<<<<<<<<<
 * cdef Datatype __OFFSET__ = new_Datatype( MPI_OFFSET )
 * cdef Datatype __COUNT__  = new_Datatype( MPI_COUNT  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_AINT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___AINT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___AINT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":868
 * cdef Datatype __BYTE__   = new_Datatype( MPI_BYTE   )
 * cdef Datatype __AINT__   = new_Datatype( MPI_AINT   )
 * cdef Datatype __OFFSET__ = new_Datatype( MPI_OFFSET )             # <<<<<<<<<<<<<<
 * cdef Datatype __COUNT__  = new_Datatype( MPI_COUNT  )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_OFFSET)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___OFFSET__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___OFFSET__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":869
 * cdef Datatype __AINT__   = new_Datatype( MPI_AINT   )
 * cdef Datatype __OFFSET__ = new_Datatype( MPI_OFFSET )
 * cdef Datatype __COUNT__  = new_Datatype( MPI_COUNT  )             # <<<<<<<<<<<<<<
 * 
 * cdef Datatype __CHAR__               = new_Datatype( MPI_CHAR               )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_COUNT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 869, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COUNT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COUNT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":871
 * cdef Datatype __COUNT__  = new_Datatype( MPI_COUNT  )
 * 
 * cdef Datatype __CHAR__               = new_Datatype( MPI_CHAR               )             # <<<<<<<<<<<<<<
 * cdef Datatype __WCHAR__              = new_Datatype( MPI_WCHAR              )
 * cdef Datatype __SIGNED_CHAR__        = new_Datatype( MPI_SIGNED_CHAR        )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_CHAR)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 871, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___CHAR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___CHAR__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":872
 * 
 * cdef Datatype __CHAR__               = new_Datatype( MPI_CHAR               )
 * cdef Datatype __WCHAR__              = new_Datatype( MPI_WCHAR              )             # <<<<<<<<<<<<<<
 * cdef Datatype __SIGNED_CHAR__        = new_Datatype( MPI_SIGNED_CHAR        )
 * cdef Datatype __SHORT__              = new_Datatype( MPI_SHORT              )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_WCHAR)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 872, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___WCHAR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___WCHAR__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":873
 * cdef Datatype __CHAR__               = new_Datatype( MPI_CHAR               )
 * cdef Datatype __WCHAR__              = new_Datatype( MPI_WCHAR              )
 * cdef Datatype __SIGNED_CHAR__        = new_Datatype( MPI_SIGNED_CHAR        )             # <<<<<<<<<<<<<<
 * cdef Datatype __SHORT__              = new_Datatype( MPI_SHORT              )
 * cdef Datatype __INT__                = new_Datatype( MPI_INT                )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_SIGNED_CHAR)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":874
 * cdef Datatype __WCHAR__              = new_Datatype( MPI_WCHAR              )
 * cdef Datatype __SIGNED_CHAR__        = new_Datatype( MPI_SIGNED_CHAR        )
 * cdef Datatype __SHORT__              = new_Datatype( MPI_SHORT              )             # <<<<<<<<<<<<<<
 * cdef Datatype __INT__                = new_Datatype( MPI_INT                )
 * cdef Datatype __LONG__               = new_Datatype( MPI_LONG               )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_SHORT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___SHORT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":875
 * cdef Datatype __SIGNED_CHAR__        = new_Datatype( MPI_SIGNED_CHAR        )
 * cdef Datatype __SHORT__              = new_Datatype( MPI_SHORT              )
 * cdef Datatype __INT__                = new_Datatype( MPI_INT                )             # <<<<<<<<<<<<<<
 * cdef Datatype __LONG__               = new_Datatype( MPI_LONG               )
 * cdef Datatype __LONG_LONG__          = new_Datatype( MPI_LONG_LONG          )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":876
 * cdef Datatype __SHORT__              = new_Datatype( MPI_SHORT              )
 * cdef Datatype __INT__                = new_Datatype( MPI_INT                )
 * cdef Datatype __LONG__               = new_Datatype( MPI_LONG               )             # <<<<<<<<<<<<<<
 * cdef Datatype __LONG_LONG__          = new_Datatype( MPI_LONG_LONG          )
 * cdef Datatype __UNSIGNED_CHAR__      = new_Datatype( MPI_UNSIGNED_CHAR      )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LONG)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 876, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LONG__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":877
 * cdef Datatype __INT__                = new_Datatype( MPI_INT                )
 * cdef Datatype __LONG__               = new_Datatype( MPI_LONG               )
 * cdef Datatype __LONG_LONG__          = new_Datatype( MPI_LONG_LONG          )             # <<<<<<<<<<<<<<
 * cdef Datatype __UNSIGNED_CHAR__      = new_Datatype( MPI_UNSIGNED_CHAR      )
 * cdef Datatype __UNSIGNED_SHORT__     = new_Datatype( MPI_UNSIGNED_SHORT     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LONG_LONG)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_LONG__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LONG_LONG__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":878
 * cdef Datatype __LONG__               = new_Datatype( MPI_LONG               )
 * cdef Datatype __LONG_LONG__          = new_Datatype( MPI_LONG_LONG          )
 * cdef Datatype __UNSIGNED_CHAR__      = new_Datatype( MPI_UNSIGNED_CHAR      )             # <<<<<<<<<<<<<<
 * cdef Datatype __UNSIGNED_SHORT__     = new_Datatype( MPI_UNSIGNED_SHORT     )
 * cdef Datatype __UNSIGNED__           = new_Datatype( MPI_UNSIGNED           )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UNSIGNED_CHAR)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":879
 * cdef Datatype __LONG_LONG__          = new_Datatype( MPI_LONG_LONG          )
 * cdef Datatype __UNSIGNED_CHAR__      = new_Datatype( MPI_UNSIGNED_CHAR      )
 * cdef Datatype __UNSIGNED_SHORT__     = new_Datatype( MPI_UNSIGNED_SHORT     )             # <<<<<<<<<<<<<<
 * cdef Datatype __UNSIGNED__           = new_Datatype( MPI_UNSIGNED           )
 * cdef Datatype __UNSIGNED_LONG__      = new_Datatype( MPI_UNSIGNED_LONG      )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UNSIGNED_SHORT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 879, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":880
 * cdef Datatype __UNSIGNED_CHAR__      = new_Datatype( MPI_UNSIGNED_CHAR      )
 * cdef Datatype __UNSIGNED_SHORT__     = new_Datatype( MPI_UNSIGNED_SHORT     )
 * cdef Datatype __UNSIGNED__           = new_Datatype( MPI_UNSIGNED           )             # <<<<<<<<<<<<<<
 * cdef Datatype __UNSIGNED_LONG__      = new_Datatype( MPI_UNSIGNED_LONG      )
 * cdef Datatype __UNSIGNED_LONG_LONG__ = new_Datatype( MPI_UNSIGNED_LONG_LONG )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UNSIGNED)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 880, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UNSIGNED__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":881
 * cdef Datatype __UNSIGNED_SHORT__     = new_Datatype( MPI_UNSIGNED_SHORT     )
 * cdef Datatype __UNSIGNED__           = new_Datatype( MPI_UNSIGNED           )
 * cdef Datatype __UNSIGNED_LONG__      = new_Datatype( MPI_UNSIGNED_LONG      )             # <<<<<<<<<<<<<<
 * cdef Datatype __UNSIGNED_LONG_LONG__ = new_Datatype( MPI_UNSIGNED_LONG_LONG )
 * cdef Datatype __FLOAT__              = new_Datatype( MPI_FLOAT              )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UNSIGNED_LONG)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 881, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":882
 * cdef Datatype __UNSIGNED__           = new_Datatype( MPI_UNSIGNED           )
 * cdef Datatype __UNSIGNED_LONG__      = new_Datatype( MPI_UNSIGNED_LONG      )
 * cdef Datatype __UNSIGNED_LONG_LONG__ = new_Datatype( MPI_UNSIGNED_LONG_LONG )             # <<<<<<<<<<<<<<
 * cdef Datatype __FLOAT__              = new_Datatype( MPI_FLOAT              )
 * cdef Datatype __DOUBLE__             = new_Datatype( MPI_DOUBLE             )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UNSIGNED_LONG_LONG)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":883
 * cdef Datatype __UNSIGNED_LONG__      = new_Datatype( MPI_UNSIGNED_LONG      )
 * cdef Datatype __UNSIGNED_LONG_LONG__ = new_Datatype( MPI_UNSIGNED_LONG_LONG )
 * cdef Datatype __FLOAT__              = new_Datatype( MPI_FLOAT              )             # <<<<<<<<<<<<<<
 * cdef Datatype __DOUBLE__             = new_Datatype( MPI_DOUBLE             )
 * cdef Datatype __LONG_DOUBLE__        = new_Datatype( MPI_LONG_DOUBLE        )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_FLOAT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___FLOAT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":884
 * cdef Datatype __UNSIGNED_LONG_LONG__ = new_Datatype( MPI_UNSIGNED_LONG_LONG )
 * cdef Datatype __FLOAT__              = new_Datatype( MPI_FLOAT              )
 * cdef Datatype __DOUBLE__             = new_Datatype( MPI_DOUBLE             )             # <<<<<<<<<<<<<<
 * cdef Datatype __LONG_DOUBLE__        = new_Datatype( MPI_LONG_DOUBLE        )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_DOUBLE)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___DOUBLE__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":885
 * cdef Datatype __FLOAT__              = new_Datatype( MPI_FLOAT              )
 * cdef Datatype __DOUBLE__             = new_Datatype( MPI_DOUBLE             )
 * cdef Datatype __LONG_DOUBLE__        = new_Datatype( MPI_LONG_DOUBLE        )             # <<<<<<<<<<<<<<
 * 
 * cdef Datatype __C_BOOL__                = new_Datatype( MPI_C_BOOL      )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LONG_DOUBLE)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":887
 * cdef Datatype __LONG_DOUBLE__        = new_Datatype( MPI_LONG_DOUBLE        )
 * 
 * cdef Datatype __C_BOOL__                = new_Datatype( MPI_C_BOOL      )             # <<<<<<<<<<<<<<
 * cdef Datatype __INT8_T__                = new_Datatype( MPI_INT8_T      )
 * cdef Datatype __INT16_T__               = new_Datatype( MPI_INT16_T     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_C_BOOL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___C_BOOL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___C_BOOL__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":888
 * 
 * cdef Datatype __C_BOOL__                = new_Datatype( MPI_C_BOOL      )
 * cdef Datatype __INT8_T__                = new_Datatype( MPI_INT8_T      )             # <<<<<<<<<<<<<<
 * cdef Datatype __INT16_T__               = new_Datatype( MPI_INT16_T     )
 * cdef Datatype __INT32_T__               = new_Datatype( MPI_INT32_T     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INT8_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INT8_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INT8_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":889
 * cdef Datatype __C_BOOL__                = new_Datatype( MPI_C_BOOL      )
 * cdef Datatype __INT8_T__                = new_Datatype( MPI_INT8_T      )
 * cdef Datatype __INT16_T__               = new_Datatype( MPI_INT16_T     )             # <<<<<<<<<<<<<<
 * cdef Datatype __INT32_T__               = new_Datatype( MPI_INT32_T     )
 * cdef Datatype __INT64_T__               = new_Datatype( MPI_INT64_T     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INT16_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INT16_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INT16_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":890
 * cdef Datatype __INT8_T__                = new_Datatype( MPI_INT8_T      )
 * cdef Datatype __INT16_T__               = new_Datatype( MPI_INT16_T     )
 * cdef Datatype __INT32_T__               = new_Datatype( MPI_INT32_T     )             # <<<<<<<<<<<<<<
 * cdef Datatype __INT64_T__               = new_Datatype( MPI_INT64_T     )
 * cdef Datatype __UINT8_T__               = new_Datatype( MPI_UINT8_T     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INT32_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INT32_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INT32_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":891
 * cdef Datatype __INT16_T__               = new_Datatype( MPI_INT16_T     )
 * cdef Datatype __INT32_T__               = new_Datatype( MPI_INT32_T     )
 * cdef Datatype __INT64_T__               = new_Datatype( MPI_INT64_T     )             # <<<<<<<<<<<<<<
 * cdef Datatype __UINT8_T__               = new_Datatype( MPI_UINT8_T     )
 * cdef Datatype __UINT16_T__              = new_Datatype( MPI_UINT16_T    )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INT64_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INT64_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INT64_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":892
 * cdef Datatype __INT32_T__               = new_Datatype( MPI_INT32_T     )
 * cdef Datatype __INT64_T__               = new_Datatype( MPI_INT64_T     )
 * cdef Datatype __UINT8_T__               = new_Datatype( MPI_UINT8_T     )             # <<<<<<<<<<<<<<
 * cdef Datatype __UINT16_T__              = new_Datatype( MPI_UINT16_T    )
 * cdef Datatype __UINT32_T__              = new_Datatype( MPI_UINT32_T    )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UINT8_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UINT8_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UINT8_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":893
 * cdef Datatype __INT64_T__               = new_Datatype( MPI_INT64_T     )
 * cdef Datatype __UINT8_T__               = new_Datatype( MPI_UINT8_T     )
 * cdef Datatype __UINT16_T__              = new_Datatype( MPI_UINT16_T    )             # <<<<<<<<<<<<<<
 * cdef Datatype __UINT32_T__              = new_Datatype( MPI_UINT32_T    )
 * cdef Datatype __UINT64_T__              = new_Datatype( MPI_UINT64_T    )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UINT16_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UINT16_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UINT16_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":894
 * cdef Datatype __UINT8_T__               = new_Datatype( MPI_UINT8_T     )
 * cdef Datatype __UINT16_T__              = new_Datatype( MPI_UINT16_T    )
 * cdef Datatype __UINT32_T__              = new_Datatype( MPI_UINT32_T    )             # <<<<<<<<<<<<<<
 * cdef Datatype __UINT64_T__              = new_Datatype( MPI_UINT64_T    )
 * cdef Datatype __C_COMPLEX__             = new_Datatype(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UINT32_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UINT32_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UINT32_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":895
 * cdef Datatype __UINT16_T__              = new_Datatype( MPI_UINT16_T    )
 * cdef Datatype __UINT32_T__              = new_Datatype( MPI_UINT32_T    )
 * cdef Datatype __UINT64_T__              = new_Datatype( MPI_UINT64_T    )             # <<<<<<<<<<<<<<
 * cdef Datatype __C_COMPLEX__             = new_Datatype(
 *                                               MPI_C_COMPLEX             )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_UINT64_T)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___UINT64_T__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___UINT64_T__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":896
 * cdef Datatype __UINT32_T__              = new_Datatype( MPI_UINT32_T    )
 * cdef Datatype __UINT64_T__              = new_Datatype( MPI_UINT64_T    )
 * cdef Datatype __C_COMPLEX__             = new_Datatype(             # <<<<<<<<<<<<<<
 *                                               MPI_C_COMPLEX             )
 * cdef Datatype __C_FLOAT_COMPLEX__       = new_Datatype(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_C_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___C_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___C_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":898
 * cdef Datatype __C_COMPLEX__             = new_Datatype(
 *                                               MPI_C_COMPLEX             )
 * cdef Datatype __C_FLOAT_COMPLEX__       = new_Datatype(             # <<<<<<<<<<<<<<
 *                                               MPI_C_FLOAT_COMPLEX       )
 * cdef Datatype __C_DOUBLE_COMPLEX__      = new_Datatype(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_C_FLOAT_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":900
 * cdef Datatype __C_FLOAT_COMPLEX__       = new_Datatype(
 *                                               MPI_C_FLOAT_COMPLEX       )
 * cdef Datatype __C_DOUBLE_COMPLEX__      = new_Datatype(             # <<<<<<<<<<<<<<
 *                                               MPI_C_DOUBLE_COMPLEX      )
 * cdef Datatype __C_LONG_DOUBLE_COMPLEX__ = new_Datatype(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_C_DOUBLE_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":902
 * cdef Datatype __C_DOUBLE_COMPLEX__      = new_Datatype(
 *                                               MPI_C_DOUBLE_COMPLEX      )
 * cdef Datatype __C_LONG_DOUBLE_COMPLEX__ = new_Datatype(             # <<<<<<<<<<<<<<
 *                                               MPI_C_LONG_DOUBLE_COMPLEX )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_C_LONG_DOUBLE_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":905
 *                                               MPI_C_LONG_DOUBLE_COMPLEX )
 * 
 * cdef Datatype __CXX_BOOL__                = new_Datatype( MPI_CXX_BOOL      )             # <<<<<<<<<<<<<<
 * cdef Datatype __CXX_FLOAT_COMPLEX__       = new_Datatype(
 *                                                 MPI_CXX_FLOAT_COMPLEX       )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_CXX_BOOL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_BOOL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___CXX_BOOL__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":906
 * 
 * cdef Datatype __CXX_BOOL__                = new_Datatype( MPI_CXX_BOOL      )
 * cdef Datatype __CXX_FLOAT_COMPLEX__       = new_Datatype(             # <<<<<<<<<<<<<<
 *                                                 MPI_CXX_FLOAT_COMPLEX       )
 * cdef Datatype __CXX_DOUBLE_COMPLEX__      = new_Datatype(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_CXX_FLOAT_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":908
 * cdef Datatype __CXX_FLOAT_COMPLEX__       = new_Datatype(
 *                                                 MPI_CXX_FLOAT_COMPLEX       )
 * cdef Datatype __CXX_DOUBLE_COMPLEX__      = new_Datatype(             # <<<<<<<<<<<<<<
 *                                                 MPI_CXX_DOUBLE_COMPLEX      )
 * cdef Datatype __CXX_LONG_DOUBLE_COMPLEX__ = new_Datatype(
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_CXX_DOUBLE_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":910
 * cdef Datatype __CXX_DOUBLE_COMPLEX__      = new_Datatype(
 *                                                 MPI_CXX_DOUBLE_COMPLEX      )
 * cdef Datatype __CXX_LONG_DOUBLE_COMPLEX__ = new_Datatype(             # <<<<<<<<<<<<<<
 *                                                 MPI_CXX_LONG_DOUBLE_COMPLEX )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_CXX_LONG_DOUBLE_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":913
 *                                                 MPI_CXX_LONG_DOUBLE_COMPLEX )
 * 
 * cdef Datatype __SHORT_INT__        = new_Datatype( MPI_SHORT_INT       )             # <<<<<<<<<<<<<<
 * cdef Datatype __TWOINT__           = new_Datatype( MPI_2INT            )
 * cdef Datatype __LONG_INT__         = new_Datatype( MPI_LONG_INT        )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_SHORT_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT_INT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___SHORT_INT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":914
 * 
 * cdef Datatype __SHORT_INT__        = new_Datatype( MPI_SHORT_INT       )
 * cdef Datatype __TWOINT__           = new_Datatype( MPI_2INT            )             # <<<<<<<<<<<<<<
 * cdef Datatype __LONG_INT__         = new_Datatype( MPI_LONG_INT        )
 * cdef Datatype __FLOAT_INT__        = new_Datatype( MPI_FLOAT_INT       )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_2INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___TWOINT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___TWOINT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":915
 * cdef Datatype __SHORT_INT__        = new_Datatype( MPI_SHORT_INT       )
 * cdef Datatype __TWOINT__           = new_Datatype( MPI_2INT            )
 * cdef Datatype __LONG_INT__         = new_Datatype( MPI_LONG_INT        )             # <<<<<<<<<<<<<<
 * cdef Datatype __FLOAT_INT__        = new_Datatype( MPI_FLOAT_INT       )
 * cdef Datatype __DOUBLE_INT__       = new_Datatype( MPI_DOUBLE_INT      )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LONG_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_INT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LONG_INT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":916
 * cdef Datatype __TWOINT__           = new_Datatype( MPI_2INT            )
 * cdef Datatype __LONG_INT__         = new_Datatype( MPI_LONG_INT        )
 * cdef Datatype __FLOAT_INT__        = new_Datatype( MPI_FLOAT_INT       )             # <<<<<<<<<<<<<<
 * cdef Datatype __DOUBLE_INT__       = new_Datatype( MPI_DOUBLE_INT      )
 * cdef Datatype __LONG_DOUBLE_INT__  = new_Datatype( MPI_LONG_DOUBLE_INT )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_FLOAT_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT_INT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___FLOAT_INT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":917
 * cdef Datatype __LONG_INT__         = new_Datatype( MPI_LONG_INT        )
 * cdef Datatype __FLOAT_INT__        = new_Datatype( MPI_FLOAT_INT       )
 * cdef Datatype __DOUBLE_INT__       = new_Datatype( MPI_DOUBLE_INT      )             # <<<<<<<<<<<<<<
 * cdef Datatype __LONG_DOUBLE_INT__  = new_Datatype( MPI_LONG_DOUBLE_INT )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_DOUBLE_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_INT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___DOUBLE_INT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":918
 * cdef Datatype __FLOAT_INT__        = new_Datatype( MPI_FLOAT_INT       )
 * cdef Datatype __DOUBLE_INT__       = new_Datatype( MPI_DOUBLE_INT      )
 * cdef Datatype __LONG_DOUBLE_INT__  = new_Datatype( MPI_LONG_DOUBLE_INT )             # <<<<<<<<<<<<<<
 * 
 * cdef Datatype __CHARACTER__        = new_Datatype( MPI_CHARACTER        )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LONG_DOUBLE_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":920
 * cdef Datatype __LONG_DOUBLE_INT__  = new_Datatype( MPI_LONG_DOUBLE_INT )
 * 
 * cdef Datatype __CHARACTER__        = new_Datatype( MPI_CHARACTER        )             # <<<<<<<<<<<<<<
 * cdef Datatype __LOGICAL__          = new_Datatype( MPI_LOGICAL          )
 * cdef Datatype __INTEGER__          = new_Datatype( MPI_INTEGER          )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_CHARACTER)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___CHARACTER__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___CHARACTER__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":921
 * 
 * cdef Datatype __CHARACTER__        = new_Datatype( MPI_CHARACTER        )
 * cdef Datatype __LOGICAL__          = new_Datatype( MPI_LOGICAL          )             # <<<<<<<<<<<<<<
 * cdef Datatype __INTEGER__          = new_Datatype( MPI_INTEGER          )
 * cdef Datatype __REAL__             = new_Datatype( MPI_REAL             )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LOGICAL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LOGICAL__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":922
 * cdef Datatype __CHARACTER__        = new_Datatype( MPI_CHARACTER        )
 * cdef Datatype __LOGICAL__          = new_Datatype( MPI_LOGICAL          )
 * cdef Datatype __INTEGER__          = new_Datatype( MPI_INTEGER          )             # <<<<<<<<<<<<<<
 * cdef Datatype __REAL__             = new_Datatype( MPI_REAL             )
 * cdef Datatype __DOUBLE_PRECISION__ = new_Datatype( MPI_DOUBLE_PRECISION )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INTEGER)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INTEGER__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":923
 * cdef Datatype __LOGICAL__          = new_Datatype( MPI_LOGICAL          )
 * cdef Datatype __INTEGER__          = new_Datatype( MPI_INTEGER          )
 * cdef Datatype __REAL__             = new_Datatype( MPI_REAL             )             # <<<<<<<<<<<<<<
 * cdef Datatype __DOUBLE_PRECISION__ = new_Datatype( MPI_DOUBLE_PRECISION )
 * cdef Datatype __COMPLEX__          = new_Datatype( MPI_COMPLEX          )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_REAL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REAL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REAL__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":924
 * cdef Datatype __INTEGER__          = new_Datatype( MPI_INTEGER          )
 * cdef Datatype __REAL__             = new_Datatype( MPI_REAL             )
 * cdef Datatype __DOUBLE_PRECISION__ = new_Datatype( MPI_DOUBLE_PRECISION )             # <<<<<<<<<<<<<<
 * cdef Datatype __COMPLEX__          = new_Datatype( MPI_COMPLEX          )
 * cdef Datatype __DOUBLE_COMPLEX__   = new_Datatype( MPI_DOUBLE_COMPLEX   )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_DOUBLE_PRECISION)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":925
 * cdef Datatype __REAL__             = new_Datatype( MPI_REAL             )
 * cdef Datatype __DOUBLE_PRECISION__ = new_Datatype( MPI_DOUBLE_PRECISION )
 * cdef Datatype __COMPLEX__          = new_Datatype( MPI_COMPLEX          )             # <<<<<<<<<<<<<<
 * cdef Datatype __DOUBLE_COMPLEX__   = new_Datatype( MPI_DOUBLE_COMPLEX   )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":926
 * cdef Datatype __DOUBLE_PRECISION__ = new_Datatype( MPI_DOUBLE_PRECISION )
 * cdef Datatype __COMPLEX__          = new_Datatype( MPI_COMPLEX          )
 * cdef Datatype __DOUBLE_COMPLEX__   = new_Datatype( MPI_DOUBLE_COMPLEX   )             # <<<<<<<<<<<<<<
 * 
 * cdef Datatype __LOGICAL1__  = new_Datatype( MPI_LOGICAL1  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_DOUBLE_COMPLEX)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":928
 * cdef Datatype __DOUBLE_COMPLEX__   = new_Datatype( MPI_DOUBLE_COMPLEX   )
 * 
 * cdef Datatype __LOGICAL1__  = new_Datatype( MPI_LOGICAL1  )             # <<<<<<<<<<<<<<
 * cdef Datatype __LOGICAL2__  = new_Datatype( MPI_LOGICAL2  )
 * cdef Datatype __LOGICAL4__  = new_Datatype( MPI_LOGICAL4  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LOGICAL1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL1__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LOGICAL1__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":929
 * 
 * cdef Datatype __LOGICAL1__  = new_Datatype( MPI_LOGICAL1  )
 * cdef Datatype __LOGICAL2__  = new_Datatype( MPI_LOGICAL2  )             # <<<<<<<<<<<<<<
 * cdef Datatype __LOGICAL4__  = new_Datatype( MPI_LOGICAL4  )
 * cdef Datatype __LOGICAL8__  = new_Datatype( MPI_LOGICAL8  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LOGICAL2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL2__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LOGICAL2__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":930
 * cdef Datatype __LOGICAL1__  = new_Datatype( MPI_LOGICAL1  )
 * cdef Datatype __LOGICAL2__  = new_Datatype( MPI_LOGICAL2  )
 * cdef Datatype __LOGICAL4__  = new_Datatype( MPI_LOGICAL4  )             # <<<<<<<<<<<<<<
 * cdef Datatype __LOGICAL8__  = new_Datatype( MPI_LOGICAL8  )
 * cdef Datatype __INTEGER1__  = new_Datatype( MPI_INTEGER1  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LOGICAL4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL4__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LOGICAL4__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":931
 * cdef Datatype __LOGICAL2__  = new_Datatype( MPI_LOGICAL2  )
 * cdef Datatype __LOGICAL4__  = new_Datatype( MPI_LOGICAL4  )
 * cdef Datatype __LOGICAL8__  = new_Datatype( MPI_LOGICAL8  )             # <<<<<<<<<<<<<<
 * cdef Datatype __INTEGER1__  = new_Datatype( MPI_INTEGER1  )
 * cdef Datatype __INTEGER2__  = new_Datatype( MPI_INTEGER2  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_LOGICAL8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL8__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LOGICAL8__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":932
 * cdef Datatype __LOGICAL4__  = new_Datatype( MPI_LOGICAL4  )
 * cdef Datatype __LOGICAL8__  = new_Datatype( MPI_LOGICAL8  )
 * cdef Datatype __INTEGER1__  = new_Datatype( MPI_INTEGER1  )             # <<<<<<<<<<<<<<
 * cdef Datatype __INTEGER2__  = new_Datatype( MPI_INTEGER2  )
 * cdef Datatype __INTEGER4__  = new_Datatype( MPI_INTEGER4  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INTEGER1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER1__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INTEGER1__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":933
 * cdef Datatype __LOGICAL8__  = new_Datatype( MPI_LOGICAL8  )
 * cdef Datatype __INTEGER1__  = new_Datatype( MPI_INTEGER1  )
 * cdef Datatype __INTEGER2__  = new_Datatype( MPI_INTEGER2  )             # <<<<<<<<<<<<<<
 * cdef Datatype __INTEGER4__  = new_Datatype( MPI_INTEGER4  )
 * cdef Datatype __INTEGER8__  = new_Datatype( MPI_INTEGER8  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INTEGER2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER2__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INTEGER2__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":934
 * cdef Datatype __INTEGER1__  = new_Datatype( MPI_INTEGER1  )
 * cdef Datatype __INTEGER2__  = new_Datatype( MPI_INTEGER2  )
 * cdef Datatype __INTEGER4__  = new_Datatype( MPI_INTEGER4  )             # <<<<<<<<<<<<<<
 * cdef Datatype __INTEGER8__  = new_Datatype( MPI_INTEGER8  )
 * cdef Datatype __INTEGER16__ = new_Datatype( MPI_INTEGER16 )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INTEGER4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER4__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INTEGER4__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":935
 * cdef Datatype __INTEGER2__  = new_Datatype( MPI_INTEGER2  )
 * cdef Datatype __INTEGER4__  = new_Datatype( MPI_INTEGER4  )
 * cdef Datatype __INTEGER8__  = new_Datatype( MPI_INTEGER8  )             # <<<<<<<<<<<<<<
 * cdef Datatype __INTEGER16__ = new_Datatype( MPI_INTEGER16 )
 * cdef Datatype __REAL2__     = new_Datatype( MPI_REAL2     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INTEGER8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER8__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INTEGER8__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":936
 * cdef Datatype __INTEGER4__  = new_Datatype( MPI_INTEGER4  )
 * cdef Datatype __INTEGER8__  = new_Datatype( MPI_INTEGER8  )
 * cdef Datatype __INTEGER16__ = new_Datatype( MPI_INTEGER16 )             # <<<<<<<<<<<<<<
 * cdef Datatype __REAL2__     = new_Datatype( MPI_REAL2     )
 * cdef Datatype __REAL4__     = new_Datatype( MPI_REAL4     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_INTEGER16)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER16__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INTEGER16__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":937
 * cdef Datatype __INTEGER8__  = new_Datatype( MPI_INTEGER8  )
 * cdef Datatype __INTEGER16__ = new_Datatype( MPI_INTEGER16 )
 * cdef Datatype __REAL2__     = new_Datatype( MPI_REAL2     )             # <<<<<<<<<<<<<<
 * cdef Datatype __REAL4__     = new_Datatype( MPI_REAL4     )
 * cdef Datatype __REAL8__     = new_Datatype( MPI_REAL8     )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_REAL2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REAL2__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REAL2__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":938
 * cdef Datatype __INTEGER16__ = new_Datatype( MPI_INTEGER16 )
 * cdef Datatype __REAL2__     = new_Datatype( MPI_REAL2     )
 * cdef Datatype __REAL4__     = new_Datatype( MPI_REAL4     )             # <<<<<<<<<<<<<<
 * cdef Datatype __REAL8__     = new_Datatype( MPI_REAL8     )
 * cdef Datatype __REAL16__    = new_Datatype( MPI_REAL16    )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_REAL4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REAL4__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REAL4__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":939
 * cdef Datatype __REAL2__     = new_Datatype( MPI_REAL2     )
 * cdef Datatype __REAL4__     = new_Datatype( MPI_REAL4     )
 * cdef Datatype __REAL8__     = new_Datatype( MPI_REAL8     )             # <<<<<<<<<<<<<<
 * cdef Datatype __REAL16__    = new_Datatype( MPI_REAL16    )
 * cdef Datatype __COMPLEX4__  = new_Datatype( MPI_COMPLEX4  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_REAL8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REAL8__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REAL8__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":940
 * cdef Datatype __REAL4__     = new_Datatype( MPI_REAL4     )
 * cdef Datatype __REAL8__     = new_Datatype( MPI_REAL8     )
 * cdef Datatype __REAL16__    = new_Datatype( MPI_REAL16    )             # <<<<<<<<<<<<<<
 * cdef Datatype __COMPLEX4__  = new_Datatype( MPI_COMPLEX4  )
 * cdef Datatype __COMPLEX8__  = new_Datatype( MPI_COMPLEX8  )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_REAL16)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REAL16__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REAL16__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":941
 * cdef Datatype __REAL8__     = new_Datatype( MPI_REAL8     )
 * cdef Datatype __REAL16__    = new_Datatype( MPI_REAL16    )
 * cdef Datatype __COMPLEX4__  = new_Datatype( MPI_COMPLEX4  )             # <<<<<<<<<<<<<<
 * cdef Datatype __COMPLEX8__  = new_Datatype( MPI_COMPLEX8  )
 * cdef Datatype __COMPLEX16__ = new_Datatype( MPI_COMPLEX16 )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_COMPLEX4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX4__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMPLEX4__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":942
 * cdef Datatype __REAL16__    = new_Datatype( MPI_REAL16    )
 * cdef Datatype __COMPLEX4__  = new_Datatype( MPI_COMPLEX4  )
 * cdef Datatype __COMPLEX8__  = new_Datatype( MPI_COMPLEX8  )             # <<<<<<<<<<<<<<
 * cdef Datatype __COMPLEX16__ = new_Datatype( MPI_COMPLEX16 )
 * cdef Datatype __COMPLEX32__ = new_Datatype( MPI_COMPLEX32 )
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_COMPLEX8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX8__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMPLEX8__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":943
 * cdef Datatype __COMPLEX4__  = new_Datatype( MPI_COMPLEX4  )
 * cdef Datatype __COMPLEX8__  = new_Datatype( MPI_COMPLEX8  )
 * cdef Datatype __COMPLEX16__ = new_Datatype( MPI_COMPLEX16 )             # <<<<<<<<<<<<<<
 * cdef Datatype __COMPLEX32__ = new_Datatype( MPI_COMPLEX32 )
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_COMPLEX16)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 943, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX16__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMPLEX16__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":944
 * cdef Datatype __COMPLEX8__  = new_Datatype( MPI_COMPLEX8  )
 * cdef Datatype __COMPLEX16__ = new_Datatype( MPI_COMPLEX16 )
 * cdef Datatype __COMPLEX32__ = new_Datatype( MPI_COMPLEX32 )             # <<<<<<<<<<<<<<
 * 
 * include "typemap.pxi"
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Datatype(MPI_COMPLEX32)); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 944, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX32__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMPLEX32__, ((struct PyMPIDatatypeObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":11
 * # -----------------------------------------------------------------------------
 * 
 * cdef dict TypeDict = { }             # <<<<<<<<<<<<<<
 * _typedict = TypeDict
 * 
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_TypeDict);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_TypeDict, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":12
 * 
 * cdef dict TypeDict = { }
 * _typedict = TypeDict             # <<<<<<<<<<<<<<
 * 
 * # boolean (C++)
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_typedict, __pyx_v_6mpi4py_3MPI_TypeDict) < 0) __PYX_ERR(22, 12, __pyx_L1_error)

  /* "mpi4py/MPI/typemap.pxi":15
 * 
 * # boolean (C++)
 * AddTypeMap(TypeDict, "?" , __CXX_BOOL__ ) # PEP-3118 & NumPy             # <<<<<<<<<<<<<<
 * # boolean (C99)
 * AddTypeMap(TypeDict, "?" , __C_BOOL__   ) # PEP-3118 & NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_BOOL__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"?"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":17
 * AddTypeMap(TypeDict, "?" , __CXX_BOOL__ ) # PEP-3118 & NumPy
 * # boolean (C99)
 * AddTypeMap(TypeDict, "?" , __C_BOOL__   ) # PEP-3118 & NumPy             # <<<<<<<<<<<<<<
 * # character
 * AddTypeMap(TypeDict, "c" , __CHAR__     ) # PEP-3118 & NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_BOOL__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"?"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":19
 * AddTypeMap(TypeDict, "?" , __C_BOOL__   ) # PEP-3118 & NumPy
 * # character
 * AddTypeMap(TypeDict, "c" , __CHAR__     ) # PEP-3118 & NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "S" , __CHAR__     ) # NumPy
 * # UCS-2|4
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CHAR__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"c"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":20
 * # character
 * AddTypeMap(TypeDict, "c" , __CHAR__     ) # PEP-3118 & NumPy
 * AddTypeMap(TypeDict, "S" , __CHAR__     ) # NumPy             # <<<<<<<<<<<<<<
 * # UCS-2|4
 * AddTypeMap(TypeDict, "u" , __UNSIGNED_SHORT__ ) # PEP-3118
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CHAR__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"S"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":22
 * AddTypeMap(TypeDict, "S" , __CHAR__     ) # NumPy
 * # UCS-2|4
 * AddTypeMap(TypeDict, "u" , __UNSIGNED_SHORT__ ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "u" , __UINT16_T__       ) # PEP-3118
 * AddTypeMap(TypeDict, "w" , __UNSIGNED__       ) # PEP-3118
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"u"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":23
 * # UCS-2|4
 * AddTypeMap(TypeDict, "u" , __UNSIGNED_SHORT__ ) # PEP-3118
 * AddTypeMap(TypeDict, "u" , __UINT16_T__       ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "w" , __UNSIGNED__       ) # PEP-3118
 * AddTypeMap(TypeDict, "w" , __UINT32_T__       ) # PEP-3118
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT16_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":24
 * AddTypeMap(TypeDict, "u" , __UNSIGNED_SHORT__ ) # PEP-3118
 * AddTypeMap(TypeDict, "u" , __UINT16_T__       ) # PEP-3118
 * AddTypeMap(TypeDict, "w" , __UNSIGNED__       ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "w" , __UINT32_T__       ) # PEP-3118
 * # (signed) integer
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"w"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":25
 * AddTypeMap(TypeDict, "u" , __UINT16_T__       ) # PEP-3118
 * AddTypeMap(TypeDict, "w" , __UNSIGNED__       ) # PEP-3118
 * AddTypeMap(TypeDict, "w" , __UINT32_T__       ) # PEP-3118             # <<<<<<<<<<<<<<
 * # (signed) integer
 * AddTypeMap(TypeDict, "b" , __SIGNED_CHAR__ ) # MPI-2
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT32_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"w"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":27
 * AddTypeMap(TypeDict, "w" , __UINT32_T__       ) # PEP-3118
 * # (signed) integer
 * AddTypeMap(TypeDict, "b" , __SIGNED_CHAR__ ) # MPI-2             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "h" , __SHORT__       )
 * AddTypeMap(TypeDict, "i" , __INT__         )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"b"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":28
 * # (signed) integer
 * AddTypeMap(TypeDict, "b" , __SIGNED_CHAR__ ) # MPI-2
 * AddTypeMap(TypeDict, "h" , __SHORT__       )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "i" , __INT__         )
 * AddTypeMap(TypeDict, "l" , __LONG__        )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"h"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":29
 * AddTypeMap(TypeDict, "b" , __SIGNED_CHAR__ ) # MPI-2
 * AddTypeMap(TypeDict, "h" , __SHORT__       )
 * AddTypeMap(TypeDict, "i" , __INT__         )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "l" , __LONG__        )
 * AddTypeMap(TypeDict, "q" , __LONG_LONG__   )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":30
 * AddTypeMap(TypeDict, "h" , __SHORT__       )
 * AddTypeMap(TypeDict, "i" , __INT__         )
 * AddTypeMap(TypeDict, "l" , __LONG__        )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "q" , __LONG_LONG__   )
 * AddTypeMap(TypeDict, "p" , __AINT__        ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"l"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":31
 * AddTypeMap(TypeDict, "i" , __INT__         )
 * AddTypeMap(TypeDict, "l" , __LONG__        )
 * AddTypeMap(TypeDict, "q" , __LONG_LONG__   )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "p" , __AINT__        ) # NumPy
 * # unsigned integer
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_LONG__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"q"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":32
 * AddTypeMap(TypeDict, "l" , __LONG__        )
 * AddTypeMap(TypeDict, "q" , __LONG_LONG__   )
 * AddTypeMap(TypeDict, "p" , __AINT__        ) # NumPy             # <<<<<<<<<<<<<<
 * # unsigned integer
 * AddTypeMap(TypeDict, "B" , __UNSIGNED_CHAR__      )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___AINT__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"p"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":34
 * AddTypeMap(TypeDict, "p" , __AINT__        ) # NumPy
 * # unsigned integer
 * AddTypeMap(TypeDict, "B" , __UNSIGNED_CHAR__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "H" , __UNSIGNED_SHORT__     )
 * AddTypeMap(TypeDict, "I" , __UNSIGNED__           )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"B"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":35
 * # unsigned integer
 * AddTypeMap(TypeDict, "B" , __UNSIGNED_CHAR__      )
 * AddTypeMap(TypeDict, "H" , __UNSIGNED_SHORT__     )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "I" , __UNSIGNED__           )
 * AddTypeMap(TypeDict, "L" , __UNSIGNED_LONG__      )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"H"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":36
 * AddTypeMap(TypeDict, "B" , __UNSIGNED_CHAR__      )
 * AddTypeMap(TypeDict, "H" , __UNSIGNED_SHORT__     )
 * AddTypeMap(TypeDict, "I" , __UNSIGNED__           )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "L" , __UNSIGNED_LONG__      )
 * AddTypeMap(TypeDict, "Q" , __UNSIGNED_LONG_LONG__ )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"I"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":37
 * AddTypeMap(TypeDict, "H" , __UNSIGNED_SHORT__     )
 * AddTypeMap(TypeDict, "I" , __UNSIGNED__           )
 * AddTypeMap(TypeDict, "L" , __UNSIGNED_LONG__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Q" , __UNSIGNED_LONG_LONG__ )
 * # (real) floating
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"L"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":38
 * AddTypeMap(TypeDict, "I" , __UNSIGNED__           )
 * AddTypeMap(TypeDict, "L" , __UNSIGNED_LONG__      )
 * AddTypeMap(TypeDict, "Q" , __UNSIGNED_LONG_LONG__ )             # <<<<<<<<<<<<<<
 * # (real) floating
 * AddTypeMap(TypeDict, "f" , __FLOAT__       )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Q"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":40
 * AddTypeMap(TypeDict, "Q" , __UNSIGNED_LONG_LONG__ )
 * # (real) floating
 * AddTypeMap(TypeDict, "f" , __FLOAT__       )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "d" , __DOUBLE__      )
 * AddTypeMap(TypeDict, "g" , __LONG_DOUBLE__ ) # PEP-3118 & NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"f"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":41
 * # (real) floating
 * AddTypeMap(TypeDict, "f" , __FLOAT__       )
 * AddTypeMap(TypeDict, "d" , __DOUBLE__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "g" , __LONG_DOUBLE__ ) # PEP-3118 & NumPy
 * # complex floating (F77)
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"d"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":42
 * AddTypeMap(TypeDict, "f" , __FLOAT__       )
 * AddTypeMap(TypeDict, "d" , __DOUBLE__      )
 * AddTypeMap(TypeDict, "g" , __LONG_DOUBLE__ ) # PEP-3118 & NumPy             # <<<<<<<<<<<<<<
 * # complex floating (F77)
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX__        ) # PEP-3118
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"g"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":44
 * AddTypeMap(TypeDict, "g" , __LONG_DOUBLE__ ) # PEP-3118 & NumPy
 * # complex floating (F77)
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX__        ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Zd" , __DOUBLE_COMPLEX__ ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __COMPLEX__        ) # NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Zf"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":45
 * # complex floating (F77)
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX__        ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __DOUBLE_COMPLEX__ ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "F"  , __COMPLEX__        ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __DOUBLE_COMPLEX__ ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"Zd"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":46
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX__        ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __DOUBLE_COMPLEX__ ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __COMPLEX__        ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "D"  , __DOUBLE_COMPLEX__ ) # NumPy
 * # complex floating (F90)
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"F"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":47
 * AddTypeMap(TypeDict, "Zd" , __DOUBLE_COMPLEX__ ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __COMPLEX__        ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __DOUBLE_COMPLEX__ ) # NumPy             # <<<<<<<<<<<<<<
 * # complex floating (F90)
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX8__       ) # PEP-3118
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"D"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":49
 * AddTypeMap(TypeDict, "D"  , __DOUBLE_COMPLEX__ ) # NumPy
 * # complex floating (F90)
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX8__       ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Zd" , __COMPLEX16__      ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __COMPLEX8__       ) # NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX8__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Zf"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":50
 * # complex floating (F90)
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX8__       ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __COMPLEX16__      ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "F"  , __COMPLEX8__       ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __COMPLEX16__      ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX16__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"Zd"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":51
 * AddTypeMap(TypeDict, "Zf" , __COMPLEX8__       ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __COMPLEX16__      ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __COMPLEX8__       ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "D"  , __COMPLEX16__      ) # NumPy
 * # complex floating (C++)
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX8__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"F"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":52
 * AddTypeMap(TypeDict, "Zd" , __COMPLEX16__      ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __COMPLEX8__       ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __COMPLEX16__      ) # NumPy             # <<<<<<<<<<<<<<
 * # complex floating (C++)
 * AddTypeMap(TypeDict, "Zf" , __CXX_FLOAT_COMPLEX__       ) # PEP-3118
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX16__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"D"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":54
 * AddTypeMap(TypeDict, "D"  , __COMPLEX16__      ) # NumPy
 * # complex floating (C++)
 * AddTypeMap(TypeDict, "Zf" , __CXX_FLOAT_COMPLEX__       ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Zd" , __CXX_DOUBLE_COMPLEX__      ) # PEP-3118
 * AddTypeMap(TypeDict, "Zg" , __CXX_LONG_DOUBLE_COMPLEX__ ) # PEP-3118
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Zf"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":55
 * # complex floating (C++)
 * AddTypeMap(TypeDict, "Zf" , __CXX_FLOAT_COMPLEX__       ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __CXX_DOUBLE_COMPLEX__      ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Zg" , __CXX_LONG_DOUBLE_COMPLEX__ ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __CXX_FLOAT_COMPLEX__       ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"Zd"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":56
 * AddTypeMap(TypeDict, "Zf" , __CXX_FLOAT_COMPLEX__       ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __CXX_DOUBLE_COMPLEX__      ) # PEP-3118
 * AddTypeMap(TypeDict, "Zg" , __CXX_LONG_DOUBLE_COMPLEX__ ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "F"  , __CXX_FLOAT_COMPLEX__       ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __CXX_DOUBLE_COMPLEX__      ) # NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Zg"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":57
 * AddTypeMap(TypeDict, "Zd" , __CXX_DOUBLE_COMPLEX__      ) # PEP-3118
 * AddTypeMap(TypeDict, "Zg" , __CXX_LONG_DOUBLE_COMPLEX__ ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __CXX_FLOAT_COMPLEX__       ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "D"  , __CXX_DOUBLE_COMPLEX__      ) # NumPy
 * AddTypeMap(TypeDict, "G"  , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"F"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":58
 * AddTypeMap(TypeDict, "Zg" , __CXX_LONG_DOUBLE_COMPLEX__ ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __CXX_FLOAT_COMPLEX__       ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __CXX_DOUBLE_COMPLEX__      ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "G"  , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 * # complex floating (C99)
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"D"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":59
 * AddTypeMap(TypeDict, "F"  , __CXX_FLOAT_COMPLEX__       ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __CXX_DOUBLE_COMPLEX__      ) # NumPy
 * AddTypeMap(TypeDict, "G"  , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy             # <<<<<<<<<<<<<<
 * # complex floating (C99)
 * AddTypeMap(TypeDict, "Zf" , __C_FLOAT_COMPLEX__         ) # PEP-3118
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"G"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":61
 * AddTypeMap(TypeDict, "G"  , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 * # complex floating (C99)
 * AddTypeMap(TypeDict, "Zf" , __C_FLOAT_COMPLEX__         ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Zd" , __C_DOUBLE_COMPLEX__        ) # PEP-3118
 * AddTypeMap(TypeDict, "Zg" , __C_LONG_DOUBLE_COMPLEX__   ) # PEP-3118
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Zf"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":62
 * # complex floating (C99)
 * AddTypeMap(TypeDict, "Zf" , __C_FLOAT_COMPLEX__         ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __C_DOUBLE_COMPLEX__        ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "Zg" , __C_LONG_DOUBLE_COMPLEX__   ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __C_FLOAT_COMPLEX__         ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"Zd"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":63
 * AddTypeMap(TypeDict, "Zf" , __C_FLOAT_COMPLEX__         ) # PEP-3118
 * AddTypeMap(TypeDict, "Zd" , __C_DOUBLE_COMPLEX__        ) # PEP-3118
 * AddTypeMap(TypeDict, "Zg" , __C_LONG_DOUBLE_COMPLEX__   ) # PEP-3118             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "F"  , __C_FLOAT_COMPLEX__         ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __C_DOUBLE_COMPLEX__        ) # NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"Zg"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":64
 * AddTypeMap(TypeDict, "Zd" , __C_DOUBLE_COMPLEX__        ) # PEP-3118
 * AddTypeMap(TypeDict, "Zg" , __C_LONG_DOUBLE_COMPLEX__   ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __C_FLOAT_COMPLEX__         ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "D"  , __C_DOUBLE_COMPLEX__        ) # NumPy
 * AddTypeMap(TypeDict, "G"  , __C_LONG_DOUBLE_COMPLEX__   ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"F"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":65
 * AddTypeMap(TypeDict, "Zg" , __C_LONG_DOUBLE_COMPLEX__   ) # PEP-3118
 * AddTypeMap(TypeDict, "F"  , __C_FLOAT_COMPLEX__         ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __C_DOUBLE_COMPLEX__        ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "G"  , __C_LONG_DOUBLE_COMPLEX__   ) # NumPy
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"D"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":66
 * AddTypeMap(TypeDict, "F"  , __C_FLOAT_COMPLEX__         ) # NumPy
 * AddTypeMap(TypeDict, "D"  , __C_DOUBLE_COMPLEX__        ) # NumPy
 * AddTypeMap(TypeDict, "G"  , __C_LONG_DOUBLE_COMPLEX__   ) # NumPy             # <<<<<<<<<<<<<<
 * 
 * # signed and unsigned integer (C)
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"G"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":69
 * 
 * # signed and unsigned integer (C)
 * if sizeof(char) == 1:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i1" ,  __SIGNED_CHAR__        ) # NumPy
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy
 */
  __pyx_t_23 = (((sizeof(char)) == 1) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":70
 * # signed and unsigned integer (C)
 * if sizeof(char) == 1:
 *     AddTypeMap(TypeDict, "i1" ,  __SIGNED_CHAR__        ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy
 * if sizeof(short) == 2:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i1"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 70, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":71
 * if sizeof(char) == 1:
 *     AddTypeMap(TypeDict, "i1" ,  __SIGNED_CHAR__        ) # NumPy
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy             # <<<<<<<<<<<<<<
 * if sizeof(short) == 2:
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u1"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 71, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":69
 * 
 * # signed and unsigned integer (C)
 * if sizeof(char) == 1:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i1" ,  __SIGNED_CHAR__        ) # NumPy
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy
 */
  }

  /* "mpi4py/MPI/typemap.pxi":72
 *     AddTypeMap(TypeDict, "i1" ,  __SIGNED_CHAR__        ) # NumPy
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy
 * if sizeof(short) == 2:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy
 */
  __pyx_t_23 = (((sizeof(short)) == 2) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":73
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy
 * if sizeof(short) == 2:
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy
 * if sizeof(int) == 4:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i2"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 73, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":74
 * if sizeof(short) == 2:
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy             # <<<<<<<<<<<<<<
 * if sizeof(int) == 4:
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u2"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 74, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":72
 *     AddTypeMap(TypeDict, "i1" ,  __SIGNED_CHAR__        ) # NumPy
 *     AddTypeMap(TypeDict, "u1" ,  __UNSIGNED_CHAR__      ) # NumPy
 * if sizeof(short) == 2:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy
 */
  }

  /* "mpi4py/MPI/typemap.pxi":75
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy
 * if sizeof(int) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy
 */
  __pyx_t_23 = (((sizeof(int)) == 4) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":76
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy
 * if sizeof(int) == 4:
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy
 * elif sizeof(long) == 4:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 76, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":77
 * if sizeof(int) == 4:
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy             # <<<<<<<<<<<<<<
 * elif sizeof(long) == 4:
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u4"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 77, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":75
 *     AddTypeMap(TypeDict, "i2" ,  __SHORT__              ) # NumPy
 *     AddTypeMap(TypeDict, "u2" ,  __UNSIGNED_SHORT__     ) # NumPy
 * if sizeof(int) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy
 */
    goto __pyx_L74;
  }

  /* "mpi4py/MPI/typemap.pxi":78
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy
 * elif sizeof(long) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy
 */
  __pyx_t_23 = (((sizeof(long)) == 4) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":79
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy
 * elif sizeof(long) == 4:
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy
 * if sizeof(long) == 8:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 79, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":80
 * elif sizeof(long) == 4:
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy             # <<<<<<<<<<<<<<
 * if sizeof(long) == 8:
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u4"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 80, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":78
 *     AddTypeMap(TypeDict, "i4" ,  __INT__                ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED__           ) # NumPy
 * elif sizeof(long) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy
 */
  }
  __pyx_L74:;

  /* "mpi4py/MPI/typemap.pxi":81
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy
 * if sizeof(long) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy
 */
  __pyx_t_23 = (((sizeof(long)) == 8) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":82
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy
 * if sizeof(long) == 8:
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy
 * elif sizeof(long long) == 8:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 82, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":83
 * if sizeof(long) == 8:
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy             # <<<<<<<<<<<<<<
 * elif sizeof(long long) == 8:
 *     AddTypeMap(TypeDict, "i8" ,  __LONG_LONG__          ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 83, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":81
 *     AddTypeMap(TypeDict, "i4" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u4" ,  __UNSIGNED_LONG__      ) # NumPy
 * if sizeof(long) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy
 */
    goto __pyx_L75;
  }

  /* "mpi4py/MPI/typemap.pxi":84
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy
 * elif sizeof(long long) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i8" ,  __LONG_LONG__          ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG_LONG__ ) # NumPy
 */
  __pyx_t_23 = (((sizeof(PY_LONG_LONG)) == 8) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":85
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy
 * elif sizeof(long long) == 8:
 *     AddTypeMap(TypeDict, "i8" ,  __LONG_LONG__          ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG_LONG__ ) # NumPy
 * # signed integer (C99)
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_LONG__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 85, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":86
 * elif sizeof(long long) == 8:
 *     AddTypeMap(TypeDict, "i8" ,  __LONG_LONG__          ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG_LONG__ ) # NumPy             # <<<<<<<<<<<<<<
 * # signed integer (C99)
 * AddTypeMap(TypeDict, "i1"  , __INT8_T__   ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 86, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":84
 *     AddTypeMap(TypeDict, "i8" ,  __LONG__               ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG__      ) # NumPy
 * elif sizeof(long long) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "i8" ,  __LONG_LONG__          ) # NumPy
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG_LONG__ ) # NumPy
 */
  }
  __pyx_L75:;

  /* "mpi4py/MPI/typemap.pxi":88
 *     AddTypeMap(TypeDict, "u8" ,  __UNSIGNED_LONG_LONG__ ) # NumPy
 * # signed integer (C99)
 * AddTypeMap(TypeDict, "i1"  , __INT8_T__   ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "i2"  , __INT16_T__  ) # NumPy
 * AddTypeMap(TypeDict, "i4"  , __INT32_T__  ) # NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT8_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i1"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":89
 * # signed integer (C99)
 * AddTypeMap(TypeDict, "i1"  , __INT8_T__   ) # NumPy
 * AddTypeMap(TypeDict, "i2"  , __INT16_T__  ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "i4"  , __INT32_T__  ) # NumPy
 * AddTypeMap(TypeDict, "i8"  , __INT64_T__  ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT16_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i2"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":90
 * AddTypeMap(TypeDict, "i1"  , __INT8_T__   ) # NumPy
 * AddTypeMap(TypeDict, "i2"  , __INT16_T__  ) # NumPy
 * AddTypeMap(TypeDict, "i4"  , __INT32_T__  ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "i8"  , __INT64_T__  ) # NumPy
 * # unsigned integer (C99)
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT32_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":91
 * AddTypeMap(TypeDict, "i2"  , __INT16_T__  ) # NumPy
 * AddTypeMap(TypeDict, "i4"  , __INT32_T__  ) # NumPy
 * AddTypeMap(TypeDict, "i8"  , __INT64_T__  ) # NumPy             # <<<<<<<<<<<<<<
 * # unsigned integer (C99)
 * AddTypeMap(TypeDict, "u1"  , __UINT8_T__  ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT64_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":93
 * AddTypeMap(TypeDict, "i8"  , __INT64_T__  ) # NumPy
 * # unsigned integer (C99)
 * AddTypeMap(TypeDict, "u1"  , __UINT8_T__  ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "u2"  , __UINT16_T__ ) # NumPy
 * AddTypeMap(TypeDict, "u4"  , __UINT32_T__ ) # NumPy
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT8_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"u1"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":94
 * # unsigned integer (C99)
 * AddTypeMap(TypeDict, "u1"  , __UINT8_T__  ) # NumPy
 * AddTypeMap(TypeDict, "u2"  , __UINT16_T__ ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "u4"  , __UINT32_T__ ) # NumPy
 * AddTypeMap(TypeDict, "u8"  , __UINT64_T__ ) # NumPy
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT16_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u2"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":95
 * AddTypeMap(TypeDict, "u1"  , __UINT8_T__  ) # NumPy
 * AddTypeMap(TypeDict, "u2"  , __UINT16_T__ ) # NumPy
 * AddTypeMap(TypeDict, "u4"  , __UINT32_T__ ) # NumPy             # <<<<<<<<<<<<<<
 * AddTypeMap(TypeDict, "u8"  , __UINT64_T__ ) # NumPy
 * # real (C) and complex (C99) floating
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT32_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"u4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":96
 * AddTypeMap(TypeDict, "u2"  , __UINT16_T__ ) # NumPy
 * AddTypeMap(TypeDict, "u4"  , __UINT32_T__ ) # NumPy
 * AddTypeMap(TypeDict, "u8"  , __UINT64_T__ ) # NumPy             # <<<<<<<<<<<<<<
 * # real (C) and complex (C99) floating
 * if sizeof(float) == 4:
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT64_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":98
 * AddTypeMap(TypeDict, "u8"  , __UINT64_T__ ) # NumPy
 * # real (C) and complex (C99) floating
 * if sizeof(float) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "f4"  , __FLOAT__              ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy
 */
  __pyx_t_23 = (((sizeof(float)) == 4) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":99
 * # real (C) and complex (C99) floating
 * if sizeof(float) == 4:
 *     AddTypeMap(TypeDict, "f4"  , __FLOAT__              ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __C_FLOAT_COMPLEX__    ) # NumPy
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"f4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 99, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":100
 * if sizeof(float) == 4:
 *     AddTypeMap(TypeDict, "f4"  , __FLOAT__              ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "c8"  , __C_FLOAT_COMPLEX__    ) # NumPy
 * if sizeof(double) == 8:
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 100, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":101
 *     AddTypeMap(TypeDict, "f4"  , __FLOAT__              ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __C_FLOAT_COMPLEX__    ) # NumPy             # <<<<<<<<<<<<<<
 * if sizeof(double) == 8:
 *     AddTypeMap(TypeDict, "f8"  , __DOUBLE__             ) # NumPy
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"c8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 101, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":98
 * AddTypeMap(TypeDict, "u8"  , __UINT64_T__ ) # NumPy
 * # real (C) and complex (C99) floating
 * if sizeof(float) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "f4"  , __FLOAT__              ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy
 */
  }

  /* "mpi4py/MPI/typemap.pxi":102
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __C_FLOAT_COMPLEX__    ) # NumPy
 * if sizeof(double) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "f8"  , __DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy
 */
  __pyx_t_23 = (((sizeof(double)) == 8) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":103
 *     AddTypeMap(TypeDict, "c8"  , __C_FLOAT_COMPLEX__    ) # NumPy
 * if sizeof(double) == 8:
 *     AddTypeMap(TypeDict, "f8"  , __DOUBLE__             ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __C_DOUBLE_COMPLEX__   ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"f8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 103, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":104
 * if sizeof(double) == 8:
 *     AddTypeMap(TypeDict, "f8"  , __DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "c16" , __C_DOUBLE_COMPLEX__   ) # NumPy
 * if sizeof(long double) == 16:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"c16"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 104, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":105
 *     AddTypeMap(TypeDict, "f8"  , __DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __C_DOUBLE_COMPLEX__   ) # NumPy             # <<<<<<<<<<<<<<
 * if sizeof(long double) == 16:
 *     AddTypeMap(TypeDict, "f16" , __LONG_DOUBLE__             ) # NumPy
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c16"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 105, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":102
 *     AddTypeMap(TypeDict, "c8"  , __CXX_FLOAT_COMPLEX__  ) # NumPy
 *     AddTypeMap(TypeDict, "c8"  , __C_FLOAT_COMPLEX__    ) # NumPy
 * if sizeof(double) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "f8"  , __DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy
 */
  }

  /* "mpi4py/MPI/typemap.pxi":106
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __C_DOUBLE_COMPLEX__   ) # NumPy
 * if sizeof(long double) == 16:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "f16" , __LONG_DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c32" , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 */
  __pyx_t_23 = (((sizeof(long double)) == 16) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":107
 *     AddTypeMap(TypeDict, "c16" , __C_DOUBLE_COMPLEX__   ) # NumPy
 * if sizeof(long double) == 16:
 *     AddTypeMap(TypeDict, "f16" , __LONG_DOUBLE__             ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "c32" , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 *     AddTypeMap(TypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__   ) # NumPy
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"f16"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 107, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":108
 * if sizeof(long double) == 16:
 *     AddTypeMap(TypeDict, "f16" , __LONG_DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c32" , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__   ) # NumPy
 * 
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c32"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 108, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":109
 *     AddTypeMap(TypeDict, "f16" , __LONG_DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c32" , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 *     AddTypeMap(TypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__   ) # NumPy             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_TypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"c32"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 109, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":106
 *     AddTypeMap(TypeDict, "c16" , __CXX_DOUBLE_COMPLEX__ ) # NumPy
 *     AddTypeMap(TypeDict, "c16" , __C_DOUBLE_COMPLEX__   ) # NumPy
 * if sizeof(long double) == 16:             # <<<<<<<<<<<<<<
 *     AddTypeMap(TypeDict, "f16" , __LONG_DOUBLE__             ) # NumPy
 *     AddTypeMap(TypeDict, "c32" , __CXX_LONG_DOUBLE_COMPLEX__ ) # NumPy
 */
  }

  /* "mpi4py/MPI/typemap.pxi":113
 * # -----------------------------------------------------------------------------
 * 
 * cdef dict CTypeDict = { }             # <<<<<<<<<<<<<<
 * _typedict_c = CTypeDict
 * 
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_CTypeDict);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_CTypeDict, ((PyObject*)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":114
 * 
 * cdef dict CTypeDict = { }
 * _typedict_c = CTypeDict             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "?" , __C_BOOL__ )
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_typedict_c, __pyx_v_6mpi4py_3MPI_CTypeDict) < 0) __PYX_ERR(22, 114, __pyx_L1_error)

  /* "mpi4py/MPI/typemap.pxi":116
 * _typedict_c = CTypeDict
 * 
 * AddTypeMap(CTypeDict, "?" , __C_BOOL__ )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "b" , __SIGNED_CHAR__ )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_BOOL__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"?"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":118
 * AddTypeMap(CTypeDict, "?" , __C_BOOL__ )
 * 
 * AddTypeMap(CTypeDict, "b" , __SIGNED_CHAR__ )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "h" , __SHORT__       )
 * AddTypeMap(CTypeDict, "i" , __INT__         )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"b"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 118, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":119
 * 
 * AddTypeMap(CTypeDict, "b" , __SIGNED_CHAR__ )
 * AddTypeMap(CTypeDict, "h" , __SHORT__       )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "i" , __INT__         )
 * AddTypeMap(CTypeDict, "l" , __LONG__        )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"h"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 119, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":120
 * AddTypeMap(CTypeDict, "b" , __SIGNED_CHAR__ )
 * AddTypeMap(CTypeDict, "h" , __SHORT__       )
 * AddTypeMap(CTypeDict, "i" , __INT__         )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "l" , __LONG__        )
 * AddTypeMap(CTypeDict, "q" , __LONG_LONG__   )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":121
 * AddTypeMap(CTypeDict, "h" , __SHORT__       )
 * AddTypeMap(CTypeDict, "i" , __INT__         )
 * AddTypeMap(CTypeDict, "l" , __LONG__        )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "q" , __LONG_LONG__   )
 * 
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"l"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 121, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":122
 * AddTypeMap(CTypeDict, "i" , __INT__         )
 * AddTypeMap(CTypeDict, "l" , __LONG__        )
 * AddTypeMap(CTypeDict, "q" , __LONG_LONG__   )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "B" , __UNSIGNED_CHAR__      )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_LONG__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"q"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":124
 * AddTypeMap(CTypeDict, "q" , __LONG_LONG__   )
 * 
 * AddTypeMap(CTypeDict, "B" , __UNSIGNED_CHAR__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "H" , __UNSIGNED_SHORT__     )
 * AddTypeMap(CTypeDict, "I" , __UNSIGNED__           )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"B"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":125
 * 
 * AddTypeMap(CTypeDict, "B" , __UNSIGNED_CHAR__      )
 * AddTypeMap(CTypeDict, "H" , __UNSIGNED_SHORT__     )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "I" , __UNSIGNED__           )
 * AddTypeMap(CTypeDict, "L" , __UNSIGNED_LONG__      )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"H"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 125, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":126
 * AddTypeMap(CTypeDict, "B" , __UNSIGNED_CHAR__      )
 * AddTypeMap(CTypeDict, "H" , __UNSIGNED_SHORT__     )
 * AddTypeMap(CTypeDict, "I" , __UNSIGNED__           )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "L" , __UNSIGNED_LONG__      )
 * AddTypeMap(CTypeDict, "Q" , __UNSIGNED_LONG_LONG__ )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"I"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 126, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":127
 * AddTypeMap(CTypeDict, "H" , __UNSIGNED_SHORT__     )
 * AddTypeMap(CTypeDict, "I" , __UNSIGNED__           )
 * AddTypeMap(CTypeDict, "L" , __UNSIGNED_LONG__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "Q" , __UNSIGNED_LONG_LONG__ )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"L"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":128
 * AddTypeMap(CTypeDict, "I" , __UNSIGNED__           )
 * AddTypeMap(CTypeDict, "L" , __UNSIGNED_LONG__      )
 * AddTypeMap(CTypeDict, "Q" , __UNSIGNED_LONG_LONG__ )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "f" , __FLOAT__       )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"Q"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":130
 * AddTypeMap(CTypeDict, "Q" , __UNSIGNED_LONG_LONG__ )
 * 
 * AddTypeMap(CTypeDict, "f" , __FLOAT__       )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "d" , __DOUBLE__      )
 * AddTypeMap(CTypeDict, "g" , __LONG_DOUBLE__ )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"f"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":131
 * 
 * AddTypeMap(CTypeDict, "f" , __FLOAT__       )
 * AddTypeMap(CTypeDict, "d" , __DOUBLE__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "g" , __LONG_DOUBLE__ )
 * 
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"d"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":132
 * AddTypeMap(CTypeDict, "f" , __FLOAT__       )
 * AddTypeMap(CTypeDict, "d" , __DOUBLE__      )
 * AddTypeMap(CTypeDict, "g" , __LONG_DOUBLE__ )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "F" , __C_FLOAT_COMPLEX__       )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"g"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":134
 * AddTypeMap(CTypeDict, "g" , __LONG_DOUBLE__ )
 * 
 * AddTypeMap(CTypeDict, "F" , __C_FLOAT_COMPLEX__       )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "D" , __C_DOUBLE_COMPLEX__      )
 * AddTypeMap(CTypeDict, "G" , __C_LONG_DOUBLE_COMPLEX__ )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"F"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":135
 * 
 * AddTypeMap(CTypeDict, "F" , __C_FLOAT_COMPLEX__       )
 * AddTypeMap(CTypeDict, "D" , __C_DOUBLE_COMPLEX__      )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "G" , __C_LONG_DOUBLE_COMPLEX__ )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"D"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 135, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":136
 * AddTypeMap(CTypeDict, "F" , __C_FLOAT_COMPLEX__       )
 * AddTypeMap(CTypeDict, "D" , __C_DOUBLE_COMPLEX__      )
 * AddTypeMap(CTypeDict, "G" , __C_LONG_DOUBLE_COMPLEX__ )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "i1" , __INT8_T__   )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"G"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":138
 * AddTypeMap(CTypeDict, "G" , __C_LONG_DOUBLE_COMPLEX__ )
 * 
 * AddTypeMap(CTypeDict, "i1" , __INT8_T__   )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "i2" , __INT16_T__  )
 * AddTypeMap(CTypeDict, "i4" , __INT32_T__  )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT8_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i1"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":139
 * 
 * AddTypeMap(CTypeDict, "i1" , __INT8_T__   )
 * AddTypeMap(CTypeDict, "i2" , __INT16_T__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "i4" , __INT32_T__  )
 * AddTypeMap(CTypeDict, "i8" , __INT64_T__  )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT16_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i2"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":140
 * AddTypeMap(CTypeDict, "i1" , __INT8_T__   )
 * AddTypeMap(CTypeDict, "i2" , __INT16_T__  )
 * AddTypeMap(CTypeDict, "i4" , __INT32_T__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "i8" , __INT64_T__  )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT32_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 140, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":141
 * AddTypeMap(CTypeDict, "i2" , __INT16_T__  )
 * AddTypeMap(CTypeDict, "i4" , __INT32_T__  )
 * AddTypeMap(CTypeDict, "i8" , __INT64_T__  )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(CTypeDict, "u1" , __UINT8_T__  )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INT64_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":143
 * AddTypeMap(CTypeDict, "i8" , __INT64_T__  )
 * 
 * AddTypeMap(CTypeDict, "u1" , __UINT8_T__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "u2" , __UINT16_T__ )
 * AddTypeMap(CTypeDict, "u4" , __UINT32_T__ )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT8_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"u1"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 143, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":144
 * 
 * AddTypeMap(CTypeDict, "u1" , __UINT8_T__  )
 * AddTypeMap(CTypeDict, "u2" , __UINT16_T__ )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "u4" , __UINT32_T__ )
 * AddTypeMap(CTypeDict, "u8" , __UINT64_T__ )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT16_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u2"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 144, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":145
 * AddTypeMap(CTypeDict, "u1" , __UINT8_T__  )
 * AddTypeMap(CTypeDict, "u2" , __UINT16_T__ )
 * AddTypeMap(CTypeDict, "u4" , __UINT32_T__ )             # <<<<<<<<<<<<<<
 * AddTypeMap(CTypeDict, "u8" , __UINT64_T__ )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT32_T__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"u4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 145, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":146
 * AddTypeMap(CTypeDict, "u2" , __UINT16_T__ )
 * AddTypeMap(CTypeDict, "u4" , __UINT32_T__ )
 * AddTypeMap(CTypeDict, "u8" , __UINT64_T__ )             # <<<<<<<<<<<<<<
 * 
 * if sizeof(float) == 4:
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT64_T__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"u8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":148
 * AddTypeMap(CTypeDict, "u8" , __UINT64_T__ )
 * 
 * if sizeof(float) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "f4" , __FLOAT__             )
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )
 */
  __pyx_t_23 = (((sizeof(float)) == 4) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":149
 * 
 * if sizeof(float) == 4:
 *     AddTypeMap(CTypeDict, "f4" , __FLOAT__             )             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )
 * if sizeof(double) == 8:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"f4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 149, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":150
 * if sizeof(float) == 4:
 *     AddTypeMap(CTypeDict, "f4" , __FLOAT__             )
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )             # <<<<<<<<<<<<<<
 * if sizeof(double) == 8:
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 150, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":148
 * AddTypeMap(CTypeDict, "u8" , __UINT64_T__ )
 * 
 * if sizeof(float) == 4:             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "f4" , __FLOAT__             )
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )
 */
  }

  /* "mpi4py/MPI/typemap.pxi":151
 *     AddTypeMap(CTypeDict, "f4" , __FLOAT__             )
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )
 * if sizeof(double) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )
 */
  __pyx_t_23 = (((sizeof(double)) == 8) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":152
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )
 * if sizeof(double) == 8:
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )
 * if sizeof(long double) == 16:
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"f8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 152, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":153
 * if sizeof(double) == 8:
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )             # <<<<<<<<<<<<<<
 * if sizeof(long double) == 16:
 *     AddTypeMap(CTypeDict, "f16" , __LONG_DOUBLE__           )
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c16"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 153, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":151
 *     AddTypeMap(CTypeDict, "f4" , __FLOAT__             )
 *     AddTypeMap(CTypeDict, "c8"  , __C_FLOAT_COMPLEX__  )
 * if sizeof(double) == 8:             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )
 */
  }

  /* "mpi4py/MPI/typemap.pxi":154
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )
 * if sizeof(long double) == 16:             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "f16" , __LONG_DOUBLE__           )
 *     AddTypeMap(CTypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__ )
 */
  __pyx_t_23 = (((sizeof(long double)) == 16) != 0);
  if (__pyx_t_23) {

    /* "mpi4py/MPI/typemap.pxi":155
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )
 * if sizeof(long double) == 16:
 *     AddTypeMap(CTypeDict, "f16" , __LONG_DOUBLE__           )             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__ )
 * 
 */
    __pyx_t_3 = __pyx_v_6mpi4py_3MPI_CTypeDict;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"f16"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 155, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "mpi4py/MPI/typemap.pxi":156
 * if sizeof(long double) == 16:
 *     AddTypeMap(CTypeDict, "f16" , __LONG_DOUBLE__           )
 *     AddTypeMap(CTypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__ )             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
    __pyx_t_1 = __pyx_v_6mpi4py_3MPI_CTypeDict;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c32"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 156, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "mpi4py/MPI/typemap.pxi":154
 *     AddTypeMap(CTypeDict, "f8" , __DOUBLE__            )
 *     AddTypeMap(CTypeDict, "c16" , __C_DOUBLE_COMPLEX__ )
 * if sizeof(long double) == 16:             # <<<<<<<<<<<<<<
 *     AddTypeMap(CTypeDict, "f16" , __LONG_DOUBLE__           )
 *     AddTypeMap(CTypeDict, "c32" , __C_LONG_DOUBLE_COMPLEX__ )
 */
  }

  /* "mpi4py/MPI/typemap.pxi":160
 * # -----------------------------------------------------------------------------
 * 
 * cdef dict FTypeDict = { }             # <<<<<<<<<<<<<<
 * _typedict_f = FTypeDict
 * 
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(__pyx_v_6mpi4py_3MPI_FTypeDict);
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI_FTypeDict, ((PyObject*)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":161
 * 
 * cdef dict FTypeDict = { }
 * _typedict_f = FTypeDict             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "?"   , __LOGICAL__          )
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_typedict_f, __pyx_v_6mpi4py_3MPI_FTypeDict) < 0) __PYX_ERR(22, 161, __pyx_L1_error)

  /* "mpi4py/MPI/typemap.pxi":163
 * _typedict_f = FTypeDict
 * 
 * AddTypeMap(FTypeDict, "?"   , __LOGICAL__          )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "i"   , __INTEGER__          )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"?"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 163, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":165
 * AddTypeMap(FTypeDict, "?"   , __LOGICAL__          )
 * 
 * AddTypeMap(FTypeDict, "i"   , __INTEGER__          )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "s"   , __REAL__             )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 165, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":167
 * AddTypeMap(FTypeDict, "i"   , __INTEGER__          )
 * 
 * AddTypeMap(FTypeDict, "s"   , __REAL__             )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "r"   , __REAL__             )
 * AddTypeMap(FTypeDict, "d"   , __DOUBLE_PRECISION__ )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"s"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 167, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":168
 * 
 * AddTypeMap(FTypeDict, "s"   , __REAL__             )
 * AddTypeMap(FTypeDict, "r"   , __REAL__             )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "d"   , __DOUBLE_PRECISION__ )
 * AddTypeMap(FTypeDict, "c"   , __COMPLEX__          )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"r"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":169
 * AddTypeMap(FTypeDict, "s"   , __REAL__             )
 * AddTypeMap(FTypeDict, "r"   , __REAL__             )
 * AddTypeMap(FTypeDict, "d"   , __DOUBLE_PRECISION__ )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "c"   , __COMPLEX__          )
 * AddTypeMap(FTypeDict, "z"   , __DOUBLE_COMPLEX__   )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"d"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 169, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":170
 * AddTypeMap(FTypeDict, "r"   , __REAL__             )
 * AddTypeMap(FTypeDict, "d"   , __DOUBLE_PRECISION__ )
 * AddTypeMap(FTypeDict, "c"   , __COMPLEX__          )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "z"   , __DOUBLE_COMPLEX__   )
 * 
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 170, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":171
 * AddTypeMap(FTypeDict, "d"   , __DOUBLE_PRECISION__ )
 * AddTypeMap(FTypeDict, "c"   , __COMPLEX__          )
 * AddTypeMap(FTypeDict, "z"   , __DOUBLE_COMPLEX__   )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "?1"  , __LOGICAL1__  )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"z"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 171, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":173
 * AddTypeMap(FTypeDict, "z"   , __DOUBLE_COMPLEX__   )
 * 
 * AddTypeMap(FTypeDict, "?1"  , __LOGICAL1__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "?2"  , __LOGICAL2__  )
 * AddTypeMap(FTypeDict, "?4"  , __LOGICAL4__  )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL1__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"?1"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 173, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":174
 * 
 * AddTypeMap(FTypeDict, "?1"  , __LOGICAL1__  )
 * AddTypeMap(FTypeDict, "?2"  , __LOGICAL2__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "?4"  , __LOGICAL4__  )
 * AddTypeMap(FTypeDict, "?8"  , __LOGICAL8__  )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL2__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"?2"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":175
 * AddTypeMap(FTypeDict, "?1"  , __LOGICAL1__  )
 * AddTypeMap(FTypeDict, "?2"  , __LOGICAL2__  )
 * AddTypeMap(FTypeDict, "?4"  , __LOGICAL4__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "?8"  , __LOGICAL8__  )
 * 
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL4__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"?4"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":176
 * AddTypeMap(FTypeDict, "?2"  , __LOGICAL2__  )
 * AddTypeMap(FTypeDict, "?4"  , __LOGICAL4__  )
 * AddTypeMap(FTypeDict, "?8"  , __LOGICAL8__  )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "i1"  , __INTEGER1__  )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL8__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"?8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":178
 * AddTypeMap(FTypeDict, "?8"  , __LOGICAL8__  )
 * 
 * AddTypeMap(FTypeDict, "i1"  , __INTEGER1__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "i2"  , __INTEGER2__  )
 * AddTypeMap(FTypeDict, "i4"  , __INTEGER4__  )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER1__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i1"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 178, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":179
 * 
 * AddTypeMap(FTypeDict, "i1"  , __INTEGER1__  )
 * AddTypeMap(FTypeDict, "i2"  , __INTEGER2__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "i4"  , __INTEGER4__  )
 * AddTypeMap(FTypeDict, "i8"  , __INTEGER8__  )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER2__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i2"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":180
 * AddTypeMap(FTypeDict, "i1"  , __INTEGER1__  )
 * AddTypeMap(FTypeDict, "i2"  , __INTEGER2__  )
 * AddTypeMap(FTypeDict, "i4"  , __INTEGER4__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "i8"  , __INTEGER8__  )
 * AddTypeMap(FTypeDict, "i16" , __INTEGER16__ )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER4__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i4"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 180, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":181
 * AddTypeMap(FTypeDict, "i2"  , __INTEGER2__  )
 * AddTypeMap(FTypeDict, "i4"  , __INTEGER4__  )
 * AddTypeMap(FTypeDict, "i8"  , __INTEGER8__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "i16" , __INTEGER16__ )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER8__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"i8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 181, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":182
 * AddTypeMap(FTypeDict, "i4"  , __INTEGER4__  )
 * AddTypeMap(FTypeDict, "i8"  , __INTEGER8__  )
 * AddTypeMap(FTypeDict, "i16" , __INTEGER16__ )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "r2"  , __REAL2__     )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER16__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"i16"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 182, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":184
 * AddTypeMap(FTypeDict, "i16" , __INTEGER16__ )
 * 
 * AddTypeMap(FTypeDict, "r2"  , __REAL2__     )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "r4"  , __REAL4__     )
 * AddTypeMap(FTypeDict, "r8"  , __REAL8__     )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL2__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"r2"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":185
 * 
 * AddTypeMap(FTypeDict, "r2"  , __REAL2__     )
 * AddTypeMap(FTypeDict, "r4"  , __REAL4__     )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "r8"  , __REAL8__     )
 * AddTypeMap(FTypeDict, "r16" , __REAL16__    )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL4__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"r4"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 185, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":186
 * AddTypeMap(FTypeDict, "r2"  , __REAL2__     )
 * AddTypeMap(FTypeDict, "r4"  , __REAL4__     )
 * AddTypeMap(FTypeDict, "r8"  , __REAL8__     )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "r16" , __REAL16__    )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL8__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"r8"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 186, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":187
 * AddTypeMap(FTypeDict, "r4"  , __REAL4__     )
 * AddTypeMap(FTypeDict, "r8"  , __REAL8__     )
 * AddTypeMap(FTypeDict, "r16" , __REAL16__    )             # <<<<<<<<<<<<<<
 * 
 * AddTypeMap(FTypeDict, "c4"  , __COMPLEX4__  )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL16__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"r16"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 187, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":189
 * AddTypeMap(FTypeDict, "r16" , __REAL16__    )
 * 
 * AddTypeMap(FTypeDict, "c4"  , __COMPLEX4__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "c8"  , __COMPLEX8__  )
 * AddTypeMap(FTypeDict, "c16" , __COMPLEX16__ )
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX4__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"c4"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":190
 * 
 * AddTypeMap(FTypeDict, "c4"  , __COMPLEX4__  )
 * AddTypeMap(FTypeDict, "c8"  , __COMPLEX8__  )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "c16" , __COMPLEX16__ )
 * AddTypeMap(FTypeDict, "c32" , __COMPLEX32__ )
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX8__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c8"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 190, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typemap.pxi":191
 * AddTypeMap(FTypeDict, "c4"  , __COMPLEX4__  )
 * AddTypeMap(FTypeDict, "c8"  , __COMPLEX8__  )
 * AddTypeMap(FTypeDict, "c16" , __COMPLEX16__ )             # <<<<<<<<<<<<<<
 * AddTypeMap(FTypeDict, "c32" , __COMPLEX32__ )
 * 
 */
  __pyx_t_3 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX16__);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_3), ((char const *)"c16"), ((struct PyMPIDatatypeObject *)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 191, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/typemap.pxi":192
 * AddTypeMap(FTypeDict, "c8"  , __COMPLEX8__  )
 * AddTypeMap(FTypeDict, "c16" , __COMPLEX16__ )
 * AddTypeMap(FTypeDict, "c32" , __COMPLEX32__ )             # <<<<<<<<<<<<<<
 * 
 * # -----------------------------------------------------------------------------
 */
  __pyx_t_1 = __pyx_v_6mpi4py_3MPI_FTypeDict;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_3 = ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX32__);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_2 = __pyx_f_6mpi4py_3MPI_AddTypeMap(((PyObject*)__pyx_t_1), ((char const *)"c32"), ((struct PyMPIDatatypeObject *)__pyx_t_3)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(22, 192, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/typestr.pxi":3
 * # -----------------------------------------------------------------------------
 * 
 * def _typecode(Datatype datatype):             # <<<<<<<<<<<<<<
 *     """
 *     Map MPI datatype to typecode string
 */
  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_21_typecode, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(23, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_typecode_2, __pyx_t_3) < 0) __PYX_ERR(23, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/Datatype.pyx":953
 * # ---------------------------
 * 
 * DATATYPE_NULL = __DATATYPE_NULL__ #: Null datatype handle             # <<<<<<<<<<<<<<
 * # Deprecated datatypes (since MPI-2)
 * UB = __UB__ #: upper-bound marker
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DATATYPE_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___DATATYPE_NULL__)) < 0) __PYX_ERR(21, 953, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":955
 * DATATYPE_NULL = __DATATYPE_NULL__ #: Null datatype handle
 * # Deprecated datatypes (since MPI-2)
 * UB = __UB__ #: upper-bound marker             # <<<<<<<<<<<<<<
 * LB = __LB__ #: lower-bound marker
 * # MPI-specific datatypes
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UB, ((PyObject *)__pyx_v_6mpi4py_3MPI___UB__)) < 0) __PYX_ERR(21, 955, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":956
 * # Deprecated datatypes (since MPI-2)
 * UB = __UB__ #: upper-bound marker
 * LB = __LB__ #: lower-bound marker             # <<<<<<<<<<<<<<
 * # MPI-specific datatypes
 * PACKED = __PACKED__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LB, ((PyObject *)__pyx_v_6mpi4py_3MPI___LB__)) < 0) __PYX_ERR(21, 956, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":958
 * LB = __LB__ #: lower-bound marker
 * # MPI-specific datatypes
 * PACKED = __PACKED__             # <<<<<<<<<<<<<<
 * BYTE   = __BYTE__
 * AINT   = __AINT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PACKED, ((PyObject *)__pyx_v_6mpi4py_3MPI___PACKED__)) < 0) __PYX_ERR(21, 958, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":959
 * # MPI-specific datatypes
 * PACKED = __PACKED__
 * BYTE   = __BYTE__             # <<<<<<<<<<<<<<
 * AINT   = __AINT__
 * OFFSET = __OFFSET__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BYTE, ((PyObject *)__pyx_v_6mpi4py_3MPI___BYTE__)) < 0) __PYX_ERR(21, 959, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":960
 * PACKED = __PACKED__
 * BYTE   = __BYTE__
 * AINT   = __AINT__             # <<<<<<<<<<<<<<
 * OFFSET = __OFFSET__
 * COUNT  = __COUNT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_AINT, ((PyObject *)__pyx_v_6mpi4py_3MPI___AINT__)) < 0) __PYX_ERR(21, 960, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":961
 * BYTE   = __BYTE__
 * AINT   = __AINT__
 * OFFSET = __OFFSET__             # <<<<<<<<<<<<<<
 * COUNT  = __COUNT__
 * # Elementary C datatypes
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_OFFSET, ((PyObject *)__pyx_v_6mpi4py_3MPI___OFFSET__)) < 0) __PYX_ERR(21, 961, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":962
 * AINT   = __AINT__
 * OFFSET = __OFFSET__
 * COUNT  = __COUNT__             # <<<<<<<<<<<<<<
 * # Elementary C datatypes
 * CHAR                = __CHAR__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COUNT, ((PyObject *)__pyx_v_6mpi4py_3MPI___COUNT__)) < 0) __PYX_ERR(21, 962, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":964
 * COUNT  = __COUNT__
 * # Elementary C datatypes
 * CHAR                = __CHAR__             # <<<<<<<<<<<<<<
 * WCHAR               = __WCHAR__
 * SIGNED_CHAR         = __SIGNED_CHAR__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CHAR, ((PyObject *)__pyx_v_6mpi4py_3MPI___CHAR__)) < 0) __PYX_ERR(21, 964, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":965
 * # Elementary C datatypes
 * CHAR                = __CHAR__
 * WCHAR               = __WCHAR__             # <<<<<<<<<<<<<<
 * SIGNED_CHAR         = __SIGNED_CHAR__
 * SHORT               = __SHORT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WCHAR, ((PyObject *)__pyx_v_6mpi4py_3MPI___WCHAR__)) < 0) __PYX_ERR(21, 965, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":966
 * CHAR                = __CHAR__
 * WCHAR               = __WCHAR__
 * SIGNED_CHAR         = __SIGNED_CHAR__             # <<<<<<<<<<<<<<
 * SHORT               = __SHORT__
 * INT                 = __INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIGNED_CHAR, ((PyObject *)__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__)) < 0) __PYX_ERR(21, 966, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":967
 * WCHAR               = __WCHAR__
 * SIGNED_CHAR         = __SIGNED_CHAR__
 * SHORT               = __SHORT__             # <<<<<<<<<<<<<<
 * INT                 = __INT__
 * LONG                = __LONG__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SHORT, ((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT__)) < 0) __PYX_ERR(21, 967, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":968
 * SIGNED_CHAR         = __SIGNED_CHAR__
 * SHORT               = __SHORT__
 * INT                 = __INT__             # <<<<<<<<<<<<<<
 * LONG                = __LONG__
 * LONG_LONG           = __LONG_LONG__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT__)) < 0) __PYX_ERR(21, 968, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":969
 * SHORT               = __SHORT__
 * INT                 = __INT__
 * LONG                = __LONG__             # <<<<<<<<<<<<<<
 * LONG_LONG           = __LONG_LONG__
 * UNSIGNED_CHAR       = __UNSIGNED_CHAR__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LONG, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__)) < 0) __PYX_ERR(21, 969, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":970
 * INT                 = __INT__
 * LONG                = __LONG__
 * LONG_LONG           = __LONG_LONG__             # <<<<<<<<<<<<<<
 * UNSIGNED_CHAR       = __UNSIGNED_CHAR__
 * UNSIGNED_SHORT      = __UNSIGNED_SHORT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LONG_LONG, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_LONG__)) < 0) __PYX_ERR(21, 970, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":971
 * LONG                = __LONG__
 * LONG_LONG           = __LONG_LONG__
 * UNSIGNED_CHAR       = __UNSIGNED_CHAR__             # <<<<<<<<<<<<<<
 * UNSIGNED_SHORT      = __UNSIGNED_SHORT__
 * UNSIGNED            = __UNSIGNED__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNSIGNED_CHAR, ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__)) < 0) __PYX_ERR(21, 971, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":972
 * LONG_LONG           = __LONG_LONG__
 * UNSIGNED_CHAR       = __UNSIGNED_CHAR__
 * UNSIGNED_SHORT      = __UNSIGNED_SHORT__             # <<<<<<<<<<<<<<
 * UNSIGNED            = __UNSIGNED__
 * UNSIGNED_LONG       = __UNSIGNED_LONG__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNSIGNED_SHORT, ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__)) < 0) __PYX_ERR(21, 972, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":973
 * UNSIGNED_CHAR       = __UNSIGNED_CHAR__
 * UNSIGNED_SHORT      = __UNSIGNED_SHORT__
 * UNSIGNED            = __UNSIGNED__             # <<<<<<<<<<<<<<
 * UNSIGNED_LONG       = __UNSIGNED_LONG__
 * UNSIGNED_LONG_LONG  = __UNSIGNED_LONG_LONG__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNSIGNED, ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__)) < 0) __PYX_ERR(21, 973, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":974
 * UNSIGNED_SHORT      = __UNSIGNED_SHORT__
 * UNSIGNED            = __UNSIGNED__
 * UNSIGNED_LONG       = __UNSIGNED_LONG__             # <<<<<<<<<<<<<<
 * UNSIGNED_LONG_LONG  = __UNSIGNED_LONG_LONG__
 * FLOAT               = __FLOAT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNSIGNED_LONG, ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__)) < 0) __PYX_ERR(21, 974, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":975
 * UNSIGNED            = __UNSIGNED__
 * UNSIGNED_LONG       = __UNSIGNED_LONG__
 * UNSIGNED_LONG_LONG  = __UNSIGNED_LONG_LONG__             # <<<<<<<<<<<<<<
 * FLOAT               = __FLOAT__
 * DOUBLE              = __DOUBLE__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNSIGNED_LONG_LONG, ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__)) < 0) __PYX_ERR(21, 975, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":976
 * UNSIGNED_LONG       = __UNSIGNED_LONG__
 * UNSIGNED_LONG_LONG  = __UNSIGNED_LONG_LONG__
 * FLOAT               = __FLOAT__             # <<<<<<<<<<<<<<
 * DOUBLE              = __DOUBLE__
 * LONG_DOUBLE         = __LONG_DOUBLE__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLOAT, ((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT__)) < 0) __PYX_ERR(21, 976, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":977
 * UNSIGNED_LONG_LONG  = __UNSIGNED_LONG_LONG__
 * FLOAT               = __FLOAT__
 * DOUBLE              = __DOUBLE__             # <<<<<<<<<<<<<<
 * LONG_DOUBLE         = __LONG_DOUBLE__
 * # C99 datatypes
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DOUBLE, ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE__)) < 0) __PYX_ERR(21, 977, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":978
 * FLOAT               = __FLOAT__
 * DOUBLE              = __DOUBLE__
 * LONG_DOUBLE         = __LONG_DOUBLE__             # <<<<<<<<<<<<<<
 * # C99 datatypes
 * C_BOOL                = __C_BOOL__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LONG_DOUBLE, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__)) < 0) __PYX_ERR(21, 978, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":980
 * LONG_DOUBLE         = __LONG_DOUBLE__
 * # C99 datatypes
 * C_BOOL                = __C_BOOL__             # <<<<<<<<<<<<<<
 * INT8_T                = __INT8_T__
 * INT16_T               = __INT16_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_C_BOOL, ((PyObject *)__pyx_v_6mpi4py_3MPI___C_BOOL__)) < 0) __PYX_ERR(21, 980, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":981
 * # C99 datatypes
 * C_BOOL                = __C_BOOL__
 * INT8_T                = __INT8_T__             # <<<<<<<<<<<<<<
 * INT16_T               = __INT16_T__
 * INT32_T               = __INT32_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INT8_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT8_T__)) < 0) __PYX_ERR(21, 981, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":982
 * C_BOOL                = __C_BOOL__
 * INT8_T                = __INT8_T__
 * INT16_T               = __INT16_T__             # <<<<<<<<<<<<<<
 * INT32_T               = __INT32_T__
 * INT64_T               = __INT64_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INT16_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT16_T__)) < 0) __PYX_ERR(21, 982, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":983
 * INT8_T                = __INT8_T__
 * INT16_T               = __INT16_T__
 * INT32_T               = __INT32_T__             # <<<<<<<<<<<<<<
 * INT64_T               = __INT64_T__
 * UINT8_T               = __UINT8_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INT32_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT32_T__)) < 0) __PYX_ERR(21, 983, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":984
 * INT16_T               = __INT16_T__
 * INT32_T               = __INT32_T__
 * INT64_T               = __INT64_T__             # <<<<<<<<<<<<<<
 * UINT8_T               = __UINT8_T__
 * UINT16_T              = __UINT16_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INT64_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT64_T__)) < 0) __PYX_ERR(21, 984, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":985
 * INT32_T               = __INT32_T__
 * INT64_T               = __INT64_T__
 * UINT8_T               = __UINT8_T__             # <<<<<<<<<<<<<<
 * UINT16_T              = __UINT16_T__
 * UINT32_T              = __UINT32_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UINT8_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT8_T__)) < 0) __PYX_ERR(21, 985, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":986
 * INT64_T               = __INT64_T__
 * UINT8_T               = __UINT8_T__
 * UINT16_T              = __UINT16_T__             # <<<<<<<<<<<<<<
 * UINT32_T              = __UINT32_T__
 * UINT64_T              = __UINT64_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UINT16_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT16_T__)) < 0) __PYX_ERR(21, 986, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":987
 * UINT8_T               = __UINT8_T__
 * UINT16_T              = __UINT16_T__
 * UINT32_T              = __UINT32_T__             # <<<<<<<<<<<<<<
 * UINT64_T              = __UINT64_T__
 * C_COMPLEX             = __C_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UINT32_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT32_T__)) < 0) __PYX_ERR(21, 987, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":988
 * UINT16_T              = __UINT16_T__
 * UINT32_T              = __UINT32_T__
 * UINT64_T              = __UINT64_T__             # <<<<<<<<<<<<<<
 * C_COMPLEX             = __C_COMPLEX__
 * C_FLOAT_COMPLEX       = __C_FLOAT_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UINT64_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___UINT64_T__)) < 0) __PYX_ERR(21, 988, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":989
 * UINT32_T              = __UINT32_T__
 * UINT64_T              = __UINT64_T__
 * C_COMPLEX             = __C_COMPLEX__             # <<<<<<<<<<<<<<
 * C_FLOAT_COMPLEX       = __C_FLOAT_COMPLEX__
 * C_DOUBLE_COMPLEX      = __C_DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_C_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___C_COMPLEX__)) < 0) __PYX_ERR(21, 989, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":990
 * UINT64_T              = __UINT64_T__
 * C_COMPLEX             = __C_COMPLEX__
 * C_FLOAT_COMPLEX       = __C_FLOAT_COMPLEX__             # <<<<<<<<<<<<<<
 * C_DOUBLE_COMPLEX      = __C_DOUBLE_COMPLEX__
 * C_LONG_DOUBLE_COMPLEX = __C_LONG_DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_C_FLOAT_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__)) < 0) __PYX_ERR(21, 990, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":991
 * C_COMPLEX             = __C_COMPLEX__
 * C_FLOAT_COMPLEX       = __C_FLOAT_COMPLEX__
 * C_DOUBLE_COMPLEX      = __C_DOUBLE_COMPLEX__             # <<<<<<<<<<<<<<
 * C_LONG_DOUBLE_COMPLEX = __C_LONG_DOUBLE_COMPLEX__
 * # C++ datatypes
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_C_DOUBLE_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__)) < 0) __PYX_ERR(21, 991, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":992
 * C_FLOAT_COMPLEX       = __C_FLOAT_COMPLEX__
 * C_DOUBLE_COMPLEX      = __C_DOUBLE_COMPLEX__
 * C_LONG_DOUBLE_COMPLEX = __C_LONG_DOUBLE_COMPLEX__             # <<<<<<<<<<<<<<
 * # C++ datatypes
 * CXX_BOOL                = __CXX_BOOL__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_C_LONG_DOUBLE_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__)) < 0) __PYX_ERR(21, 992, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":994
 * C_LONG_DOUBLE_COMPLEX = __C_LONG_DOUBLE_COMPLEX__
 * # C++ datatypes
 * CXX_BOOL                = __CXX_BOOL__             # <<<<<<<<<<<<<<
 * CXX_FLOAT_COMPLEX       = __CXX_FLOAT_COMPLEX__
 * CXX_DOUBLE_COMPLEX      = __CXX_DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CXX_BOOL, ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_BOOL__)) < 0) __PYX_ERR(21, 994, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":995
 * # C++ datatypes
 * CXX_BOOL                = __CXX_BOOL__
 * CXX_FLOAT_COMPLEX       = __CXX_FLOAT_COMPLEX__             # <<<<<<<<<<<<<<
 * CXX_DOUBLE_COMPLEX      = __CXX_DOUBLE_COMPLEX__
 * CXX_LONG_DOUBLE_COMPLEX = __CXX_LONG_DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CXX_FLOAT_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__)) < 0) __PYX_ERR(21, 995, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":996
 * CXX_BOOL                = __CXX_BOOL__
 * CXX_FLOAT_COMPLEX       = __CXX_FLOAT_COMPLEX__
 * CXX_DOUBLE_COMPLEX      = __CXX_DOUBLE_COMPLEX__             # <<<<<<<<<<<<<<
 * CXX_LONG_DOUBLE_COMPLEX = __CXX_LONG_DOUBLE_COMPLEX__
 * # C Datatypes for reduction operations
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CXX_DOUBLE_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__)) < 0) __PYX_ERR(21, 996, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":997
 * CXX_FLOAT_COMPLEX       = __CXX_FLOAT_COMPLEX__
 * CXX_DOUBLE_COMPLEX      = __CXX_DOUBLE_COMPLEX__
 * CXX_LONG_DOUBLE_COMPLEX = __CXX_LONG_DOUBLE_COMPLEX__             # <<<<<<<<<<<<<<
 * # C Datatypes for reduction operations
 * SHORT_INT        = __SHORT_INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CXX_LONG_DOUBLE_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__)) < 0) __PYX_ERR(21, 997, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":999
 * CXX_LONG_DOUBLE_COMPLEX = __CXX_LONG_DOUBLE_COMPLEX__
 * # C Datatypes for reduction operations
 * SHORT_INT        = __SHORT_INT__             # <<<<<<<<<<<<<<
 * INT_INT = TWOINT = __TWOINT__
 * LONG_INT         = __LONG_INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SHORT_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT_INT__)) < 0) __PYX_ERR(21, 999, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1000
 * # C Datatypes for reduction operations
 * SHORT_INT        = __SHORT_INT__
 * INT_INT = TWOINT = __TWOINT__             # <<<<<<<<<<<<<<
 * LONG_INT         = __LONG_INT__
 * FLOAT_INT        = __FLOAT_INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INT_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___TWOINT__)) < 0) __PYX_ERR(21, 1000, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TWOINT, ((PyObject *)__pyx_v_6mpi4py_3MPI___TWOINT__)) < 0) __PYX_ERR(21, 1000, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1001
 * SHORT_INT        = __SHORT_INT__
 * INT_INT = TWOINT = __TWOINT__
 * LONG_INT         = __LONG_INT__             # <<<<<<<<<<<<<<
 * FLOAT_INT        = __FLOAT_INT__
 * DOUBLE_INT       = __DOUBLE_INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LONG_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_INT__)) < 0) __PYX_ERR(21, 1001, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1002
 * INT_INT = TWOINT = __TWOINT__
 * LONG_INT         = __LONG_INT__
 * FLOAT_INT        = __FLOAT_INT__             # <<<<<<<<<<<<<<
 * DOUBLE_INT       = __DOUBLE_INT__
 * LONG_DOUBLE_INT  = __LONG_DOUBLE_INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FLOAT_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___FLOAT_INT__)) < 0) __PYX_ERR(21, 1002, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1003
 * LONG_INT         = __LONG_INT__
 * FLOAT_INT        = __FLOAT_INT__
 * DOUBLE_INT       = __DOUBLE_INT__             # <<<<<<<<<<<<<<
 * LONG_DOUBLE_INT  = __LONG_DOUBLE_INT__
 * # Elementary Fortran datatypes
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DOUBLE_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_INT__)) < 0) __PYX_ERR(21, 1003, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1004
 * FLOAT_INT        = __FLOAT_INT__
 * DOUBLE_INT       = __DOUBLE_INT__
 * LONG_DOUBLE_INT  = __LONG_DOUBLE_INT__             # <<<<<<<<<<<<<<
 * # Elementary Fortran datatypes
 * CHARACTER        = __CHARACTER__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LONG_DOUBLE_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__)) < 0) __PYX_ERR(21, 1004, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1006
 * LONG_DOUBLE_INT  = __LONG_DOUBLE_INT__
 * # Elementary Fortran datatypes
 * CHARACTER        = __CHARACTER__             # <<<<<<<<<<<<<<
 * LOGICAL          = __LOGICAL__
 * INTEGER          = __INTEGER__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CHARACTER, ((PyObject *)__pyx_v_6mpi4py_3MPI___CHARACTER__)) < 0) __PYX_ERR(21, 1006, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1007
 * # Elementary Fortran datatypes
 * CHARACTER        = __CHARACTER__
 * LOGICAL          = __LOGICAL__             # <<<<<<<<<<<<<<
 * INTEGER          = __INTEGER__
 * REAL             = __REAL__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOGICAL, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL__)) < 0) __PYX_ERR(21, 1007, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1008
 * CHARACTER        = __CHARACTER__
 * LOGICAL          = __LOGICAL__
 * INTEGER          = __INTEGER__             # <<<<<<<<<<<<<<
 * REAL             = __REAL__
 * DOUBLE_PRECISION = __DOUBLE_PRECISION__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTEGER, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER__)) < 0) __PYX_ERR(21, 1008, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1009
 * LOGICAL          = __LOGICAL__
 * INTEGER          = __INTEGER__
 * REAL             = __REAL__             # <<<<<<<<<<<<<<
 * DOUBLE_PRECISION = __DOUBLE_PRECISION__
 * COMPLEX          = __COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REAL, ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL__)) < 0) __PYX_ERR(21, 1009, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1010
 * INTEGER          = __INTEGER__
 * REAL             = __REAL__
 * DOUBLE_PRECISION = __DOUBLE_PRECISION__             # <<<<<<<<<<<<<<
 * COMPLEX          = __COMPLEX__
 * DOUBLE_COMPLEX   = __DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DOUBLE_PRECISION, ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__)) < 0) __PYX_ERR(21, 1010, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1011
 * REAL             = __REAL__
 * DOUBLE_PRECISION = __DOUBLE_PRECISION__
 * COMPLEX          = __COMPLEX__             # <<<<<<<<<<<<<<
 * DOUBLE_COMPLEX   = __DOUBLE_COMPLEX__
 * # Size-specific Fortran datatypes
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__)) < 0) __PYX_ERR(21, 1011, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1012
 * DOUBLE_PRECISION = __DOUBLE_PRECISION__
 * COMPLEX          = __COMPLEX__
 * DOUBLE_COMPLEX   = __DOUBLE_COMPLEX__             # <<<<<<<<<<<<<<
 * # Size-specific Fortran datatypes
 * LOGICAL1  = __LOGICAL1__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DOUBLE_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__)) < 0) __PYX_ERR(21, 1012, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1014
 * DOUBLE_COMPLEX   = __DOUBLE_COMPLEX__
 * # Size-specific Fortran datatypes
 * LOGICAL1  = __LOGICAL1__             # <<<<<<<<<<<<<<
 * LOGICAL2  = __LOGICAL2__
 * LOGICAL4  = __LOGICAL4__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOGICAL1, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL1__)) < 0) __PYX_ERR(21, 1014, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1015
 * # Size-specific Fortran datatypes
 * LOGICAL1  = __LOGICAL1__
 * LOGICAL2  = __LOGICAL2__             # <<<<<<<<<<<<<<
 * LOGICAL4  = __LOGICAL4__
 * LOGICAL8  = __LOGICAL8__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOGICAL2, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL2__)) < 0) __PYX_ERR(21, 1015, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1016
 * LOGICAL1  = __LOGICAL1__
 * LOGICAL2  = __LOGICAL2__
 * LOGICAL4  = __LOGICAL4__             # <<<<<<<<<<<<<<
 * LOGICAL8  = __LOGICAL8__
 * INTEGER1  = __INTEGER1__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOGICAL4, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL4__)) < 0) __PYX_ERR(21, 1016, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1017
 * LOGICAL2  = __LOGICAL2__
 * LOGICAL4  = __LOGICAL4__
 * LOGICAL8  = __LOGICAL8__             # <<<<<<<<<<<<<<
 * INTEGER1  = __INTEGER1__
 * INTEGER2  = __INTEGER2__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOGICAL8, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL8__)) < 0) __PYX_ERR(21, 1017, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1018
 * LOGICAL4  = __LOGICAL4__
 * LOGICAL8  = __LOGICAL8__
 * INTEGER1  = __INTEGER1__             # <<<<<<<<<<<<<<
 * INTEGER2  = __INTEGER2__
 * INTEGER4  = __INTEGER4__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTEGER1, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER1__)) < 0) __PYX_ERR(21, 1018, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1019
 * LOGICAL8  = __LOGICAL8__
 * INTEGER1  = __INTEGER1__
 * INTEGER2  = __INTEGER2__             # <<<<<<<<<<<<<<
 * INTEGER4  = __INTEGER4__
 * INTEGER8  = __INTEGER8__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTEGER2, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER2__)) < 0) __PYX_ERR(21, 1019, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1020
 * INTEGER1  = __INTEGER1__
 * INTEGER2  = __INTEGER2__
 * INTEGER4  = __INTEGER4__             # <<<<<<<<<<<<<<
 * INTEGER8  = __INTEGER8__
 * INTEGER16 = __INTEGER16__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTEGER4, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER4__)) < 0) __PYX_ERR(21, 1020, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1021
 * INTEGER2  = __INTEGER2__
 * INTEGER4  = __INTEGER4__
 * INTEGER8  = __INTEGER8__             # <<<<<<<<<<<<<<
 * INTEGER16 = __INTEGER16__
 * REAL2     = __REAL2__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTEGER8, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER8__)) < 0) __PYX_ERR(21, 1021, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1022
 * INTEGER4  = __INTEGER4__
 * INTEGER8  = __INTEGER8__
 * INTEGER16 = __INTEGER16__             # <<<<<<<<<<<<<<
 * REAL2     = __REAL2__
 * REAL4     = __REAL4__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INTEGER16, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER16__)) < 0) __PYX_ERR(21, 1022, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1023
 * INTEGER8  = __INTEGER8__
 * INTEGER16 = __INTEGER16__
 * REAL2     = __REAL2__             # <<<<<<<<<<<<<<
 * REAL4     = __REAL4__
 * REAL8     = __REAL8__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REAL2, ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL2__)) < 0) __PYX_ERR(21, 1023, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1024
 * INTEGER16 = __INTEGER16__
 * REAL2     = __REAL2__
 * REAL4     = __REAL4__             # <<<<<<<<<<<<<<
 * REAL8     = __REAL8__
 * REAL16    = __REAL16__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REAL4, ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL4__)) < 0) __PYX_ERR(21, 1024, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1025
 * REAL2     = __REAL2__
 * REAL4     = __REAL4__
 * REAL8     = __REAL8__             # <<<<<<<<<<<<<<
 * REAL16    = __REAL16__
 * COMPLEX4  = __COMPLEX4__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REAL8, ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL8__)) < 0) __PYX_ERR(21, 1025, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1026
 * REAL4     = __REAL4__
 * REAL8     = __REAL8__
 * REAL16    = __REAL16__             # <<<<<<<<<<<<<<
 * COMPLEX4  = __COMPLEX4__
 * COMPLEX8  = __COMPLEX8__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REAL16, ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL16__)) < 0) __PYX_ERR(21, 1026, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1027
 * REAL8     = __REAL8__
 * REAL16    = __REAL16__
 * COMPLEX4  = __COMPLEX4__             # <<<<<<<<<<<<<<
 * COMPLEX8  = __COMPLEX8__
 * COMPLEX16 = __COMPLEX16__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMPLEX4, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX4__)) < 0) __PYX_ERR(21, 1027, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1028
 * REAL16    = __REAL16__
 * COMPLEX4  = __COMPLEX4__
 * COMPLEX8  = __COMPLEX8__             # <<<<<<<<<<<<<<
 * COMPLEX16 = __COMPLEX16__
 * COMPLEX32 = __COMPLEX32__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMPLEX8, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX8__)) < 0) __PYX_ERR(21, 1028, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1029
 * COMPLEX4  = __COMPLEX4__
 * COMPLEX8  = __COMPLEX8__
 * COMPLEX16 = __COMPLEX16__             # <<<<<<<<<<<<<<
 * COMPLEX32 = __COMPLEX32__
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMPLEX16, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX16__)) < 0) __PYX_ERR(21, 1029, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1030
 * COMPLEX8  = __COMPLEX8__
 * COMPLEX16 = __COMPLEX16__
 * COMPLEX32 = __COMPLEX32__             # <<<<<<<<<<<<<<
 * 
 * # Convenience aliases
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMPLEX32, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX32__)) < 0) __PYX_ERR(21, 1030, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1033
 * 
 * # Convenience aliases
 * UNSIGNED_INT          = __UNSIGNED__             # <<<<<<<<<<<<<<
 * SIGNED_SHORT          = __SHORT__
 * SIGNED_INT            = __INT__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNSIGNED_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___UNSIGNED__)) < 0) __PYX_ERR(21, 1033, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1034
 * # Convenience aliases
 * UNSIGNED_INT          = __UNSIGNED__
 * SIGNED_SHORT          = __SHORT__             # <<<<<<<<<<<<<<
 * SIGNED_INT            = __INT__
 * SIGNED_LONG           = __LONG__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIGNED_SHORT, ((PyObject *)__pyx_v_6mpi4py_3MPI___SHORT__)) < 0) __PYX_ERR(21, 1034, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1035
 * UNSIGNED_INT          = __UNSIGNED__
 * SIGNED_SHORT          = __SHORT__
 * SIGNED_INT            = __INT__             # <<<<<<<<<<<<<<
 * SIGNED_LONG           = __LONG__
 * SIGNED_LONG_LONG      = __LONG_LONG__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIGNED_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT__)) < 0) __PYX_ERR(21, 1035, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1036
 * SIGNED_SHORT          = __SHORT__
 * SIGNED_INT            = __INT__
 * SIGNED_LONG           = __LONG__             # <<<<<<<<<<<<<<
 * SIGNED_LONG_LONG      = __LONG_LONG__
 * BOOL                  = __C_BOOL__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIGNED_LONG, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG__)) < 0) __PYX_ERR(21, 1036, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1037
 * SIGNED_INT            = __INT__
 * SIGNED_LONG           = __LONG__
 * SIGNED_LONG_LONG      = __LONG_LONG__             # <<<<<<<<<<<<<<
 * BOOL                  = __C_BOOL__
 * SINT8_T               = __INT8_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIGNED_LONG_LONG, ((PyObject *)__pyx_v_6mpi4py_3MPI___LONG_LONG__)) < 0) __PYX_ERR(21, 1037, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1038
 * SIGNED_LONG           = __LONG__
 * SIGNED_LONG_LONG      = __LONG_LONG__
 * BOOL                  = __C_BOOL__             # <<<<<<<<<<<<<<
 * SINT8_T               = __INT8_T__
 * SINT16_T              = __INT16_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BOOL, ((PyObject *)__pyx_v_6mpi4py_3MPI___C_BOOL__)) < 0) __PYX_ERR(21, 1038, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1039
 * SIGNED_LONG_LONG      = __LONG_LONG__
 * BOOL                  = __C_BOOL__
 * SINT8_T               = __INT8_T__             # <<<<<<<<<<<<<<
 * SINT16_T              = __INT16_T__
 * SINT32_T              = __INT32_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SINT8_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT8_T__)) < 0) __PYX_ERR(21, 1039, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1040
 * BOOL                  = __C_BOOL__
 * SINT8_T               = __INT8_T__
 * SINT16_T              = __INT16_T__             # <<<<<<<<<<<<<<
 * SINT32_T              = __INT32_T__
 * SINT64_T              = __INT64_T__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SINT16_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT16_T__)) < 0) __PYX_ERR(21, 1040, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1041
 * SINT8_T               = __INT8_T__
 * SINT16_T              = __INT16_T__
 * SINT32_T              = __INT32_T__             # <<<<<<<<<<<<<<
 * SINT64_T              = __INT64_T__
 * F_BOOL                = __LOGICAL__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SINT32_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT32_T__)) < 0) __PYX_ERR(21, 1041, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1042
 * SINT16_T              = __INT16_T__
 * SINT32_T              = __INT32_T__
 * SINT64_T              = __INT64_T__             # <<<<<<<<<<<<<<
 * F_BOOL                = __LOGICAL__
 * F_INT                 = __INTEGER__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SINT64_T, ((PyObject *)__pyx_v_6mpi4py_3MPI___INT64_T__)) < 0) __PYX_ERR(21, 1042, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1043
 * SINT32_T              = __INT32_T__
 * SINT64_T              = __INT64_T__
 * F_BOOL                = __LOGICAL__             # <<<<<<<<<<<<<<
 * F_INT                 = __INTEGER__
 * F_FLOAT               = __REAL__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_BOOL, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOGICAL__)) < 0) __PYX_ERR(21, 1043, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1044
 * SINT64_T              = __INT64_T__
 * F_BOOL                = __LOGICAL__
 * F_INT                 = __INTEGER__             # <<<<<<<<<<<<<<
 * F_FLOAT               = __REAL__
 * F_DOUBLE              = __DOUBLE_PRECISION__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_INT, ((PyObject *)__pyx_v_6mpi4py_3MPI___INTEGER__)) < 0) __PYX_ERR(21, 1044, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1045
 * F_BOOL                = __LOGICAL__
 * F_INT                 = __INTEGER__
 * F_FLOAT               = __REAL__             # <<<<<<<<<<<<<<
 * F_DOUBLE              = __DOUBLE_PRECISION__
 * F_COMPLEX             = __COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_FLOAT, ((PyObject *)__pyx_v_6mpi4py_3MPI___REAL__)) < 0) __PYX_ERR(21, 1045, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1046
 * F_INT                 = __INTEGER__
 * F_FLOAT               = __REAL__
 * F_DOUBLE              = __DOUBLE_PRECISION__             # <<<<<<<<<<<<<<
 * F_COMPLEX             = __COMPLEX__
 * F_FLOAT_COMPLEX       = __COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_DOUBLE, ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__)) < 0) __PYX_ERR(21, 1046, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1047
 * F_FLOAT               = __REAL__
 * F_DOUBLE              = __DOUBLE_PRECISION__
 * F_COMPLEX             = __COMPLEX__             # <<<<<<<<<<<<<<
 * F_FLOAT_COMPLEX       = __COMPLEX__
 * F_DOUBLE_COMPLEX      = __DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__)) < 0) __PYX_ERR(21, 1047, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1048
 * F_DOUBLE              = __DOUBLE_PRECISION__
 * F_COMPLEX             = __COMPLEX__
 * F_FLOAT_COMPLEX       = __COMPLEX__             # <<<<<<<<<<<<<<
 * F_DOUBLE_COMPLEX      = __DOUBLE_COMPLEX__
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_FLOAT_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMPLEX__)) < 0) __PYX_ERR(21, 1048, __pyx_L1_error)

  /* "mpi4py/MPI/Datatype.pyx":1049
 * F_COMPLEX             = __COMPLEX__
 * F_FLOAT_COMPLEX       = __COMPLEX__
 * F_DOUBLE_COMPLEX      = __DOUBLE_COMPLEX__             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_F_DOUBLE_COMPLEX, ((PyObject *)__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__)) < 0) __PYX_ERR(21, 1049, __pyx_L1_error)

  /* "mpi4py/MPI/Status.pyx":81
 *             self.Set_error(value)
 * 
 *     def Get_count(self, Datatype datatype=BYTE):             # <<<<<<<<<<<<<<
 *         """
 *         Get the number of *top level* elements
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_BYTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Datatype))))) __PYX_ERR(24, 81, __pyx_L1_error)
  __pyx_k__28 = ((struct PyMPIDatatypeObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Status.pyx":156
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Status, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(24, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Status.pyx":155
 *         return [f_status[i] for i from 0 <= i < n]
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Status->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(24, 156, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Status);

  /* "mpi4py/MPI/Request.pyx":75
 * 
 *     @classmethod
 *     def Waitany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for any previously initiated request to complete
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_Waitany); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":74
 *     # --------------------
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Waitany(cls, requests, Status status=None):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_Waitany, __pyx_t_3) < 0) __PYX_ERR(25, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":93
 * 
 *     @classmethod
 *     def Testany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of any previously initiated request
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_Testany); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Request.pyx":92
 *         return index
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Testany(cls, requests, Status status=None):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_Testany, __pyx_t_1) < 0) __PYX_ERR(25, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":113
 * 
 *     @classmethod
 *     def Waitall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for all previously initiated requests to complete
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_Waitall); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":112
 *         return (index, <bint>flag)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Waitall(cls, requests, statuses=None):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_Waitall, __pyx_t_3) < 0) __PYX_ERR(25, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":131
 * 
 *     @classmethod
 *     def Testall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of all previously initiated requests
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_Testall); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Request.pyx":130
 *         return True
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Testall(cls, requests, statuses=None):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_Testall, __pyx_t_1) < 0) __PYX_ERR(25, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":150
 * 
 *     @classmethod
 *     def Waitsome(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for some previously initiated requests to complete
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_Waitsome); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":149
 *         return <bint>flag
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Waitsome(cls, requests, statuses=None):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_Waitsome, __pyx_t_3) < 0) __PYX_ERR(25, 150, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":175
 * 
 *     @classmethod
 *     def Testsome(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of some previously initiated requests
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_Testsome); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Request.pyx":174
 *         return indices
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Testsome(cls, requests, statuses=None):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_Testsome, __pyx_t_1) < 0) __PYX_ERR(25, 175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":217
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_f2py); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":216
 *         return MPI_Request_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_f2py, __pyx_t_3) < 0) __PYX_ERR(25, 217, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":247
 *     #
 *     @classmethod
 *     def waitany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for any previously initiated request to complete
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_waitany); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Request.pyx":246
 *         return (<bint>flag, msg)
 *     #
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def waitany(cls, requests, Status status=None):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_waitany, __pyx_t_1) < 0) __PYX_ERR(25, 247, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":256
 *     #
 *     @classmethod
 *     def testany(cls, requests, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of any previously initiated request
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_testany); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":255
 *         return (index, msg)
 *     #
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def testany(cls, requests, Status status=None):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_testany, __pyx_t_3) < 0) __PYX_ERR(25, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":266
 *     #
 *     @classmethod
 *     def waitall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Wait for all previously initiated requests to complete
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_waitall); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Request.pyx":265
 *         return (index, <bint>flag, msg)
 *     #
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def waitall(cls, requests, statuses=None):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_waitall, __pyx_t_1) < 0) __PYX_ERR(25, 266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":274
 *     #
 *     @classmethod
 *     def testall(cls, requests, statuses=None):             # <<<<<<<<<<<<<<
 *         """
 *         Test for completion of all previously initiated requests
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Request, __pyx_n_s_testall); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":273
 *         return msg
 *     #
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def testall(cls, requests, statuses=None):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Request->tp_dict, __pyx_n_s_testall, __pyx_t_3) < 0) __PYX_ERR(25, 274, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Request);

  /* "mpi4py/MPI/Request.pyx":300
 * 
 *     @classmethod
 *     def Startall(cls, requests):             # <<<<<<<<<<<<<<
 *         """
 *         Start a collection of persistent requests
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Prequest, __pyx_n_s_Startall); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Request.pyx":299
 *         with nogil: CHKERR( MPI_Start(&self.ob_mpi) )
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Startall(cls, requests):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Prequest->tp_dict, __pyx_n_s_Startall, __pyx_t_1) < 0) __PYX_ERR(25, 300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Prequest);

  /* "mpi4py/MPI/Request.pyx":327
 * 
 *     @classmethod
 *     def Start(cls, query_fn, free_fn, cancel_fn,             # <<<<<<<<<<<<<<
 *               args=None, kargs=None):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Grequest, __pyx_n_s_Start); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Request.pyx":326
 *         <void>(<Grequest?>request)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Start(cls, query_fn, free_fn, cancel_fn,
 *               args=None, kargs=None):
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Grequest->tp_dict, __pyx_n_s_Start, __pyx_t_3) < 0) __PYX_ERR(25, 327, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Grequest);

  /* "mpi4py/MPI/Request.pyx":356
 * 
 * 
 * cdef Request __REQUEST_NULL__ = new_Request(MPI_REQUEST_NULL)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Request(MPI_REQUEST_NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REQUEST_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REQUEST_NULL__, ((struct PyMPIRequestObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Request.pyx":362
 * # --------------------------
 * 
 * REQUEST_NULL = __REQUEST_NULL__  #: Null request handle             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REQUEST_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___REQUEST_NULL__)) < 0) __PYX_ERR(25, 362, __pyx_L1_error)

  /* "mpi4py/MPI/Message.pyx":34
 *     @classmethod
 *     def Probe(cls, Comm comm,
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Blocking test for a matched message
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__29 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__30 = __pyx_t_2;

  /* "mpi4py/MPI/Message.pyx":33
 * 
 *     @classmethod
 *     def Probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Message, __pyx_n_s_Probe); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Message.pyx":32
 *     # --------------
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Probe(cls, Comm comm,
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message->tp_dict, __pyx_n_s_Probe, __pyx_t_1) < 0) __PYX_ERR(26, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Message);

  /* "mpi4py/MPI/Message.pyx":48
 *     @classmethod
 *     def Iprobe(cls, Comm comm,
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking test for a matched message
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__31 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__32 = __pyx_t_2;

  /* "mpi4py/MPI/Message.pyx":47
 * 
 *     @classmethod
 *     def Iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Message, __pyx_n_s_Iprobe); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Message.pyx":46
 *         return message
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Iprobe(cls, Comm comm,
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message->tp_dict, __pyx_n_s_Iprobe, __pyx_t_3) < 0) __PYX_ERR(26, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Message);

  /* "mpi4py/MPI/Message.pyx":104
 *     @classmethod
 *     def probe(cls, Comm comm,
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """Blocking test for a matched message"""
 *         cdef Message message = <Message>Message.__new__(cls)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__33 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__34 = __pyx_t_2;

  /* "mpi4py/MPI/Message.pyx":103
 *     #
 *     @classmethod
 *     def probe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Blocking test for a matched message"""
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Message, __pyx_n_s_probe); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Message.pyx":102
 *     # --------------------
 *     #
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def probe(cls, Comm comm,
 *               int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message->tp_dict, __pyx_n_s_probe, __pyx_t_1) < 0) __PYX_ERR(26, 103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Message);

  /* "mpi4py/MPI/Message.pyx":114
 *     @classmethod
 *     def iprobe(cls, Comm comm,
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):             # <<<<<<<<<<<<<<
 *         """Nonblocking test for a matched message"""
 *         cdef int flag = 0
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__35 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(26, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__36 = __pyx_t_2;

  /* "mpi4py/MPI/Message.pyx":113
 *     #
 *     @classmethod
 *     def iprobe(cls, Comm comm,             # <<<<<<<<<<<<<<
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 *         """Nonblocking test for a matched message"""
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Message, __pyx_n_s_iprobe); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Message.pyx":112
 *         return message
 *     #
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def iprobe(cls, Comm comm,
 *                int source=ANY_SOURCE, int tag=ANY_TAG, Status status=None):
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message->tp_dict, __pyx_n_s_iprobe, __pyx_t_3) < 0) __PYX_ERR(26, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Message);

  /* "mpi4py/MPI/Message.pyx":153
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Message, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Message.pyx":152
 *         return MPI_Message_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Message->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(26, 153, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Message);

  /* "mpi4py/MPI/Message.pyx":161
 * 
 * 
 * cdef Message __MESSAGE_NULL__    = new_Message ( MPI_MESSAGE_NULL    )             # <<<<<<<<<<<<<<
 * cdef Message __MESSAGE_NO_PROC__ = new_Message ( MPI_MESSAGE_NO_PROC )
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Message(MPI_MESSAGE_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___MESSAGE_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___MESSAGE_NULL__, ((struct PyMPIMessageObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Message.pyx":162
 * 
 * cdef Message __MESSAGE_NULL__    = new_Message ( MPI_MESSAGE_NULL    )
 * cdef Message __MESSAGE_NO_PROC__ = new_Message ( MPI_MESSAGE_NO_PROC )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Message(MPI_MESSAGE_NO_PROC)); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__, ((struct PyMPIMessageObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Message.pyx":168
 * # --------------------------
 * 
 * MESSAGE_NULL    = __MESSAGE_NULL__    #: Null message handle             # <<<<<<<<<<<<<<
 * MESSAGE_NO_PROC = __MESSAGE_NO_PROC__ #: No-proc message handle
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MESSAGE_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___MESSAGE_NULL__)) < 0) __PYX_ERR(26, 168, __pyx_L1_error)

  /* "mpi4py/MPI/Message.pyx":169
 * 
 * MESSAGE_NULL    = __MESSAGE_NULL__    #: Null message handle
 * MESSAGE_NO_PROC = __MESSAGE_NO_PROC__ #: No-proc message handle             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MESSAGE_NO_PROC, ((PyObject *)__pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__)) < 0) __PYX_ERR(26, 169, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":29
 * 
 *     @classmethod
 *     def Create(cls):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new, empty info object
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Info, __pyx_n_s_Create); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Info.pyx":28
 *         return self.ob_mpi != MPI_INFO_NULL
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create(cls):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Info->tp_dict, __pyx_n_s_Create, __pyx_t_3) < 0) __PYX_ERR(27, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Info);

  /* "mpi4py/MPI/Info.pyx":116
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Info, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Info.pyx":115
 *         return MPI_Info_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Info->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(27, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Info);

  /* "mpi4py/MPI/Info.pyx":229
 * 
 * 
 * cdef Info __INFO_NULL__ = new_Info(MPI_INFO_NULL)             # <<<<<<<<<<<<<<
 * cdef Info __INFO_ENV__  = new_Info(MPI_INFO_ENV)
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Info(MPI_INFO_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INFO_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INFO_NULL__, ((struct PyMPIInfoObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Info.pyx":230
 * 
 * cdef Info __INFO_NULL__ = new_Info(MPI_INFO_NULL)
 * cdef Info __INFO_ENV__  = new_Info(MPI_INFO_ENV)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Info(MPI_INFO_ENV)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___INFO_ENV__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___INFO_ENV__, ((struct PyMPIInfoObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Info.pyx":236
 * # -----------------------
 * 
 * INFO_NULL = __INFO_NULL__  #: Null info handle             # <<<<<<<<<<<<<<
 * INFO_ENV  = __INFO_ENV__   #: Environment info handle
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INFO_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___INFO_NULL__)) < 0) __PYX_ERR(27, 236, __pyx_L1_error)

  /* "mpi4py/MPI/Info.pyx":237
 * 
 * INFO_NULL = __INFO_NULL__  #: Null info handle
 * INFO_ENV  = __INFO_ENV__   #: Environment info handle             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_INFO_ENV, ((PyObject *)__pyx_v_6mpi4py_3MPI___INFO_ENV__)) < 0) __PYX_ERR(27, 237, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":38
 * 
 *     @classmethod
 *     def Create(cls, function, bint commute=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a user-defined operation
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Op, __pyx_n_s_Create); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Op.pyx":37
 *             return op_user_py(self.ob_usrid, x, y, None)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create(cls, function, bint commute=False):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Op->tp_dict, __pyx_n_s_Create, __pyx_t_3) < 0) __PYX_ERR(28, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Op);

  /* "mpi4py/MPI/Op.pyx":132
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Op, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Op.pyx":131
 *         return MPI_Op_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Op->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(28, 132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Op);

  /* "mpi4py/MPI/Op.pyx":141
 * 
 * 
 * cdef Op __OP_NULL__ = new_Op( MPI_OP_NULL )             # <<<<<<<<<<<<<<
 * cdef Op __MAX__     = new_Op( MPI_MAX     )
 * cdef Op __MIN__     = new_Op( MPI_MIN     )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_OP_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___OP_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___OP_NULL__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":142
 * 
 * cdef Op __OP_NULL__ = new_Op( MPI_OP_NULL )
 * cdef Op __MAX__     = new_Op( MPI_MAX     )             # <<<<<<<<<<<<<<
 * cdef Op __MIN__     = new_Op( MPI_MIN     )
 * cdef Op __SUM__     = new_Op( MPI_SUM     )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_MAX)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___MAX__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___MAX__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":143
 * cdef Op __OP_NULL__ = new_Op( MPI_OP_NULL )
 * cdef Op __MAX__     = new_Op( MPI_MAX     )
 * cdef Op __MIN__     = new_Op( MPI_MIN     )             # <<<<<<<<<<<<<<
 * cdef Op __SUM__     = new_Op( MPI_SUM     )
 * cdef Op __PROD__    = new_Op( MPI_PROD    )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_MIN)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___MIN__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___MIN__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":144
 * cdef Op __MAX__     = new_Op( MPI_MAX     )
 * cdef Op __MIN__     = new_Op( MPI_MIN     )
 * cdef Op __SUM__     = new_Op( MPI_SUM     )             # <<<<<<<<<<<<<<
 * cdef Op __PROD__    = new_Op( MPI_PROD    )
 * cdef Op __LAND__    = new_Op( MPI_LAND    )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_SUM)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___SUM__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___SUM__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":145
 * cdef Op __MIN__     = new_Op( MPI_MIN     )
 * cdef Op __SUM__     = new_Op( MPI_SUM     )
 * cdef Op __PROD__    = new_Op( MPI_PROD    )             # <<<<<<<<<<<<<<
 * cdef Op __LAND__    = new_Op( MPI_LAND    )
 * cdef Op __BAND__    = new_Op( MPI_BAND    )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_PROD)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___PROD__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___PROD__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":146
 * cdef Op __SUM__     = new_Op( MPI_SUM     )
 * cdef Op __PROD__    = new_Op( MPI_PROD    )
 * cdef Op __LAND__    = new_Op( MPI_LAND    )             # <<<<<<<<<<<<<<
 * cdef Op __BAND__    = new_Op( MPI_BAND    )
 * cdef Op __LOR__     = new_Op( MPI_LOR     )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_LAND)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LAND__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LAND__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":147
 * cdef Op __PROD__    = new_Op( MPI_PROD    )
 * cdef Op __LAND__    = new_Op( MPI_LAND    )
 * cdef Op __BAND__    = new_Op( MPI_BAND    )             # <<<<<<<<<<<<<<
 * cdef Op __LOR__     = new_Op( MPI_LOR     )
 * cdef Op __BOR__     = new_Op( MPI_BOR     )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_BAND)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___BAND__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___BAND__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":148
 * cdef Op __LAND__    = new_Op( MPI_LAND    )
 * cdef Op __BAND__    = new_Op( MPI_BAND    )
 * cdef Op __LOR__     = new_Op( MPI_LOR     )             # <<<<<<<<<<<<<<
 * cdef Op __BOR__     = new_Op( MPI_BOR     )
 * cdef Op __LXOR__    = new_Op( MPI_LXOR    )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_LOR)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LOR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LOR__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":149
 * cdef Op __BAND__    = new_Op( MPI_BAND    )
 * cdef Op __LOR__     = new_Op( MPI_LOR     )
 * cdef Op __BOR__     = new_Op( MPI_BOR     )             # <<<<<<<<<<<<<<
 * cdef Op __LXOR__    = new_Op( MPI_LXOR    )
 * cdef Op __BXOR__    = new_Op( MPI_BXOR    )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_BOR)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___BOR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___BOR__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":150
 * cdef Op __LOR__     = new_Op( MPI_LOR     )
 * cdef Op __BOR__     = new_Op( MPI_BOR     )
 * cdef Op __LXOR__    = new_Op( MPI_LXOR    )             # <<<<<<<<<<<<<<
 * cdef Op __BXOR__    = new_Op( MPI_BXOR    )
 * cdef Op __MAXLOC__  = new_Op( MPI_MAXLOC  )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_LXOR)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___LXOR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___LXOR__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":151
 * cdef Op __BOR__     = new_Op( MPI_BOR     )
 * cdef Op __LXOR__    = new_Op( MPI_LXOR    )
 * cdef Op __BXOR__    = new_Op( MPI_BXOR    )             # <<<<<<<<<<<<<<
 * cdef Op __MAXLOC__  = new_Op( MPI_MAXLOC  )
 * cdef Op __MINLOC__  = new_Op( MPI_MINLOC  )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_BXOR)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___BXOR__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___BXOR__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":152
 * cdef Op __LXOR__    = new_Op( MPI_LXOR    )
 * cdef Op __BXOR__    = new_Op( MPI_BXOR    )
 * cdef Op __MAXLOC__  = new_Op( MPI_MAXLOC  )             # <<<<<<<<<<<<<<
 * cdef Op __MINLOC__  = new_Op( MPI_MINLOC  )
 * cdef Op __REPLACE__ = new_Op( MPI_REPLACE )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_MAXLOC)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___MAXLOC__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___MAXLOC__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":153
 * cdef Op __BXOR__    = new_Op( MPI_BXOR    )
 * cdef Op __MAXLOC__  = new_Op( MPI_MAXLOC  )
 * cdef Op __MINLOC__  = new_Op( MPI_MINLOC  )             # <<<<<<<<<<<<<<
 * cdef Op __REPLACE__ = new_Op( MPI_REPLACE )
 * cdef Op __NO_OP__   = new_Op( MPI_NO_OP   )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_MINLOC)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___MINLOC__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___MINLOC__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":154
 * cdef Op __MAXLOC__  = new_Op( MPI_MAXLOC  )
 * cdef Op __MINLOC__  = new_Op( MPI_MINLOC  )
 * cdef Op __REPLACE__ = new_Op( MPI_REPLACE )             # <<<<<<<<<<<<<<
 * cdef Op __NO_OP__   = new_Op( MPI_NO_OP   )
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_REPLACE)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___REPLACE__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___REPLACE__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":155
 * cdef Op __MINLOC__  = new_Op( MPI_MINLOC  )
 * cdef Op __REPLACE__ = new_Op( MPI_REPLACE )
 * cdef Op __NO_OP__   = new_Op( MPI_NO_OP   )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Op(MPI_NO_OP)); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___NO_OP__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___NO_OP__, ((struct PyMPIOpObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Op.pyx":161
 * # ----------------------------
 * 
 * OP_NULL = __OP_NULL__  #: Null             # <<<<<<<<<<<<<<
 * MAX     = __MAX__      #: Maximum
 * MIN     = __MIN__      #: Minimum
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_OP_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___OP_NULL__)) < 0) __PYX_ERR(28, 161, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":162
 * 
 * OP_NULL = __OP_NULL__  #: Null
 * MAX     = __MAX__      #: Maximum             # <<<<<<<<<<<<<<
 * MIN     = __MIN__      #: Minimum
 * SUM     = __SUM__      #: Sum
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX, ((PyObject *)__pyx_v_6mpi4py_3MPI___MAX__)) < 0) __PYX_ERR(28, 162, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":163
 * OP_NULL = __OP_NULL__  #: Null
 * MAX     = __MAX__      #: Maximum
 * MIN     = __MIN__      #: Minimum             # <<<<<<<<<<<<<<
 * SUM     = __SUM__      #: Sum
 * PROD    = __PROD__     #: Product
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MIN, ((PyObject *)__pyx_v_6mpi4py_3MPI___MIN__)) < 0) __PYX_ERR(28, 163, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":164
 * MAX     = __MAX__      #: Maximum
 * MIN     = __MIN__      #: Minimum
 * SUM     = __SUM__      #: Sum             # <<<<<<<<<<<<<<
 * PROD    = __PROD__     #: Product
 * LAND    = __LAND__     #: Logical and
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUM, ((PyObject *)__pyx_v_6mpi4py_3MPI___SUM__)) < 0) __PYX_ERR(28, 164, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":165
 * MIN     = __MIN__      #: Minimum
 * SUM     = __SUM__      #: Sum
 * PROD    = __PROD__     #: Product             # <<<<<<<<<<<<<<
 * LAND    = __LAND__     #: Logical and
 * BAND    = __BAND__     #: Bit-wise and
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PROD, ((PyObject *)__pyx_v_6mpi4py_3MPI___PROD__)) < 0) __PYX_ERR(28, 165, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":166
 * SUM     = __SUM__      #: Sum
 * PROD    = __PROD__     #: Product
 * LAND    = __LAND__     #: Logical and             # <<<<<<<<<<<<<<
 * BAND    = __BAND__     #: Bit-wise and
 * LOR     = __LOR__      #: Logical or
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LAND, ((PyObject *)__pyx_v_6mpi4py_3MPI___LAND__)) < 0) __PYX_ERR(28, 166, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":167
 * PROD    = __PROD__     #: Product
 * LAND    = __LAND__     #: Logical and
 * BAND    = __BAND__     #: Bit-wise and             # <<<<<<<<<<<<<<
 * LOR     = __LOR__      #: Logical or
 * BOR     = __BOR__      #: Bit-wise or
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BAND, ((PyObject *)__pyx_v_6mpi4py_3MPI___BAND__)) < 0) __PYX_ERR(28, 167, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":168
 * LAND    = __LAND__     #: Logical and
 * BAND    = __BAND__     #: Bit-wise and
 * LOR     = __LOR__      #: Logical or             # <<<<<<<<<<<<<<
 * BOR     = __BOR__      #: Bit-wise or
 * LXOR    = __LXOR__     #: Logical xor
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOR, ((PyObject *)__pyx_v_6mpi4py_3MPI___LOR__)) < 0) __PYX_ERR(28, 168, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":169
 * BAND    = __BAND__     #: Bit-wise and
 * LOR     = __LOR__      #: Logical or
 * BOR     = __BOR__      #: Bit-wise or             # <<<<<<<<<<<<<<
 * LXOR    = __LXOR__     #: Logical xor
 * BXOR    = __BXOR__     #: Bit-wise xor
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BOR, ((PyObject *)__pyx_v_6mpi4py_3MPI___BOR__)) < 0) __PYX_ERR(28, 169, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":170
 * LOR     = __LOR__      #: Logical or
 * BOR     = __BOR__      #: Bit-wise or
 * LXOR    = __LXOR__     #: Logical xor             # <<<<<<<<<<<<<<
 * BXOR    = __BXOR__     #: Bit-wise xor
 * MAXLOC  = __MAXLOC__   #: Maximum and location
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LXOR, ((PyObject *)__pyx_v_6mpi4py_3MPI___LXOR__)) < 0) __PYX_ERR(28, 170, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":171
 * BOR     = __BOR__      #: Bit-wise or
 * LXOR    = __LXOR__     #: Logical xor
 * BXOR    = __BXOR__     #: Bit-wise xor             # <<<<<<<<<<<<<<
 * MAXLOC  = __MAXLOC__   #: Maximum and location
 * MINLOC  = __MINLOC__   #: Minimum and location
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BXOR, ((PyObject *)__pyx_v_6mpi4py_3MPI___BXOR__)) < 0) __PYX_ERR(28, 171, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":172
 * LXOR    = __LXOR__     #: Logical xor
 * BXOR    = __BXOR__     #: Bit-wise xor
 * MAXLOC  = __MAXLOC__   #: Maximum and location             # <<<<<<<<<<<<<<
 * MINLOC  = __MINLOC__   #: Minimum and location
 * REPLACE = __REPLACE__  #: Replace (for RMA)
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAXLOC, ((PyObject *)__pyx_v_6mpi4py_3MPI___MAXLOC__)) < 0) __PYX_ERR(28, 172, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":173
 * BXOR    = __BXOR__     #: Bit-wise xor
 * MAXLOC  = __MAXLOC__   #: Maximum and location
 * MINLOC  = __MINLOC__   #: Minimum and location             # <<<<<<<<<<<<<<
 * REPLACE = __REPLACE__  #: Replace (for RMA)
 * NO_OP   = __NO_OP__    #: No-op   (for RMA)
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MINLOC, ((PyObject *)__pyx_v_6mpi4py_3MPI___MINLOC__)) < 0) __PYX_ERR(28, 173, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":174
 * MAXLOC  = __MAXLOC__   #: Maximum and location
 * MINLOC  = __MINLOC__   #: Minimum and location
 * REPLACE = __REPLACE__  #: Replace (for RMA)             # <<<<<<<<<<<<<<
 * NO_OP   = __NO_OP__    #: No-op   (for RMA)
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_REPLACE, ((PyObject *)__pyx_v_6mpi4py_3MPI___REPLACE__)) < 0) __PYX_ERR(28, 174, __pyx_L1_error)

  /* "mpi4py/MPI/Op.pyx":175
 * MINLOC  = __MINLOC__   #: Minimum and location
 * REPLACE = __REPLACE__  #: Replace (for RMA)
 * NO_OP   = __NO_OP__    #: No-op   (for RMA)             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NO_OP, ((PyObject *)__pyx_v_6mpi4py_3MPI___NO_OP__)) < 0) __PYX_ERR(28, 175, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":58
 * 
 *     @classmethod
 *     def Translate_ranks(cls, Group group1, ranks1, Group group2=None):             # <<<<<<<<<<<<<<
 *         """
 *         Translate the ranks of processes in
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_Translate_ranks); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Group.pyx":57
 *             return self.Get_rank()
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Translate_ranks(cls, Group group1, ranks1, Group group2=None):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_Translate_ranks, __pyx_t_3) < 0) __PYX_ERR(29, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":85
 * 
 *     @classmethod
 *     def Compare(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Compare two groups
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_Compare); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Group.pyx":84
 *         return ranks2
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Compare(cls, Group group1, Group group2):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_Compare, __pyx_t_1) < 0) __PYX_ERR(29, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":105
 * 
 *     @classmethod
 *     def Union(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group by combining
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Group.pyx":104
 *         return group
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Union(cls, Group group1, Group group2):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_Union, __pyx_t_3) < 0) __PYX_ERR(29, 105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":116
 * 
 *     @classmethod
 *     def Intersection(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group as the intersection
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_Intersection); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Group.pyx":115
 *         return group
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Intersection(cls, Group group1, Group group2):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_Intersection, __pyx_t_1) < 0) __PYX_ERR(29, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":126
 *         return group
 * 
 *     Intersect = Intersection             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_Intersection); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_Intersect, __pyx_t_1) < 0) __PYX_ERR(29, 126, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":129
 * 
 *     @classmethod
 *     def Difference(cls, Group group1, Group group2):             # <<<<<<<<<<<<<<
 *         """
 *         Produce a group from the difference
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_Difference); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Group.pyx":128
 *     Intersect = Intersection
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Difference(cls, Group group1, Group group2):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_Difference, __pyx_t_3) < 0) __PYX_ERR(29, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":212
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Group, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Group.pyx":211
 *         return MPI_Group_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Group->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(29, 212, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Group);

  /* "mpi4py/MPI/Group.pyx":221
 * 
 * 
 * cdef Group __GROUP_NULL__  = new_Group ( MPI_GROUP_NULL  )             # <<<<<<<<<<<<<<
 * cdef Group __GROUP_EMPTY__ = new_Group ( MPI_GROUP_EMPTY )
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Group(MPI_GROUP_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___GROUP_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___GROUP_NULL__, ((struct PyMPIGroupObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":222
 * 
 * cdef Group __GROUP_NULL__  = new_Group ( MPI_GROUP_NULL  )
 * cdef Group __GROUP_EMPTY__ = new_Group ( MPI_GROUP_EMPTY )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Group(MPI_GROUP_EMPTY)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___GROUP_EMPTY__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___GROUP_EMPTY__, ((struct PyMPIGroupObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Group.pyx":228
 * # ------------------------
 * 
 * GROUP_NULL  = __GROUP_NULL__   #: Null group handle             # <<<<<<<<<<<<<<
 * GROUP_EMPTY = __GROUP_EMPTY__  #: Empty group handle
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GROUP_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___GROUP_NULL__)) < 0) __PYX_ERR(29, 228, __pyx_L1_error)

  /* "mpi4py/MPI/Group.pyx":229
 * 
 * GROUP_NULL  = __GROUP_NULL__   #: Null group handle
 * GROUP_EMPTY = __GROUP_EMPTY__  #: Empty group handle             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GROUP_EMPTY, ((PyObject *)__pyx_v_6mpi4py_3MPI___GROUP_EMPTY__)) < 0) __PYX_ERR(29, 229, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":4
 * # ------------------------
 * 
 * IDENT     = MPI_IDENT     #: Groups are identical, contexts are the same             # <<<<<<<<<<<<<<
 * CONGRUENT = MPI_CONGRUENT #: Groups are identical, contexts are different
 * SIMILAR   = MPI_SIMILAR   #: Groups are similar, rank order differs
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_IDENT); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IDENT, __pyx_t_1) < 0) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":5
 * 
 * IDENT     = MPI_IDENT     #: Groups are identical, contexts are the same
 * CONGRUENT = MPI_CONGRUENT #: Groups are identical, contexts are different             # <<<<<<<<<<<<<<
 * SIMILAR   = MPI_SIMILAR   #: Groups are similar, rank order differs
 * UNEQUAL   = MPI_UNEQUAL   #: Groups are different
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_CONGRUENT); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CONGRUENT, __pyx_t_1) < 0) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":6
 * IDENT     = MPI_IDENT     #: Groups are identical, contexts are the same
 * CONGRUENT = MPI_CONGRUENT #: Groups are identical, contexts are different
 * SIMILAR   = MPI_SIMILAR   #: Groups are similar, rank order differs             # <<<<<<<<<<<<<<
 * UNEQUAL   = MPI_UNEQUAL   #: Groups are different
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_SIMILAR); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SIMILAR, __pyx_t_1) < 0) __PYX_ERR(7, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":7
 * CONGRUENT = MPI_CONGRUENT #: Groups are identical, contexts are different
 * SIMILAR   = MPI_SIMILAR   #: Groups are similar, rank order differs
 * UNEQUAL   = MPI_UNEQUAL   #: Groups are different             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_UNEQUAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNEQUAL, __pyx_t_1) < 0) __PYX_ERR(7, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":13
 * # -----------------------
 * 
 * CART       = MPI_CART       #: Cartesian topology             # <<<<<<<<<<<<<<
 * GRAPH      = MPI_GRAPH      #: General graph topology
 * DIST_GRAPH = MPI_DIST_GRAPH #: Distributed graph topology
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_CART); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CART, __pyx_t_1) < 0) __PYX_ERR(7, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":14
 * 
 * CART       = MPI_CART       #: Cartesian topology
 * GRAPH      = MPI_GRAPH      #: General graph topology             # <<<<<<<<<<<<<<
 * DIST_GRAPH = MPI_DIST_GRAPH #: Distributed graph topology
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_GRAPH); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GRAPH, __pyx_t_1) < 0) __PYX_ERR(7, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":15
 * CART       = MPI_CART       #: Cartesian topology
 * GRAPH      = MPI_GRAPH      #: General graph topology
 * DIST_GRAPH = MPI_DIST_GRAPH #: Distributed graph topology             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_DIST_GRAPH); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DIST_GRAPH, __pyx_t_1) < 0) __PYX_ERR(7, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":21
 * # --------------------------
 * 
 * UNWEIGHTED    = __UNWEIGHTED__     #: Unweighted graph             # <<<<<<<<<<<<<<
 * WEIGHTS_EMPTY = __WEIGHTS_EMPTY__  #: Empty graph weights
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_UNWEIGHTED, __pyx_v_6mpi4py_3MPI___UNWEIGHTED__) < 0) __PYX_ERR(7, 21, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":22
 * 
 * UNWEIGHTED    = __UNWEIGHTED__     #: Unweighted graph
 * WEIGHTS_EMPTY = __WEIGHTS_EMPTY__  #: Empty graph weights             # <<<<<<<<<<<<<<
 * 
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WEIGHTS_EMPTY, __pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__) < 0) __PYX_ERR(7, 22, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":28
 * # -----------------------
 * 
 * COMM_TYPE_SHARED = MPI_COMM_TYPE_SHARED             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_COMM_TYPE_SHARED); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_TYPE_SHARED, __pyx_t_1) < 0) __PYX_ERR(7, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":104
 * 
 *     @classmethod
 *     def Compare(cls, Comm comm1, Comm comm2):             # <<<<<<<<<<<<<<
 *         """
 *         Compare two communicators
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm, __pyx_n_s_Compare); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Comm.pyx":103
 *             return self.Get_rank()
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Compare(cls, Comm comm1, Comm comm2):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm->tp_dict, __pyx_n_s_Compare, __pyx_t_3) < 0) __PYX_ERR(7, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Comm);

  /* "mpi4py/MPI/Comm.pyx":205
 * 
 *     def Split_type(self, int split_type, int key=0,
 *                    Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Split communicator by color and key
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 205, __pyx_L1_error)
  __pyx_k__38 = ((struct PyMPIInfoObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":276
 *             dest, tag, self.ob_mpi) )
 * 
 *     def Recv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 276, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__39 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 276, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__40 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":293
 * 
 *     def Sendrecv(self, sendbuf, int dest, int sendtag=0,
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                  Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__41 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__42 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":315
 * 
 *     def Sendrecv_replace(self, buf, int dest, int sendtag=0,
 *                          int source=ANY_SOURCE, int recvtag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                          Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 315, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__43 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 315, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__44 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":353
 *         return request
 * 
 *     def Irecv(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking receive
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__45 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__46 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":368
 *     # -----
 * 
 *     def Probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 368, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__47 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 368, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__48 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":380
 *         return True
 * 
 *     def Iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__49 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__50 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":394
 *     # --------------
 * 
 *     def Mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 394, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__51 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 394, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__52 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":407
 *         return message
 * 
 *     def Improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__53 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__54 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":437
 *         return request
 * 
 *     def Recv_init(self, buf, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """
 *         Create a persistent request for a receive
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__55 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__56 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":698
 *     # ---------------------------
 * 
 *     def Reduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 698, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 698, __pyx_L1_error)
  __pyx_k__57 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":708
 *             op.ob_mpi, root, self.ob_mpi) )
 * 
 *     def Allreduce(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         All Reduce
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 708, __pyx_L1_error)
  __pyx_k__58 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":718
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Reduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce-Scatter Block (regular, non-vector version)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 718, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 718, __pyx_L1_error)
  __pyx_k__59 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":728
 *             op.ob_mpi, self.ob_mpi) )
 * 
 *     def Reduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Reduce-Scatter (vector version)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 728, __pyx_L1_error)
  __pyx_k__60 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":888
 *         return request
 * 
 *     def Ireduce(self, sendbuf, recvbuf, Op op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 888, __pyx_L1_error)
  __pyx_k__61 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":900
 *         return request
 * 
 *     def Iallreduce(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking All Reduce
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 900, __pyx_L1_error)
  __pyx_k__62 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":912
 *         return request
 * 
 *     def Ireduce_scatter_block(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce-Scatter Block (regular, non-vector version)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 912, __pyx_L1_error)
  __pyx_k__63 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":924
 *         return request
 * 
 *     def Ireduce_scatter(self, sendbuf, recvbuf, recvcounts=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Nonblocking Reduce-Scatter (vector version)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SUM); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 924, __pyx_L1_error)
  __pyx_k__64 = ((struct PyMPIOpObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Comm.pyx":987
 * 
 *     @classmethod
 *     def Get_parent(cls):             # <<<<<<<<<<<<<<
 *         """
 *         Return the parent intercommunicator for this process
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm, __pyx_n_s_Get_parent); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Comm.pyx":986
 *     # -------------------------------
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Get_parent(cls):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm->tp_dict, __pyx_n_s_Get_parent, __pyx_t_1) < 0) __PYX_ERR(7, 987, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Comm);

  /* "mpi4py/MPI/Comm.pyx":1003
 * 
 *     @classmethod
 *     def Join(cls, int fd):             # <<<<<<<<<<<<<<
 *         """
 *         Create a intercommunicator by joining
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm, __pyx_n_s_Join); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Comm.pyx":1002
 *         with nogil: CHKERR( MPI_Comm_disconnect(&self.ob_mpi) )
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Join(cls, int fd):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm->tp_dict, __pyx_n_s_Join, __pyx_t_3) < 0) __PYX_ERR(7, 1003, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Comm);

  /* "mpi4py/MPI/Comm.pyx":1052
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for communicators
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm, __pyx_n_s_Create_keyval); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Comm.pyx":1051
 *         CHKERR( MPI_Comm_delete_attr(self.ob_mpi, keyval) )
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm->tp_dict, __pyx_n_s_Create_keyval, __pyx_t_1) < 0) __PYX_ERR(7, 1052, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Comm);

  /* "mpi4py/MPI/Comm.pyx":1066
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for communicators
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm, __pyx_n_s_Free_keyval); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Comm.pyx":1065
 *         return keyval
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Free_keyval(cls, int keyval):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1065, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm->tp_dict, __pyx_n_s_Free_keyval, __pyx_t_3) < 0) __PYX_ERR(7, 1066, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Comm);

  /* "mpi4py/MPI/Comm.pyx":1144
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 1144, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Comm.pyx":1143
 *         return MPI_Comm_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Comm->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(7, 1144, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Comm);

  /* "mpi4py/MPI/Comm.pyx":1168
 *         return PyMPI_ssend(obj, dest, tag, comm)
 *     #
 *     def recv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *              Status status=None):
 *         """Receive"""
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__65 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__66 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1176
 *     #
 *     def sendrecv(self, sendobj, int dest, int sendtag=0,
 *                  recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                  Status status=None):
 *         """Send and Receive"""
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__67 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1176, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__68 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1206
 *         return request
 *     #
 *     def irecv(self, buf=None, int source=ANY_SOURCE, int tag=ANY_TAG):             # <<<<<<<<<<<<<<
 *         """Nonblocking receive"""
 *         cdef MPI_Comm comm = self.ob_mpi
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__69 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__70 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1213
 *         return request
 *     #
 *     def probe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *               Status status=None):
 *         """Blocking test for a message"""
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__71 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__72 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1220
 *         return PyMPI_probe(source, tag, comm, statusp)
 *     #
 *     def iprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Nonblocking test for a message"""
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1220, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__73 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1220, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__74 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1227
 *         return PyMPI_iprobe(source, tag, comm, statusp)
 *     #
 *     def mprobe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                Status status=None):
 *         """Blocking test for a matched message"""
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1227, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__75 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1227, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__76 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1237
 *         return message
 *     #
 *     def improbe(self, int source=ANY_SOURCE, int tag=ANY_TAG,             # <<<<<<<<<<<<<<
 *                 Status status=None):
 *         """Nonblocking test for a matched message"""
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_SOURCE); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__77 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ANY_TAG); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 1237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__78 = __pyx_t_2;

  /* "mpi4py/MPI/Comm.pyx":1279
 *         return PyMPI_alltoall(sendobj, comm)
 *     #
 *     def reduce(self, sendobj, op=SUM, int root=0):             # <<<<<<<<<<<<<<
 *         """Reduce"""
 *         if op is None: op = SUM
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__79 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1285
 *         return PyMPI_reduce(sendobj, op, root, comm)
 *     #
 *     def allreduce(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Reduce to All"""
 *         if op is None: op = SUM
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__80 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1344
 *     def Create_dist_graph_adjacent(self, sources, destinations,
 *                                    sourceweights=None, destweights=None,
 *                                    Info info=INFO_NULL, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create distributed graph communicator
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 1344, __pyx_L1_error)
  __pyx_k__82 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1372
 * 
 *     def Create_dist_graph(self, sources, degrees, destinations, weights=None,
 *                           Info info=INFO_NULL, bint reorder=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create distributed graph communicator
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 1372, __pyx_L1_error)
  __pyx_k__83 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1448
 *     # Inclusive Scan
 * 
 *     def Scan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1448, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 1448, __pyx_L1_error)
  __pyx_k__84 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1460
 *     # Exclusive Scan
 * 
 *     def Exscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Exclusive Scan
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 1460, __pyx_L1_error)
  __pyx_k__85 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1472
 *     # Nonblocking
 * 
 *     def Iscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 1472, __pyx_L1_error)
  __pyx_k__86 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1484
 *         return request
 * 
 *     def Iexscan(self, sendbuf, recvbuf, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Inclusive Scan
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(7, 1484, __pyx_L1_error)
  __pyx_k__87 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1498
 *     # Python Communication
 *     #
 *     def scan(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Inclusive Scan"""
 *         if op is None: op = SUM
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__88 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1504
 *         return PyMPI_scan(sendobj, op, comm)
 *     #
 *     def exscan(self, sendobj, op=SUM):             # <<<<<<<<<<<<<<
 *         """Exclusive Scan"""
 *         if op is None: op = SUM
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__89 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1516
 * 
 *     def Spawn(self, command, args=None, int maxprocs=1,
 *               Info info=INFO_NULL, int root=0, errcodes=None):             # <<<<<<<<<<<<<<
 *         """
 *         Spawn instances of a single MPI application
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 1516, __pyx_L1_error)
  __pyx_k__90 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1546
 * 
 *     def Spawn_multiple(self, command, args=None, maxprocs=None,
 *                        info=INFO_NULL, int root=0, errcodes=None):             # <<<<<<<<<<<<<<
 *         """
 *         Spawn instances of multiple MPI applications
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__92 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1591
 *     # Server Routines
 * 
 *     def Accept(self, port_name, Info info=INFO_NULL, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Accept a request to form a new intercommunicator
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 1591, __pyx_L1_error)
  __pyx_k__93 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1609
 *     # Client Routines
 * 
 *     def Connect(self, port_name, Info info=INFO_NULL, int root=0):             # <<<<<<<<<<<<<<
 *         """
 *         Make a request to form a new intercommunicator
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 1609, __pyx_L1_error)
  __pyx_k__94 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":1971
 * # Cartesian Convenience Function
 * 
 * def Compute_dims(int nnodes, dims):             # <<<<<<<<<<<<<<
 *     """
 *     Return a balanced distribution of
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_23Compute_dims, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 1971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Compute_dims, __pyx_t_1) < 0) __PYX_ERR(7, 1971, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2216
 * 
 * 
 * cdef Comm      __COMM_NULL__   = new_Comm      ( MPI_COMM_NULL  )             # <<<<<<<<<<<<<<
 * cdef Intracomm __COMM_SELF__   = new_Intracomm ( MPI_COMM_SELF  )
 * cdef Intracomm __COMM_WORLD__  = new_Intracomm ( MPI_COMM_WORLD )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Comm(MPI_COMM_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMM_NULL__, ((struct PyMPICommObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2217
 * 
 * cdef Comm      __COMM_NULL__   = new_Comm      ( MPI_COMM_NULL  )
 * cdef Intracomm __COMM_SELF__   = new_Intracomm ( MPI_COMM_SELF  )             # <<<<<<<<<<<<<<
 * cdef Intracomm __COMM_WORLD__  = new_Intracomm ( MPI_COMM_WORLD )
 * cdef Intercomm __COMM_PARENT__ = new_Intercomm ( MPI_COMM_NULL  )
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Intracomm(MPI_COMM_SELF)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_SELF__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMM_SELF__, ((struct PyMPIIntracommObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2218
 * cdef Comm      __COMM_NULL__   = new_Comm      ( MPI_COMM_NULL  )
 * cdef Intracomm __COMM_SELF__   = new_Intracomm ( MPI_COMM_SELF  )
 * cdef Intracomm __COMM_WORLD__  = new_Intracomm ( MPI_COMM_WORLD )             # <<<<<<<<<<<<<<
 * cdef Intercomm __COMM_PARENT__ = new_Intercomm ( MPI_COMM_NULL  )
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Intracomm(MPI_COMM_WORLD)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_WORLD__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMM_WORLD__, ((struct PyMPIIntracommObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2219
 * cdef Intracomm __COMM_SELF__   = new_Intracomm ( MPI_COMM_SELF  )
 * cdef Intracomm __COMM_WORLD__  = new_Intracomm ( MPI_COMM_WORLD )
 * cdef Intercomm __COMM_PARENT__ = new_Intercomm ( MPI_COMM_NULL  )             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Intercomm(MPI_COMM_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_PARENT__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___COMM_PARENT__, ((struct PyMPIIntercommObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2225
 * # ------------------------
 * 
 * COMM_NULL  = __COMM_NULL__   #: Null communicator handle             # <<<<<<<<<<<<<<
 * COMM_SELF  = __COMM_SELF__   #: Self communicator handle
 * COMM_WORLD = __COMM_WORLD__  #: World communicator handle
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_NULL__)) < 0) __PYX_ERR(7, 2225, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2226
 * 
 * COMM_NULL  = __COMM_NULL__   #: Null communicator handle
 * COMM_SELF  = __COMM_SELF__   #: Self communicator handle             # <<<<<<<<<<<<<<
 * COMM_WORLD = __COMM_WORLD__  #: World communicator handle
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_SELF, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_SELF__)) < 0) __PYX_ERR(7, 2226, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2227
 * COMM_NULL  = __COMM_NULL__   #: Null communicator handle
 * COMM_SELF  = __COMM_SELF__   #: Self communicator handle
 * COMM_WORLD = __COMM_WORLD__  #: World communicator handle             # <<<<<<<<<<<<<<
 * 
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_COMM_WORLD, ((PyObject *)__pyx_v_6mpi4py_3MPI___COMM_WORLD__)) < 0) __PYX_ERR(7, 2227, __pyx_L1_error)

  /* "mpi4py/MPI/Comm.pyx":2233
 * # ---------------------------
 * 
 * BSEND_OVERHEAD = MPI_BSEND_OVERHEAD             # <<<<<<<<<<<<<<
 * #: Upper bound of memory overhead for sending in buffered mode
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_BSEND_OVERHEAD); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BSEND_OVERHEAD, __pyx_t_1) < 0) __PYX_ERR(7, 2233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2236
 * #: Upper bound of memory overhead for sending in buffered mode
 * 
 * def Attach_buffer(buf):             # <<<<<<<<<<<<<<
 *     """
 *     Attach a user-provided buffer for
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_25Attach_buffer, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Attach_buffer, __pyx_t_1) < 0) __PYX_ERR(7, 2236, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2246
 *     with nogil: CHKERR( MPI_Buffer_attach(base, size) )
 * 
 * def Detach_buffer():             # <<<<<<<<<<<<<<
 *     """
 *     Remove an existing attached buffer
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_27Detach_buffer, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Detach_buffer, __pyx_t_1) < 0) __PYX_ERR(7, 2246, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2263
 * # ---------------
 * 
 * def Open_port(Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Return an address that can be used to establish
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(7, 2263, __pyx_L1_error)
  __pyx_k__102 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_29Open_port, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Open_port, __pyx_t_1) < 0) __PYX_ERR(7, 2263, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2273
 *     return mpistr(cportname)
 * 
 * def Close_port(port_name):             # <<<<<<<<<<<<<<
 *     """
 *     Close a port
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_31Close_port, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Close_port, __pyx_t_1) < 0) __PYX_ERR(7, 2273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2284
 * # ---------------
 * 
 * def Publish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Publish a service name
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__103 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_33Publish_name, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Publish_name, __pyx_t_1) < 0) __PYX_ERR(7, 2284, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2297
 *     with nogil: CHKERR( MPI_Publish_name(csrvcname, cinfo, cportname) )
 * 
 * def Unpublish_name(service_name, port_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Unpublish a service name
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__104 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_35Unpublish_name, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Unpublish_name, __pyx_t_1) < 0) __PYX_ERR(7, 2297, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Comm.pyx":2310
 *     with nogil: CHKERR( MPI_Unpublish_name(csrvcname, cinfo, cportname) )
 * 
 * def Lookup_name(service_name, info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Lookup a port name given a service name
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__105 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_37Lookup_name, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Lookup_name, __pyx_t_1) < 0) __PYX_ERR(7, 2310, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":3
 * # Create flavors
 * # --------------
 * WIN_FLAVOR_CREATE   = MPI_WIN_FLAVOR_CREATE             # <<<<<<<<<<<<<<
 * WIN_FLAVOR_ALLOCATE = MPI_WIN_FLAVOR_ALLOCATE
 * WIN_FLAVOR_DYNAMIC  = MPI_WIN_FLAVOR_DYNAMIC
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_FLAVOR_CREATE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_FLAVOR_CREATE, __pyx_t_1) < 0) __PYX_ERR(30, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":4
 * # --------------
 * WIN_FLAVOR_CREATE   = MPI_WIN_FLAVOR_CREATE
 * WIN_FLAVOR_ALLOCATE = MPI_WIN_FLAVOR_ALLOCATE             # <<<<<<<<<<<<<<
 * WIN_FLAVOR_DYNAMIC  = MPI_WIN_FLAVOR_DYNAMIC
 * WIN_FLAVOR_SHARED   = MPI_WIN_FLAVOR_SHARED
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_FLAVOR_ALLOCATE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_FLAVOR_ALLOCATE, __pyx_t_1) < 0) __PYX_ERR(30, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":5
 * WIN_FLAVOR_CREATE   = MPI_WIN_FLAVOR_CREATE
 * WIN_FLAVOR_ALLOCATE = MPI_WIN_FLAVOR_ALLOCATE
 * WIN_FLAVOR_DYNAMIC  = MPI_WIN_FLAVOR_DYNAMIC             # <<<<<<<<<<<<<<
 * WIN_FLAVOR_SHARED   = MPI_WIN_FLAVOR_SHARED
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_FLAVOR_DYNAMIC); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_FLAVOR_DYNAMIC, __pyx_t_1) < 0) __PYX_ERR(30, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":6
 * WIN_FLAVOR_ALLOCATE = MPI_WIN_FLAVOR_ALLOCATE
 * WIN_FLAVOR_DYNAMIC  = MPI_WIN_FLAVOR_DYNAMIC
 * WIN_FLAVOR_SHARED   = MPI_WIN_FLAVOR_SHARED             # <<<<<<<<<<<<<<
 * 
 * # Memory model
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_FLAVOR_SHARED); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_FLAVOR_SHARED, __pyx_t_1) < 0) __PYX_ERR(30, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":10
 * # Memory model
 * # ------------
 * WIN_SEPARATE = MPI_WIN_SEPARATE             # <<<<<<<<<<<<<<
 * WIN_UNIFIED  = MPI_WIN_UNIFIED
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_SEPARATE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_SEPARATE, __pyx_t_1) < 0) __PYX_ERR(30, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":11
 * # ------------
 * WIN_SEPARATE = MPI_WIN_SEPARATE
 * WIN_UNIFIED  = MPI_WIN_UNIFIED             # <<<<<<<<<<<<<<
 * 
 * # Assertion modes
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_WIN_UNIFIED); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_UNIFIED, __pyx_t_1) < 0) __PYX_ERR(30, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":15
 * # Assertion modes
 * # ---------------
 * MODE_NOCHECK   = MPI_MODE_NOCHECK             # <<<<<<<<<<<<<<
 * MODE_NOSTORE   = MPI_MODE_NOSTORE
 * MODE_NOPUT     = MPI_MODE_NOPUT
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MODE_NOCHECK); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_NOCHECK, __pyx_t_1) < 0) __PYX_ERR(30, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":16
 * # ---------------
 * MODE_NOCHECK   = MPI_MODE_NOCHECK
 * MODE_NOSTORE   = MPI_MODE_NOSTORE             # <<<<<<<<<<<<<<
 * MODE_NOPUT     = MPI_MODE_NOPUT
 * MODE_NOPRECEDE = MPI_MODE_NOPRECEDE
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MODE_NOSTORE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_NOSTORE, __pyx_t_1) < 0) __PYX_ERR(30, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":17
 * MODE_NOCHECK   = MPI_MODE_NOCHECK
 * MODE_NOSTORE   = MPI_MODE_NOSTORE
 * MODE_NOPUT     = MPI_MODE_NOPUT             # <<<<<<<<<<<<<<
 * MODE_NOPRECEDE = MPI_MODE_NOPRECEDE
 * MODE_NOSUCCEED = MPI_MODE_NOSUCCEED
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MODE_NOPUT); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_NOPUT, __pyx_t_1) < 0) __PYX_ERR(30, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":18
 * MODE_NOSTORE   = MPI_MODE_NOSTORE
 * MODE_NOPUT     = MPI_MODE_NOPUT
 * MODE_NOPRECEDE = MPI_MODE_NOPRECEDE             # <<<<<<<<<<<<<<
 * MODE_NOSUCCEED = MPI_MODE_NOSUCCEED
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MODE_NOPRECEDE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_NOPRECEDE, __pyx_t_1) < 0) __PYX_ERR(30, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":19
 * MODE_NOPUT     = MPI_MODE_NOPUT
 * MODE_NOPRECEDE = MPI_MODE_NOPRECEDE
 * MODE_NOSUCCEED = MPI_MODE_NOSUCCEED             # <<<<<<<<<<<<<<
 * 
 * # Lock types
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MODE_NOSUCCEED); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_NOSUCCEED, __pyx_t_1) < 0) __PYX_ERR(30, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":23
 * # Lock types
 * # ----------
 * LOCK_EXCLUSIVE = MPI_LOCK_EXCLUSIVE             # <<<<<<<<<<<<<<
 * LOCK_SHARED    = MPI_LOCK_SHARED
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_LOCK_EXCLUSIVE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCK_EXCLUSIVE, __pyx_t_1) < 0) __PYX_ERR(30, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":24
 * # ----------
 * LOCK_EXCLUSIVE = MPI_LOCK_EXCLUSIVE
 * LOCK_SHARED    = MPI_LOCK_SHARED             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_LOCK_SHARED); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOCK_SHARED, __pyx_t_1) < 0) __PYX_ERR(30, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":60
 *     @classmethod
 *     def Create(cls, memory, int disp_unit=1,
 *                Info info=INFO_NULL, Intracomm comm=COMM_SELF):             # <<<<<<<<<<<<<<
 *         """
 *         Create an window object for one-sided communication
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(30, 60, __pyx_L1_error)
  __pyx_k__106 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Intracomm))))) __PYX_ERR(30, 60, __pyx_L1_error)
  __pyx_k__107 = ((struct PyMPIIntracommObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":59
 * 
 *     @classmethod
 *     def Create(cls, memory, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_Create); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Win.pyx":58
 *     # ---------------
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create(cls, memory, int disp_unit=1,
 *                Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_Create, __pyx_t_3) < 0) __PYX_ERR(30, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":81
 *     @classmethod
 *     def Allocate(cls, Aint size, int disp_unit=1,
 *                  Info info=INFO_NULL, Intracomm comm=COMM_SELF):             # <<<<<<<<<<<<<<
 *         """
 *         Create an window object for one-sided communication
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(30, 81, __pyx_L1_error)
  __pyx_k__108 = ((struct PyMPIInfoObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Intracomm))))) __PYX_ERR(30, 81, __pyx_L1_error)
  __pyx_k__109 = ((struct PyMPIIntracommObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":80
 * 
 *     @classmethod
 *     def Allocate(cls, Aint size, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                  Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_Allocate); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Win.pyx":79
 *         return win
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Allocate(cls, Aint size, int disp_unit=1,
 *                  Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_Allocate, __pyx_t_1) < 0) __PYX_ERR(30, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":95
 *     @classmethod
 *     def Allocate_shared(cls, Aint size, int disp_unit=1,
 *                         Info info=INFO_NULL, Intracomm comm=COMM_SELF):             # <<<<<<<<<<<<<<
 *         """
 *         Create an window object for one-sided communication
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(30, 95, __pyx_L1_error)
  __pyx_k__110 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Intracomm))))) __PYX_ERR(30, 95, __pyx_L1_error)
  __pyx_k__111 = ((struct PyMPIIntracommObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":94
 * 
 *     @classmethod
 *     def Allocate_shared(cls, Aint size, int disp_unit=1,             # <<<<<<<<<<<<<<
 *                         Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_Allocate_shared); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Win.pyx":93
 *         return win
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Allocate_shared(cls, Aint size, int disp_unit=1,
 *                         Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_Allocate_shared, __pyx_t_3) < 0) __PYX_ERR(30, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":122
 * 
 *     @classmethod
 *     def Create_dynamic(cls, Info info=INFO_NULL, Intracomm comm=COMM_SELF):             # <<<<<<<<<<<<<<
 *         """
 *         Create an window object for one-sided communication
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(30, 122, __pyx_L1_error)
  __pyx_k__112 = ((struct PyMPIInfoObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_COMM_SELF); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Intracomm))))) __PYX_ERR(30, 122, __pyx_L1_error)
  __pyx_k__113 = ((struct PyMPIIntracommObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":121
 *         return (asbuffer(self, base, size, 0), disp_unit)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_dynamic(cls, Info info=INFO_NULL, Intracomm comm=COMM_SELF):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_Create_dynamic); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_Create_dynamic, __pyx_t_1) < 0) __PYX_ERR(30, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":244
 * 
 *     @classmethod
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):             # <<<<<<<<<<<<<<
 *         """
 *         Create a new attribute key for windows
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_Create_keyval); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Win.pyx":243
 *         CHKERR( MPI_Win_delete_attr(self.ob_mpi, keyval) )
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Create_keyval(cls, copy_fn=None, delete_fn=None, nopython=False):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_Create_keyval, __pyx_t_3) < 0) __PYX_ERR(30, 244, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":258
 * 
 *     @classmethod
 *     def Free_keyval(cls, int keyval):             # <<<<<<<<<<<<<<
 *         """
 *         Free and attribute key for windows
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_Free_keyval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/Win.pyx":257
 *         return keyval
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Free_keyval(cls, int keyval):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_Free_keyval, __pyx_t_1) < 0) __PYX_ERR(30, 258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":372
 * 
 *     def Accumulate(self, origin, int target_rank,
 *                    target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Accumulate data into the target process
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 372, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(30, 372, __pyx_L1_error)
  __pyx_k__114 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":385
 * 
 *     def Get_accumulate(self, origin, result, int target_rank,
 *                        target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Fetch-and-accumulate data into the target process
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(30, 385, __pyx_L1_error)
  __pyx_k__115 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":399
 * 
 *     def Fetch_and_op(self, origin, result,int target_rank,
 *                      Aint target_disp=0, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Perform one-sided read-modify-write
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(30, 399, __pyx_L1_error)
  __pyx_k__116 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":455
 * 
 *     def Raccumulate(self, origin, int target_rank,
 *                    target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Fetch-and-accumulate data into the target process
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(30, 455, __pyx_L1_error)
  __pyx_k__117 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":471
 * 
 *     def Rget_accumulate(self, origin, result, int target_rank,
 *                         target=None, Op op=SUM):             # <<<<<<<<<<<<<<
 *         """
 *         Accumulate data into the target process
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_SUM); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Op))))) __PYX_ERR(30, 471, __pyx_L1_error)
  __pyx_k__118 = ((struct PyMPIOpObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/Win.pyx":540
 *     # ----
 * 
 *     def Lock(self, int rank, int lock_type=LOCK_EXCLUSIVE, int assertion=0):             # <<<<<<<<<<<<<<
 *         """
 *         Begin an RMA access epoch at the target process
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_LOCK_EXCLUSIVE); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(30, 540, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__119 = __pyx_t_2;

  /* "mpi4py/MPI/Win.pyx":659
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_Win, __pyx_n_s_f2py); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "mpi4py/MPI/Win.pyx":658
 *         return MPI_Win_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_Win->tp_dict, __pyx_n_s_f2py, __pyx_t_3) < 0) __PYX_ERR(30, 659, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_Win);

  /* "mpi4py/MPI/Win.pyx":668
 * 
 * 
 * cdef Win __WIN_NULL__ = new_Win(MPI_WIN_NULL)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_Win(MPI_WIN_NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 668, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___WIN_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___WIN_NULL__, ((struct PyMPIWinObject *)__pyx_t_3));
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/Win.pyx":674
 * # -------------------------
 * 
 * WIN_NULL = __WIN_NULL__  #: Null window handle             # <<<<<<<<<<<<<<
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_WIN_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___WIN_NULL__)) < 0) __PYX_ERR(30, 674, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":4
 * # -------------
 * 
 * MODE_RDONLY = MPI_MODE_RDONLY             # <<<<<<<<<<<<<<
 * #: Read only
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_RDONLY); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_RDONLY, __pyx_t_3) < 0) __PYX_ERR(31, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":7
 * #: Read only
 * 
 * MODE_WRONLY = MPI_MODE_WRONLY             # <<<<<<<<<<<<<<
 * #: Write only
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_WRONLY); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_WRONLY, __pyx_t_3) < 0) __PYX_ERR(31, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":10
 * #: Write only
 * 
 * MODE_RDWR  = MPI_MODE_RDWR             # <<<<<<<<<<<<<<
 * #: Reading and writing
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_RDWR); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_RDWR, __pyx_t_3) < 0) __PYX_ERR(31, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":13
 * #: Reading and writing
 * 
 * MODE_CREATE = MPI_MODE_CREATE             # <<<<<<<<<<<<<<
 * #: Create the file if it does not exist
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_CREATE); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_CREATE, __pyx_t_3) < 0) __PYX_ERR(31, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":16
 * #: Create the file if it does not exist
 * 
 * MODE_EXCL = MPI_MODE_EXCL             # <<<<<<<<<<<<<<
 * #: Error if creating file that already exists
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_EXCL); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_EXCL, __pyx_t_3) < 0) __PYX_ERR(31, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":19
 * #: Error if creating file that already exists
 * 
 * MODE_DELETE_ON_CLOSE = MPI_MODE_DELETE_ON_CLOSE             # <<<<<<<<<<<<<<
 * #: Delete file on close
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_DELETE_ON_CLOSE); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_DELETE_ON_CLOSE, __pyx_t_3) < 0) __PYX_ERR(31, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":22
 * #: Delete file on close
 * 
 * MODE_UNIQUE_OPEN = MPI_MODE_UNIQUE_OPEN             # <<<<<<<<<<<<<<
 * #: File will not be concurrently opened elsewhere
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_UNIQUE_OPEN); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_UNIQUE_OPEN, __pyx_t_3) < 0) __PYX_ERR(31, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":25
 * #: File will not be concurrently opened elsewhere
 * 
 * MODE_SEQUENTIAL = MPI_MODE_SEQUENTIAL             # <<<<<<<<<<<<<<
 * #: File will only be accessed sequentially
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_SEQUENTIAL); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_SEQUENTIAL, __pyx_t_3) < 0) __PYX_ERR(31, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":28
 * #: File will only be accessed sequentially
 * 
 * MODE_APPEND = MPI_MODE_APPEND             # <<<<<<<<<<<<<<
 * #: Set initial position of all file pointers to end of file
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_MODE_APPEND); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MODE_APPEND, __pyx_t_3) < 0) __PYX_ERR(31, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":35
 * # -----------
 * 
 * SEEK_SET = MPI_SEEK_SET             # <<<<<<<<<<<<<<
 * #: File pointer is set to offset
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_SEEK_SET); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SEEK_SET, __pyx_t_3) < 0) __PYX_ERR(31, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":38
 * #: File pointer is set to offset
 * 
 * SEEK_CUR = MPI_SEEK_CUR             # <<<<<<<<<<<<<<
 * #: File pointer is set to the current position plus offset
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_SEEK_CUR); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SEEK_CUR, __pyx_t_3) < 0) __PYX_ERR(31, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":41
 * #: File pointer is set to the current position plus offset
 * 
 * SEEK_END = MPI_SEEK_END             # <<<<<<<<<<<<<<
 * #: File pointer is set to the end plus offset
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_SEEK_END); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SEEK_END, __pyx_t_3) < 0) __PYX_ERR(31, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":44
 * #: File pointer is set to the end plus offset
 * 
 * DISPLACEMENT_CURRENT = MPI_DISPLACEMENT_CURRENT             # <<<<<<<<<<<<<<
 * #: Special displacement value for files opened in sequential mode
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_DISPLACEMENT_CURRENT); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DISPLACEMENT_CURRENT, __pyx_t_3) < 0) __PYX_ERR(31, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":47
 * #: Special displacement value for files opened in sequential mode
 * 
 * DISP_CUR = MPI_DISPLACEMENT_CURRENT             # <<<<<<<<<<<<<<
 * #: Convenience alias for `DISPLACEMENT_CURRENT`
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(MPI_DISPLACEMENT_CURRENT); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DISP_CUR, __pyx_t_3) < 0) __PYX_ERR(31, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":83
 *     @classmethod
 *     def Open(cls, Intracomm comm, filename,
 *              int amode=MODE_RDONLY, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Open a file
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MODE_RDONLY); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__121 = __pyx_t_2;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(31, 83, __pyx_L1_error)
  __pyx_k__120 = ((struct PyMPIInfoObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":82
 * 
 *     @classmethod
 *     def Open(cls, Intracomm comm, filename,             # <<<<<<<<<<<<<<
 *              int amode=MODE_RDONLY, Info info=INFO_NULL):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_File, __pyx_n_s_Open); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/File.pyx":81
 *     # -----------------
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Open(cls, Intracomm comm, filename,
 *              int amode=MODE_RDONLY, Info info=INFO_NULL):
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_File->tp_dict, __pyx_n_s_Open, __pyx_t_1) < 0) __PYX_ERR(31, 82, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_File);

  /* "mpi4py/MPI/File.pyx":102
 * 
 *     @classmethod
 *     def Delete(cls, filename, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Delete a file
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(31, 102, __pyx_L1_error)
  __pyx_k__122 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":101
 *         with nogil: CHKERR( MPI_File_close(&self.ob_mpi) )
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def Delete(cls, filename, Info info=INFO_NULL):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_6mpi4py_3MPI_File, __pyx_n_s_Delete); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_File->tp_dict, __pyx_n_s_Delete, __pyx_t_3) < 0) __PYX_ERR(31, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_File);

  /* "mpi4py/MPI/File.pyx":196
 *     def Set_view(self, Offset disp=0,
 *                  Datatype etype=None, Datatype filetype=None,
 *                  object datarep=None, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *         """
 *         Set the file view
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(31, 196, __pyx_L1_error)
  __pyx_k__123 = ((struct PyMPIInfoObject *)__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __pyx_t_3 = 0;

  /* "mpi4py/MPI/File.pyx":394
 *         return request
 * 
 *     def Seek(self, Offset offset, int whence=SEEK_SET):             # <<<<<<<<<<<<<<
 *         """
 *         Update the individual file pointer
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SEEK_SET); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 394, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__124 = __pyx_t_2;

  /* "mpi4py/MPI/File.pyx":480
 *             self.ob_mpi, m.buf, m.count, m.dtype, statusp) )
 * 
 *     def Seek_shared(self, Offset offset, int whence=SEEK_SET):             # <<<<<<<<<<<<<<
 *         """
 *         Update the shared file pointer
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_SEEK_SET); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(31, 480, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_k__125 = __pyx_t_2;

  /* "mpi4py/MPI/File.pyx":691
 * 
 *     @classmethod
 *     def f2py(cls, arg):             # <<<<<<<<<<<<<<
 *         """
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_6mpi4py_3MPI_File, __pyx_n_s_f2py); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 691, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "mpi4py/MPI/File.pyx":690
 *         return MPI_File_c2f(self.ob_mpi)
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def f2py(cls, arg):
 *         """
 */
  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6mpi4py_3MPI_File->tp_dict, __pyx_n_s_f2py, __pyx_t_1) < 0) __PYX_ERR(31, 691, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_6mpi4py_3MPI_File);

  /* "mpi4py/MPI/File.pyx":700
 * 
 * 
 * cdef File __FILE_NULL__ = new_File(MPI_FILE_NULL)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_1 = ((PyObject *)__pyx_f_6mpi4py_3MPI_new_File(MPI_FILE_NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 700, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_XGOTREF(((PyObject *)__pyx_v_6mpi4py_3MPI___FILE_NULL__));
  __Pyx_DECREF_SET(__pyx_v_6mpi4py_3MPI___FILE_NULL__, ((struct PyMPIFileObject *)__pyx_t_1));
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "mpi4py/MPI/File.pyx":706
 * # -----------------------
 * 
 * FILE_NULL = __FILE_NULL__  #: Null file handle             # <<<<<<<<<<<<<<
 * 
 * 
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FILE_NULL, ((PyObject *)__pyx_v_6mpi4py_3MPI___FILE_NULL__)) < 0) __PYX_ERR(31, 706, __pyx_L1_error)

  /* "mpi4py/MPI/File.pyx":712
 * # ---------------------------------
 * 
 * def Register_datarep(datarep, read_fn, write_fn, extent_fn):             # <<<<<<<<<<<<<<
 *     """
 *     Register user-defined data representations
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_39Register_datarep, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Register_datarep, __pyx_t_1) < 0) __PYX_ERR(31, 712, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":90
 * # -----------------
 * 
 * def Alloc_mem(Aint size, Info info=INFO_NULL):             # <<<<<<<<<<<<<<
 *     """
 *     Allocate memory for message passing and RMA
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_INFO_NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6mpi4py_3MPI_Info))))) __PYX_ERR(8, 90, __pyx_L1_error)
  __pyx_k__126 = ((struct PyMPIInfoObject *)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_41Alloc_mem, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Alloc_mem, __pyx_t_1) < 0) __PYX_ERR(8, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":98
 *     return tomemory(base, size)
 * 
 * def Free_mem(mem):             # <<<<<<<<<<<<<<
 *     """
 *     Free memory allocated with `Alloc_mem()`
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_43Free_mem, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Free_mem, __pyx_t_1) < 0) __PYX_ERR(8, 98, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":110
 * # -----------------------
 * 
 * def Init():             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_45Init, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Init, __pyx_t_1) < 0) __PYX_ERR(8, 110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":117
 *     initialize()
 * 
 * def Finalize():             # <<<<<<<<<<<<<<
 *     """
 *     Terminate the MPI execution environment
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_47Finalize, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Finalize, __pyx_t_1) < 0) __PYX_ERR(8, 117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":127
 * # -------------------------------
 * 
 * THREAD_SINGLE     = MPI_THREAD_SINGLE             # <<<<<<<<<<<<<<
 * #: Only one thread will execute
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_THREAD_SINGLE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_THREAD_SINGLE, __pyx_t_1) < 0) __PYX_ERR(8, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":130
 * #: Only one thread will execute
 * 
 * THREAD_FUNNELED   = MPI_THREAD_FUNNELED             # <<<<<<<<<<<<<<
 * #: MPI calls are *funneled* to the main thread
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_THREAD_FUNNELED); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_THREAD_FUNNELED, __pyx_t_1) < 0) __PYX_ERR(8, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":133
 * #: MPI calls are *funneled* to the main thread
 * 
 * THREAD_SERIALIZED = MPI_THREAD_SERIALIZED             # <<<<<<<<<<<<<<
 * #: MPI calls are *serialized*
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_THREAD_SERIALIZED); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_THREAD_SERIALIZED, __pyx_t_1) < 0) __PYX_ERR(8, 133, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":136
 * #: MPI calls are *serialized*
 * 
 * THREAD_MULTIPLE   = MPI_THREAD_MULTIPLE             # <<<<<<<<<<<<<<
 * #: Multiple threads may call MPI
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_THREAD_MULTIPLE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_THREAD_MULTIPLE, __pyx_t_1) < 0) __PYX_ERR(8, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":139
 * #: Multiple threads may call MPI
 * 
 * def Init_thread(int required=THREAD_MULTIPLE):             # <<<<<<<<<<<<<<
 *     """
 *     Initialize the MPI execution environment
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_THREAD_MULTIPLE); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__127 = __pyx_t_2;
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_49Init_thread, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Init_thread, __pyx_t_1) < 0) __PYX_ERR(8, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":148
 *     return provided
 * 
 * def Query_thread():             # <<<<<<<<<<<<<<
 *     """
 *     Return the level of thread support
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_51Query_thread, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Query_thread, __pyx_t_1) < 0) __PYX_ERR(8, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":157
 *     return provided
 * 
 * def Is_thread_main():             # <<<<<<<<<<<<<<
 *     """
 *     Indicate whether this thread called
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_53Is_thread_main, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Is_thread_main, __pyx_t_1) < 0) __PYX_ERR(8, 157, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":166
 *     return <bint>flag
 * 
 * def Is_initialized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Init`` has been called
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_55Is_initialized, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Is_initialized, __pyx_t_1) < 0) __PYX_ERR(8, 166, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":174
 *     return <bint>flag
 * 
 * def Is_finalized():             # <<<<<<<<<<<<<<
 *     """
 *     Indicates whether ``Finalize`` has completed
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_57Is_finalized, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Is_finalized, __pyx_t_1) < 0) __PYX_ERR(8, 174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":188
 * # -----------------
 * 
 * VERSION    = MPI_VERSION             # <<<<<<<<<<<<<<
 * SUBVERSION = MPI_SUBVERSION
 * 
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_VERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VERSION, __pyx_t_1) < 0) __PYX_ERR(8, 188, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":189
 * 
 * VERSION    = MPI_VERSION
 * SUBVERSION = MPI_SUBVERSION             # <<<<<<<<<<<<<<
 * 
 * def Get_version():
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_SUBVERSION); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SUBVERSION, __pyx_t_1) < 0) __PYX_ERR(8, 189, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":191
 * SUBVERSION = MPI_SUBVERSION
 * 
 * def Get_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version number of the MPI standard supported
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_59Get_version, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Get_version, __pyx_t_1) < 0) __PYX_ERR(8, 191, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":201
 *     return (version, subversion)
 * 
 * def Get_library_version():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the version string of the MPI library
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_61Get_library_version, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Get_library_version, __pyx_t_1) < 0) __PYX_ERR(8, 201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":213
 * # ----------------------
 * 
 * def Get_processor_name():             # <<<<<<<<<<<<<<
 *     """
 *     Obtain the name of the calling processor
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_63Get_processor_name, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Get_processor_name, __pyx_t_1) < 0) __PYX_ERR(8, 213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":225
 * # --------------------------
 * 
 * def Wtime():             # <<<<<<<<<<<<<<
 *     """
 *     Return an elapsed time on the calling processor
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_65Wtime, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Wtime, __pyx_t_1) < 0) __PYX_ERR(8, 225, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":231
 *     return MPI_Wtime()
 * 
 * def Wtick():             # <<<<<<<<<<<<<<
 *     """
 *     Return the resolution of ``Wtime``
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_67Wtick, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Wtick, __pyx_t_1) < 0) __PYX_ERR(8, 231, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":240
 * # --------------------
 * 
 * def Pcontrol(int level):             # <<<<<<<<<<<<<<
 *     """
 *     Control profiling
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_69Pcontrol, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 240, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Pcontrol, __pyx_t_1) < 0) __PYX_ERR(8, 240, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":252
 * 
 * # MPI-1
 * MAX_PROCESSOR_NAME = MPI_MAX_PROCESSOR_NAME             # <<<<<<<<<<<<<<
 * MAX_ERROR_STRING   = MPI_MAX_ERROR_STRING
 * # MPI-2
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_PROCESSOR_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_PROCESSOR_NAME, __pyx_t_1) < 0) __PYX_ERR(8, 252, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":253
 * # MPI-1
 * MAX_PROCESSOR_NAME = MPI_MAX_PROCESSOR_NAME
 * MAX_ERROR_STRING   = MPI_MAX_ERROR_STRING             # <<<<<<<<<<<<<<
 * # MPI-2
 * MAX_PORT_NAME      = MPI_MAX_PORT_NAME
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_ERROR_STRING); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_ERROR_STRING, __pyx_t_1) < 0) __PYX_ERR(8, 253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":255
 * MAX_ERROR_STRING   = MPI_MAX_ERROR_STRING
 * # MPI-2
 * MAX_PORT_NAME      = MPI_MAX_PORT_NAME             # <<<<<<<<<<<<<<
 * MAX_INFO_KEY       = MPI_MAX_INFO_KEY
 * MAX_INFO_VAL       = MPI_MAX_INFO_VAL
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_PORT_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_PORT_NAME, __pyx_t_1) < 0) __PYX_ERR(8, 255, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":256
 * # MPI-2
 * MAX_PORT_NAME      = MPI_MAX_PORT_NAME
 * MAX_INFO_KEY       = MPI_MAX_INFO_KEY             # <<<<<<<<<<<<<<
 * MAX_INFO_VAL       = MPI_MAX_INFO_VAL
 * MAX_OBJECT_NAME    = MPI_MAX_OBJECT_NAME
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_INFO_KEY); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_INFO_KEY, __pyx_t_1) < 0) __PYX_ERR(8, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":257
 * MAX_PORT_NAME      = MPI_MAX_PORT_NAME
 * MAX_INFO_KEY       = MPI_MAX_INFO_KEY
 * MAX_INFO_VAL       = MPI_MAX_INFO_VAL             # <<<<<<<<<<<<<<
 * MAX_OBJECT_NAME    = MPI_MAX_OBJECT_NAME
 * MAX_DATAREP_STRING = MPI_MAX_DATAREP_STRING
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_INFO_VAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_INFO_VAL, __pyx_t_1) < 0) __PYX_ERR(8, 257, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":258
 * MAX_INFO_KEY       = MPI_MAX_INFO_KEY
 * MAX_INFO_VAL       = MPI_MAX_INFO_VAL
 * MAX_OBJECT_NAME    = MPI_MAX_OBJECT_NAME             # <<<<<<<<<<<<<<
 * MAX_DATAREP_STRING = MPI_MAX_DATAREP_STRING
 * # MPI-3
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_OBJECT_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 258, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_OBJECT_NAME, __pyx_t_1) < 0) __PYX_ERR(8, 258, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":259
 * MAX_INFO_VAL       = MPI_MAX_INFO_VAL
 * MAX_OBJECT_NAME    = MPI_MAX_OBJECT_NAME
 * MAX_DATAREP_STRING = MPI_MAX_DATAREP_STRING             # <<<<<<<<<<<<<<
 * # MPI-3
 * MAX_LIBRARY_VERSION_STRING = MPI_MAX_LIBRARY_VERSION_STRING
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_DATAREP_STRING); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_DATAREP_STRING, __pyx_t_1) < 0) __PYX_ERR(8, 259, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":261
 * MAX_DATAREP_STRING = MPI_MAX_DATAREP_STRING
 * # MPI-3
 * MAX_LIBRARY_VERSION_STRING = MPI_MAX_LIBRARY_VERSION_STRING             # <<<<<<<<<<<<<<
 * 
 * # --------------------------------------------------------------------
 */
  __pyx_t_1 = __Pyx_PyInt_From_int(MPI_MAX_LIBRARY_VERSION_STRING); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MAX_LIBRARY_VERSION_STRING, __pyx_t_1) < 0) __PYX_ERR(8, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":268
 *     int PyMPI_Get_vendor(const char**,int*,int*,int*) nogil
 * 
 * def get_vendor():             # <<<<<<<<<<<<<<
 *     """
 *     Infomation about the underlying MPI implementation
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_71get_vendor, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_vendor, __pyx_t_1) < 0) __PYX_ERR(8, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":294
 *     return 0
 * 
 * def _sizeof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Size in bytes of the underlying MPI handle
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_73_sizeof, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sizeof, __pyx_t_1) < 0) __PYX_ERR(8, 294, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":311
 *     raise TypeError("expecting an MPI type or instance")
 * 
 * def _addressof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Memory address of the underlying MPI handle
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_75_addressof, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_addressof, __pyx_t_1) < 0) __PYX_ERR(8, 311, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "mpi4py/MPI/MPI.pyx":342
 *     return PyLong_FromVoidPtr(ptr)
 * 
 * def _handleof(arg):             # <<<<<<<<<<<<<<
 *     """
 *     Unsigned integer value with the underlying MPI handle
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_6mpi4py_3MPI_77_handleof, NULL, __pyx_n_s_mpi4py_MPI); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_handleof, __pyx_t_1) < 0) __PYX_ERR(8, 342, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /*--- Wrapped vars code ---*/

  if (__Pyx_RegisterCleanup()) __PYX_ERR(32, 1, __pyx_L1_error);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  if (__pyx_m) {
    if (__pyx_d) {
      __Pyx_AddTraceback("init mpi4py.MPI", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    Py_CLEAR(__pyx_m);
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init mpi4py.MPI");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  return (__pyx_m != NULL) ? 0 : -1;
  #elif PY_MAJOR_VERSION >= 3
  return __pyx_m;
  #else
  return;
  #endif
}

static CYTHON_SMALL_CODE void __Pyx_CleanupGlobals(void) {
  Py_CLEAR(__pyx_tuple_);
  Py_CLEAR(__pyx_tuple__2);
  Py_CLEAR(__pyx_tuple__3);
  Py_CLEAR(__pyx_tuple__4);
  Py_CLEAR(__pyx_tuple__5);
  Py_CLEAR(__pyx_tuple__6);
  Py_CLEAR(__pyx_tuple__7);
  Py_CLEAR(__pyx_tuple__8);
  Py_CLEAR(__pyx_tuple__9);
  Py_CLEAR(__pyx_tuple__10);
  Py_CLEAR(__pyx_tuple__11);
  Py_CLEAR(__pyx_tuple__12);
  Py_CLEAR(__pyx_tuple__13);
  Py_CLEAR(__pyx_tuple__14);
  Py_CLEAR(__pyx_tuple__15);
  Py_CLEAR(__pyx_tuple__16);
  Py_CLEAR(__pyx_tuple__17);
  Py_CLEAR(__pyx_tuple__18);
  Py_CLEAR(__pyx_tuple__19);
  Py_CLEAR(__pyx_tuple__20);
  Py_CLEAR(__pyx_tuple__21);
  Py_CLEAR(__pyx_tuple__22);
  Py_CLEAR(__pyx_tuple__24);
  Py_CLEAR(__pyx_tuple__25);
  Py_CLEAR(__pyx_tuple__37);
  Py_CLEAR(__pyx_tuple__81);
  Py_CLEAR(__pyx_slice__91);
  Py_CLEAR(__pyx_tuple__95);
  Py_CLEAR(__pyx_slice__96);
  Py_CLEAR(__pyx_tuple__97);
  Py_CLEAR(__pyx_tuple__98);
  Py_CLEAR(__pyx_tuple__99);
  Py_CLEAR(__pyx_tuple__100);
  Py_CLEAR(__pyx_tuple__101);
  Py_CLEAR(__pyx_tuple__128);
  Py_CLEAR(__pyx_tuple__129);
  Py_CLEAR(__pyx_tuple__130);
  Py_CLEAR(__pyx_codeobj__131);
  Py_CLEAR(__pyx_tuple__132);
  Py_CLEAR(__pyx_codeobj__133);
  Py_CLEAR(__pyx_tuple__134);
  Py_CLEAR(__pyx_codeobj__135);
  Py_CLEAR(__pyx_tuple__136);
  Py_CLEAR(__pyx_codeobj__137);
  Py_CLEAR(__pyx_tuple__138);
  Py_CLEAR(__pyx_tuple__139);
  Py_CLEAR(__pyx_codeobj__140);
  Py_CLEAR(__pyx_tuple__141);
  Py_CLEAR(__pyx_codeobj__142);
  Py_CLEAR(__pyx_tuple__143);
  Py_CLEAR(__pyx_codeobj__144);
  Py_CLEAR(__pyx_tuple__145);
  Py_CLEAR(__pyx_codeobj__146);
  Py_CLEAR(__pyx_tuple__147);
  Py_CLEAR(__pyx_codeobj__148);
  Py_CLEAR(__pyx_tuple__149);
  Py_CLEAR(__pyx_codeobj__150);
  Py_CLEAR(__pyx_tuple__151);
  Py_CLEAR(__pyx_codeobj__152);
  Py_CLEAR(__pyx_tuple__153);
  Py_CLEAR(__pyx_codeobj__154);
  Py_CLEAR(__pyx_tuple__155);
  Py_CLEAR(__pyx_codeobj__156);
  Py_CLEAR(__pyx_tuple__157);
  Py_CLEAR(__pyx_codeobj__158);
  Py_CLEAR(__pyx_tuple__159);
  Py_CLEAR(__pyx_codeobj__160);
  Py_CLEAR(__pyx_tuple__161);
  Py_CLEAR(__pyx_codeobj__162);
  Py_CLEAR(__pyx_tuple__163);
  Py_CLEAR(__pyx_codeobj__164);
  Py_CLEAR(__pyx_tuple__165);
  Py_CLEAR(__pyx_codeobj__166);
  Py_CLEAR(__pyx_tuple__167);
  Py_CLEAR(__pyx_codeobj__168);
  Py_CLEAR(__pyx_tuple__169);
  Py_CLEAR(__pyx_codeobj__170);
  Py_CLEAR(__pyx_tuple__171);
  Py_CLEAR(__pyx_codeobj__172);
  Py_CLEAR(__pyx_tuple__173);
  Py_CLEAR(__pyx_codeobj__174);
  Py_CLEAR(__pyx_tuple__175);
  Py_CLEAR(__pyx_codeobj__176);
  Py_CLEAR(__pyx_tuple__177);
  Py_CLEAR(__pyx_codeobj__178);
  Py_CLEAR(__pyx_tuple__179);
  Py_CLEAR(__pyx_codeobj__180);
  Py_CLEAR(__pyx_tuple__181);
  Py_CLEAR(__pyx_codeobj__182);
  Py_CLEAR(__pyx_tuple__183);
  Py_CLEAR(__pyx_codeobj__184);
  Py_CLEAR(__pyx_tuple__185);
  Py_CLEAR(__pyx_codeobj__186);
  Py_CLEAR(__pyx_tuple__187);
  Py_CLEAR(__pyx_codeobj__188);
  Py_CLEAR(__pyx_tuple__189);
  Py_CLEAR(__pyx_codeobj__190);
  Py_CLEAR(__pyx_tuple__191);
  Py_CLEAR(__pyx_codeobj__192);
  Py_CLEAR(__pyx_tuple__193);
  Py_CLEAR(__pyx_codeobj__194);
  Py_CLEAR(__pyx_tuple__195);
  Py_CLEAR(__pyx_codeobj__196);
  Py_CLEAR(__pyx_tuple__197);
  Py_CLEAR(__pyx_codeobj__198);
  Py_CLEAR(__pyx_tuple__199);
  Py_CLEAR(__pyx_codeobj__200);
  Py_CLEAR(__pyx_tuple__201);
  Py_CLEAR(__pyx_codeobj__202);
  Py_CLEAR(__pyx_tuple__203);
  Py_CLEAR(__pyx_codeobj__204);
  Py_CLEAR(__pyx_tuple__205);
  Py_CLEAR(__pyx_codeobj__206);
  Py_CLEAR(__pyx_tuple__207);
  Py_CLEAR(__pyx_codeobj__208);
  Py_CLEAR(__pyx_codeobj__209);
  Py_CLEAR(__pyx_codeobj__210);
  Py_CLEAR(__pyx_tuple__211);
  Py_CLEAR(__pyx_codeobj__212);
  Py_CLEAR(__pyx_tuple__213);
  Py_CLEAR(__pyx_codeobj__214);
  Py_CLEAR(__pyx_tuple__215);
  Py_CLEAR(__pyx_codeobj__216);
  Py_CLEAR(__pyx_tuple__217);
  Py_CLEAR(__pyx_codeobj__218);
  Py_CLEAR(__pyx_tuple__219);
  Py_CLEAR(__pyx_codeobj__220);
  Py_CLEAR(__pyx_tuple__221);
  Py_CLEAR(__pyx_codeobj__222);
  Py_CLEAR(__pyx_tuple__223);
  Py_CLEAR(__pyx_codeobj__224);
  Py_CLEAR(__pyx_tuple__225);
  Py_CLEAR(__pyx_codeobj__226);
  Py_CLEAR(__pyx_codeobj__227);
  Py_CLEAR(__pyx_codeobj__228);
  Py_CLEAR(__pyx_tuple__229);
  Py_CLEAR(__pyx_codeobj__230);
  Py_CLEAR(__pyx_tuple__231);
  Py_CLEAR(__pyx_codeobj__232);
  Py_CLEAR(__pyx_tuple__233);
  Py_CLEAR(__pyx_codeobj__234);
  Py_CLEAR(__pyx_tuple__235);
  Py_CLEAR(__pyx_codeobj__236);
  Py_CLEAR(__pyx_tuple__237);
  Py_CLEAR(__pyx_codeobj__238);
  /* CodeObjectCache.cleanup */
  if (__pyx_code_cache.entries) {
      __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
      int i, count = __pyx_code_cache.count;
      __pyx_code_cache.count = 0;
      __pyx_code_cache.max_count = 0;
      __pyx_code_cache.entries = NULL;
      for (i=0; i<count; i++) {
          Py_DECREF(entries[i].code_object);
      }
      PyMem_Free(entries);
  }

Py_CLEAR(__pyx_umethod_PyDict_Type_get.method);
  Py_CLEAR(__pyx_umethod_PyDict_Type_items.method);
  Py_CLEAR(__pyx_umethod_PyList_Type_index.method);
}
static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
  /*--- Global cleanup code ---*/
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___FILE_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___WIN_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMM_PARENT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMM_WORLD__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMM_SELF__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMM_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___GROUP_EMPTY__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___GROUP_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___NO_OP__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REPLACE__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___MINLOC__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___MAXLOC__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___BXOR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LXOR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___BOR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LOR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___BAND__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LAND__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___PROD__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___SUM__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___MIN__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___MAX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___OP_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INFO_ENV__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INFO_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___MESSAGE_NO_PROC__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___MESSAGE_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REQUEST_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_FTypeDict);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_CTypeDict);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_TypeDict);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMPLEX32__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMPLEX16__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMPLEX8__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMPLEX4__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REAL16__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REAL8__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REAL4__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REAL2__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INTEGER16__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INTEGER8__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INTEGER4__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INTEGER2__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INTEGER1__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LOGICAL8__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LOGICAL4__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LOGICAL2__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LOGICAL1__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___DOUBLE_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___DOUBLE_PRECISION__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___REAL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INTEGER__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LOGICAL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___CHARACTER__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LONG_DOUBLE_INT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___DOUBLE_INT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___FLOAT_INT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LONG_INT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___TWOINT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___SHORT_INT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___CXX_LONG_DOUBLE_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___CXX_DOUBLE_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___CXX_FLOAT_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___CXX_BOOL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___C_LONG_DOUBLE_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___C_DOUBLE_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___C_FLOAT_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___C_COMPLEX__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UINT64_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UINT32_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UINT16_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UINT8_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INT64_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INT32_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INT16_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INT8_T__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___C_BOOL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LONG_DOUBLE__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___DOUBLE__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___FLOAT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG_LONG__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UNSIGNED_LONG__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UNSIGNED__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UNSIGNED_SHORT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UNSIGNED_CHAR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LONG_LONG__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LONG__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___INT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___SHORT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___SIGNED_CHAR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___WCHAR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___CHAR__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___COUNT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___OFFSET__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___AINT__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___BYTE__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___PACKED__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___LB__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UB__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___DATATYPE_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___ERRORS_ARE_FATAL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___ERRORS_RETURN__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___ERRHANDLER_NULL__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_PyMPI_PICKLE);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_PyPickle_loadf);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_PyBytesIO_New);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_PyPickle_PROTOCOL);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_PyPickle_loads);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_PyPickle_dumps);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___IN_PLACE__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___BOTTOM__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_win_keyval);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_comm_keyval);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_type_keyval);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_datarep_registry);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_lock_registry);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_allocate_lock);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___WEIGHTS_EMPTY__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI___UNWEIGHTED__);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI__buffer);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_op_user_registry);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_numpy_array);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_array_array);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI__pypy_sentinel);
  Py_CLEAR(__pyx_v_6mpi4py_3MPI_MPIException);
  __Pyx_CleanupGlobals();
  /*--- Type import cleanup code ---*/
  /*--- Builtin cleanup code ---*/
  Py_CLEAR(__pyx_builtin_ImportError);
  Py_CLEAR(__pyx_builtin_staticmethod);
  Py_CLEAR(__pyx_builtin_RuntimeError);
  Py_CLEAR(__pyx_builtin_property);
  Py_CLEAR(__pyx_builtin_SystemError);
  Py_CLEAR(__pyx_builtin_TypeError);
  Py_CLEAR(__pyx_builtin_ValueError);
  Py_CLEAR(__pyx_builtin_IndexError);
  Py_CLEAR(__pyx_builtin_AttributeError);
  Py_CLEAR(__pyx_builtin_MemoryError);
  Py_CLEAR(__pyx_builtin_KeyError);
  Py_CLEAR(__pyx_builtin_NotImplemented);
  Py_CLEAR(__pyx_builtin_OverflowError);
  Py_CLEAR(__pyx_builtin_UserWarning);
  Py_CLEAR(__pyx_builtin_range);
  Py_CLEAR(__pyx_builtin_NotImplementedError);
  /*--- Intern cleanup code ---*/
  Py_CLEAR(__pyx_empty_tuple);
  Py_CLEAR(__pyx_d);
  Py_CLEAR(__pyx_cython_runtime);
  Py_CLEAR(__pyx_b);
}

/* --- Runtime support code --- */
/* Refnanny */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule(modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, "RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* PyObjectGetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro))
        return tp->tp_getattro(obj, attr_name);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_getattr))
        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
#endif
    return PyObject_GetAttr(obj, attr_name);
}
#endif

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
    if (unlikely(!result)) {
        PyErr_Format(PyExc_NameError,
#if PY_MAJOR_VERSION >= 3
            "name '%U' is not defined", name);
#else
            "name '%.200s' is not defined", PyString_AS_STRING(name));
#endif
    }
    return result;
}

/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    #if PY_MAJOR_VERSION < 3
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
    if (!py_import)
        goto bad;
    #endif
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if (strchr(__Pyx_MODULE_NAME, '.')) {
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0;
        }
        #endif
        if (!module) {
            #if PY_MAJOR_VERSION < 3
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
bad:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* ImportFrom */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Format(PyExc_ImportError,
        #if PY_MAJOR_VERSION < 3
            "cannot import name %.230s", PyString_AS_STRING(name));
        #else
            "cannot import name %S", name);
        #endif
    }
    return value;
}

/* PyCFunctionFastCall */
#if CYTHON_FAST_PYCCALL
static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
    PyObject *self = PyCFunction_GET_SELF(func);
    int flags = PyCFunction_GET_FLAGS(func);
    assert(PyCFunction_Check(func));
    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
    assert(nargs >= 0);
    assert(nargs == 0 || args != NULL);
    /* _PyCFunction_FastCallDict() must not be called with an exception set,
       because it may clear it (directly or indirectly) and so the
       caller loses its exception */
    assert(!PyErr_Occurred());
    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
        return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
    } else {
        return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
    }
}
#endif

/* PyFunctionFastCall */
#if CYTHON_FAST_PYCALL
static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
                                               PyObject *globals) {
    PyFrameObject *f;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject **fastlocals;
    Py_ssize_t i;
    PyObject *result;
    assert(globals != NULL);
    /* XXX Perhaps we should create a specialized
       PyFrame_New() that doesn't take locals, but does
       take builtins without sanity checking them.
       */
    assert(tstate != NULL);
    f = PyFrame_New(tstate, co, globals, NULL);
    if (f == NULL) {
        return NULL;
    }
    fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
    for (i = 0; i < na; i++) {
        Py_INCREF(*args);
        fastlocals[i] = *args++;
    }
    result = PyEval_EvalFrameEx(f,0);
    ++tstate->recursion_depth;
    Py_DECREF(f);
    --tstate->recursion_depth;
    return result;
}
#if 1 || PY_VERSION_HEX < 0x030600B1
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
    PyObject *globals = PyFunction_GET_GLOBALS(func);
    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
    PyObject *closure;
#if PY_MAJOR_VERSION >= 3
    PyObject *kwdefs;
#endif
    PyObject *kwtuple, **k;
    PyObject **d;
    Py_ssize_t nd;
    Py_ssize_t nk;
    PyObject *result;
    assert(kwargs == NULL || PyDict_Check(kwargs));
    nk = kwargs ? PyDict_Size(kwargs) : 0;
    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
        return NULL;
    }
    if (
#if PY_MAJOR_VERSION >= 3
            co->co_kwonlyargcount == 0 &&
#endif
            likely(kwargs == NULL || nk == 0) &&
            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
        if (argdefs == NULL && co->co_argcount == nargs) {
            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
            goto done;
        }
        else if (nargs == 0 && argdefs != NULL
                 && co->co_argcount == Py_SIZE(argdefs)) {
            /* function called with no arguments, but all parameters have
               a default value: use default values as arguments .*/
            args = &PyTuple_GET_ITEM(argdefs, 0);
            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
            goto done;
        }
    }
    if (kwargs != NULL) {
        Py_ssize_t pos, i;
        kwtuple = PyTuple_New(2 * nk);
        if (kwtuple == NULL) {
            result = NULL;
            goto done;
        }
        k = &PyTuple_GET_ITEM(kwtuple, 0);
        pos = i = 0;
        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
            Py_INCREF(k[i]);
            Py_INCREF(k[i+1]);
            i += 2;
        }
        nk = i / 2;
    }
    else {
        kwtuple = NULL;
        k = NULL;
    }
    closure = PyFunction_GET_CLOSURE(func);
#if PY_MAJOR_VERSION >= 3
    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
#endif
    if (argdefs != NULL) {
        d = &PyTuple_GET_ITEM(argdefs, 0);
        nd = Py_SIZE(argdefs);
    }
    else {
        d = NULL;
        nd = 0;
    }
#if PY_MAJOR_VERSION >= 3
    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
                               args, (int)nargs,
                               k, (int)nk,
                               d, (int)nd, kwdefs, closure);
#else
    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
                               args, (int)nargs,
                               k, (int)nk,
                               d, (int)nd, closure);
#endif
    Py_XDECREF(kwtuple);
done:
    Py_LeaveRecursiveCall();
    return result;
}
#endif
#endif

/* PyObjectCall */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = func->ob_type->tp_call;
    if (unlikely(!call))
        return PyObject_Call(func, arg, kw);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = (*call)(func, arg, kw);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCall2Args */
static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
    PyObject *args, *result = NULL;
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(function)) {
        PyObject *args[2] = {arg1, arg2};
        return __Pyx_PyFunction_FastCall(function, args, 2);
    }
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(function)) {
        PyObject *args[2] = {arg1, arg2};
        return __Pyx_PyCFunction_FastCall(function, args, 2);
    }
    #endif
    args = PyTuple_New(2);
    if (unlikely(!args)) goto done;
    Py_INCREF(arg1);
    PyTuple_SET_ITEM(args, 0, arg1);
    Py_INCREF(arg2);
    PyTuple_SET_ITEM(args, 1, arg2);
    Py_INCREF(function);
    result = __Pyx_PyObject_Call(function, args, NULL);
    Py_DECREF(args);
    Py_DECREF(function);
done:
    return result;
}

/* PyObjectCallMethO */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = PyCFunction_GET_FUNCTION(func);
    self = PyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallOneArg */
#if CYTHON_COMPILING_IN_CPYTHON
static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_New(1);
    if (unlikely(!args)) return NULL;
    Py_INCREF(arg);
    PyTuple_SET_ITEM(args, 0, arg);
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
#if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCall(func, &arg, 1);
    }
#endif
    if (likely(PyCFunction_Check(func))) {
        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
            return __Pyx_PyObject_CallMethO(func, arg);
#if CYTHON_FAST_PYCCALL
        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
#endif
        }
    }
    return __Pyx__PyObject_CallOneArg(func, arg);
}
#else
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_Pack(1, arg);
    if (unlikely(!args)) return NULL;
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
#endif

/* GetTopmostException */
#if CYTHON_USE_EXC_INFO_STACK
static _PyErr_StackItem *
__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
{
    _PyErr_StackItem *exc_info = tstate->exc_info;
    while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
           exc_info->previous_item != NULL)
    {
        exc_info = exc_info->previous_item;
    }
    return exc_info;
}
#endif

/* SaveResetException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    *type = exc_info->exc_type;
    *value = exc_info->exc_value;
    *tb = exc_info->exc_traceback;
    #else
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    #endif
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
}
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = type;
    exc_info->exc_value = value;
    exc_info->exc_traceback = tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}
#endif

/* GetException */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
#endif
{
    PyObject *local_type, *local_value, *local_tb;
#if CYTHON_FAST_THREAD_STATE
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
#if CYTHON_FAST_THREAD_STATE
    if (unlikely(tstate->curexc_type))
#else
    if (unlikely(PyErr_Occurred()))
#endif
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (local_tb) {
        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
            goto bad;
    }
    #endif
    Py_XINCREF(local_tb);
    Py_XINCREF(local_type);
    Py_XINCREF(local_value);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_FAST_THREAD_STATE
    #if CYTHON_USE_EXC_INFO_STACK
    {
        _PyErr_StackItem *exc_info = tstate->exc_info;
        tmp_type = exc_info->exc_type;
        tmp_value = exc_info->exc_value;
        tmp_tb = exc_info->exc_traceback;
        exc_info->exc_type = local_type;
        exc_info->exc_value = local_value;
        exc_info->exc_traceback = local_tb;
    }
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}

/* PyErrFetchRestore */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
}
#endif

/* BytesEquals */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    if (s1 == s2) {
        return (equals == Py_EQ);
    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
        const char *ps1, *ps2;
        Py_ssize_t length = PyBytes_GET_SIZE(s1);
        if (length != PyBytes_GET_SIZE(s2))
            return (equals == Py_NE);
        ps1 = PyBytes_AS_STRING(s1);
        ps2 = PyBytes_AS_STRING(s2);
        if (ps1[0] != ps2[0]) {
            return (equals == Py_NE);
        } else if (length == 1) {
            return (equals == Py_EQ);
        } else {
            int result;
#if CYTHON_USE_UNICODE_INTERNALS
            Py_hash_t hash1, hash2;
            hash1 = ((PyBytesObject*)s1)->ob_shash;
            hash2 = ((PyBytesObject*)s2)->ob_shash;
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                return (equals == Py_NE);
            }
#endif
            result = memcmp(ps1, ps2, (size_t)length);
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
        return (equals == Py_NE);
    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
        return (equals == Py_NE);
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
#endif
}

/* UnicodeEquals */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
#if PY_MAJOR_VERSION < 3
    PyObject* owned_ref = NULL;
#endif
    int s1_is_unicode, s2_is_unicode;
    if (s1 == s2) {
        goto return_eq;
    }
    s1_is_unicode = PyUnicode_CheckExact(s1);
    s2_is_unicode = PyUnicode_CheckExact(s2);
#if PY_MAJOR_VERSION < 3
    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
        owned_ref = PyUnicode_FromObject(s2);
        if (unlikely(!owned_ref))
            return -1;
        s2 = owned_ref;
        s2_is_unicode = 1;
    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
        owned_ref = PyUnicode_FromObject(s1);
        if (unlikely(!owned_ref))
            return -1;
        s1 = owned_ref;
        s1_is_unicode = 1;
    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
        return __Pyx_PyBytes_Equals(s1, s2, equals);
    }
#endif
    if (s1_is_unicode & s2_is_unicode) {
        Py_ssize_t length;
        int kind;
        void *data1, *data2;
        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
            return -1;
        length = __Pyx_PyUnicode_GET_LENGTH(s1);
        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
            goto return_ne;
        }
#if CYTHON_USE_UNICODE_INTERNALS
        {
            Py_hash_t hash1, hash2;
        #if CYTHON_PEP393_ENABLED
            hash1 = ((PyASCIIObject*)s1)->hash;
            hash2 = ((PyASCIIObject*)s2)->hash;
        #else
            hash1 = ((PyUnicodeObject*)s1)->hash;
            hash2 = ((PyUnicodeObject*)s2)->hash;
        #endif
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                goto return_ne;
            }
        }
#endif
        kind = __Pyx_PyUnicode_KIND(s1);
        if (kind != __Pyx_PyUnicode_KIND(s2)) {
            goto return_ne;
        }
        data1 = __Pyx_PyUnicode_DATA(s1);
        data2 = __Pyx_PyUnicode_DATA(s2);
        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
            goto return_ne;
        } else if (length == 1) {
            goto return_eq;
        } else {
            int result = memcmp(data1, data2, (size_t)(length * kind));
            #if PY_MAJOR_VERSION < 3
            Py_XDECREF(owned_ref);
            #endif
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & s2_is_unicode) {
        goto return_ne;
    } else if ((s2 == Py_None) & s1_is_unicode) {
        goto return_ne;
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        #if PY_MAJOR_VERSION < 3
        Py_XDECREF(owned_ref);
        #endif
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
return_eq:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_EQ);
return_ne:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_NE);
#endif
}

/* RaiseException */
#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                        CYTHON_UNUSED PyObject *cause) {
    __Pyx_PyThreadState_declare
    Py_XINCREF(type);
    if (!value || value == Py_None)
        value = NULL;
    else
        Py_INCREF(value);
    if (!tb || tb == Py_None)
        tb = NULL;
    else {
        Py_INCREF(tb);
        if (!PyTraceBack_Check(tb)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: arg 3 must be a traceback or None");
            goto raise_error;
        }
    }
    if (PyType_Check(type)) {
#if CYTHON_COMPILING_IN_PYPY
        if (!value) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#endif
        PyErr_NormalizeException(&type, &value, &tb);
    } else {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        value = type;
        type = (PyObject*) Py_TYPE(type);
        Py_INCREF(type);
        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: exception class must be a subclass of BaseException");
            goto raise_error;
        }
    }
    __Pyx_PyThreadState_assign
    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}
#else
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    PyObject* owned_instance = NULL;
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;
    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (PyExceptionClass_Check(type)) {
        PyObject *instance_class = NULL;
        if (value && PyExceptionInstance_Check(value)) {
            instance_class = (PyObject*) Py_TYPE(value);
            if (instance_class != type) {
                int is_subclass = PyObject_IsSubclass(instance_class, type);
                if (!is_subclass) {
                    instance_class = NULL;
                } else if (unlikely(is_subclass == -1)) {
                    goto bad;
                } else {
                    type = instance_class;
                }
            }
        }
        if (!instance_class) {
            PyObject *args;
            if (!value)
                args = PyTuple_New(0);
            else if (PyTuple_Check(value)) {
                Py_INCREF(value);
                args = value;
            } else
                args = PyTuple_Pack(1, value);
            if (!args)
                goto bad;
            owned_instance = PyObject_Call(type, args, NULL);
            Py_DECREF(args);
            if (!owned_instance)
                goto bad;
            value = owned_instance;
            if (!PyExceptionInstance_Check(value)) {
                PyErr_Format(PyExc_TypeError,
                             "calling %R should have returned an instance of "
                             "BaseException, not %R",
                             type, Py_TYPE(value));
                goto bad;
            }
        }
    } else {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }
    if (cause) {
        PyObject *fixed_cause;
        if (cause == Py_None) {
            fixed_cause = NULL;
        } else if (PyExceptionClass_Check(cause)) {
            fixed_cause = PyObject_CallObject(cause, NULL);
            if (fixed_cause == NULL)
                goto bad;
        } else if (PyExceptionInstance_Check(cause)) {
            fixed_cause = cause;
            Py_INCREF(fixed_cause);
        } else {
            PyErr_SetString(PyExc_TypeError,
                            "exception causes must derive from "
                            "BaseException");
            goto bad;
        }
        PyException_SetCause(value, fixed_cause);
    }
    PyErr_SetObject(type, value);
    if (tb) {
#if CYTHON_COMPILING_IN_PYPY
        PyObject *tmp_type, *tmp_value, *tmp_tb;
        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
        Py_INCREF(tb);
        PyErr_Restore(tmp_type, tmp_value, tb);
        Py_XDECREF(tmp_tb);
#else
        PyThreadState *tstate = __Pyx_PyThreadState_Current;
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
#endif
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}
#endif

/* RaiseDoubleKeywords */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AsString(kw_name));
        #endif
}

/* ParseKeywords */
static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;
    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
            continue;
        }
        name = first_kw_arg;
        #if PY_MAJOR_VERSION < 3
        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
            while (*name) {
                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
                        && _PyString_Eq(**name, key)) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    if ((**argname == key) || (
                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
                             && _PyString_Eq(**argname, key))) {
                        goto arg_passed_twice;
                    }
                    argname++;
                }
            }
        } else
        #endif
        if (likely(PyUnicode_Check(key))) {
            while (*name) {
                int cmp = (**name == key) ? 0 :
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
                #endif
                    PyUnicode_Compare(**name, key);
                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                if (cmp == 0) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    int cmp = (**argname == key) ? 0 :
                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
                    #endif
                        PyUnicode_Compare(**argname, key);
                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                    if (cmp == 0) goto arg_passed_twice;
                    argname++;
                }
            }
        } else
            goto invalid_keyword_type;
        if (kwds2) {
            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
        } else {
            goto invalid_keyword;
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

/* PyObjectCallNoArg */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
#if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCall(func, NULL, 0);
    }
#endif
#ifdef __Pyx_CyFunction_USED
    if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
#else
    if (likely(PyCFunction_Check(func)))
#endif
    {
        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
            return __Pyx_PyObject_CallMethO(func, NULL);
        }
    }
    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
}
#endif

/* WriteUnraisableException */
static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
                                  CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
                                  int full_traceback, CYTHON_UNUSED int nogil) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_PyThreadState_declare
#ifdef WITH_THREAD
    PyGILState_STATE state;
    if (nogil)
        state = PyGILState_Ensure();
#ifdef _MSC_VER
    else state = (PyGILState_STATE)-1;
#endif
#endif
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    if (full_traceback) {
        Py_XINCREF(old_exc);
        Py_XINCREF(old_val);
        Py_XINCREF(old_tb);
        __Pyx_ErrRestore(old_exc, old_val, old_tb);
        PyErr_PrintEx(1);
    }
    #if PY_MAJOR_VERSION < 3
    ctx = PyString_FromString(name);
    #else
    ctx = PyUnicode_FromString(name);
    #endif
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
#ifdef WITH_THREAD
    if (nogil)
        PyGILState_Release(state);
#endif
}

/* PyErrExceptionMatches */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    n = PyTuple_GET_SIZE(tuple);
#if PY_MAJOR_VERSION >= 3
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
#endif
    for (i=0; i<n; i++) {
        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
    PyObject *exc_type = tstate->curexc_type;
    if (exc_type == err) return 1;
    if (unlikely(!exc_type)) return 0;
    if (unlikely(PyTuple_Check(err)))
        return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
    return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
}
#endif

/* RaiseTooManyValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    PyErr_Format(PyExc_ValueError,
                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
}

/* RaiseNeedMoreValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
    PyErr_Format(PyExc_ValueError,
                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
                 index, (index == 1) ? "" : "s");
}

/* IterFinish */
static CYTHON_INLINE int __Pyx_IterFinish(void) {
#if CYTHON_FAST_THREAD_STATE
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject* exc_type = tstate->curexc_type;
    if (unlikely(exc_type)) {
        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
            PyObject *exc_value, *exc_tb;
            exc_value = tstate->curexc_value;
            exc_tb = tstate->curexc_traceback;
            tstate->curexc_type = 0;
            tstate->curexc_value = 0;
            tstate->curexc_traceback = 0;
            Py_DECREF(exc_type);
            Py_XDECREF(exc_value);
            Py_XDECREF(exc_tb);
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#else
    if (unlikely(PyErr_Occurred())) {
        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
            PyErr_Clear();
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#endif
}

/* UnpackItemEndCheck */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    if (unlikely(retval)) {
        Py_DECREF(retval);
        __Pyx_RaiseTooManyValuesError(expected);
        return -1;
    } else {
        return __Pyx_IterFinish();
    }
    return 0;
}

/* DictGetItem */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    PyObject *value;
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (!PyErr_Occurred()) {
            if (unlikely(PyTuple_Check(key))) {
                PyObject* args = PyTuple_Pack(1, key);
                if (likely(args)) {
                    PyErr_SetObject(PyExc_KeyError, args);
                    Py_DECREF(args);
                }
            } else {
                PyErr_SetObject(PyExc_KeyError, key);
            }
        }
        return NULL;
    }
    Py_INCREF(value);
    return value;
}
#endif

/* KeywordStringCheck */
static int __Pyx_CheckKeywordStrings(
    PyObject *kwdict,
    const char* function_name,
    int kw_allowed)
{
    PyObject* key = 0;
    Py_ssize_t pos = 0;
#if CYTHON_COMPILING_IN_PYPY
    if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0))
        goto invalid_keyword;
    return 1;
#else
    while (PyDict_Next(kwdict, &pos, &key, 0)) {
        #if PY_MAJOR_VERSION < 3
        if (unlikely(!PyString_Check(key)))
        #endif
            if (unlikely(!PyUnicode_Check(key)))
                goto invalid_keyword_type;
    }
    if ((!kw_allowed) && unlikely(key))
        goto invalid_keyword;
    return 1;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    return 0;
#endif
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

/* GetItemInt */
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              CYTHON_NCP_UNUSED int wraparound,
                                                              CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyList_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
        PyObject *r = PyList_GET_ITEM(o, wrapped_i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              CYTHON_NCP_UNUSED int wraparound,
                                                              CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyTuple_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
        PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                     CYTHON_NCP_UNUSED int wraparound,
                                                     CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
            PyObject *r = PyList_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    }
    else if (PyTuple_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return NULL;
                    PyErr_Clear();
                }
            }
            return m->sq_item(o, i);
        }
    }
#else
    if (is_list || PySequence_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

/* ExtTypeTest */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                 Py_TYPE(obj)->tp_name, type->tp_name);
    return 0;
}

/* SetItemInt */
static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
    int r;
    if (!j) return -1;
    r = PyObject_SetItem(o, j, v);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list,
                                               CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) {
            PyObject* old = PyList_GET_ITEM(o, n);
            Py_INCREF(v);
            PyList_SET_ITEM(o, n, v);
            Py_DECREF(old);
            return 1;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_ass_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return -1;
                    PyErr_Clear();
                }
            }
            return m->sq_ass_item(o, i, v);
        }
    }
#else
#if CYTHON_COMPILING_IN_PYPY
    if (is_list || (PySequence_Check(o) && !PyDict_Check(o)))
#else
    if (is_list || PySequence_Check(o))
#endif
    {
        return PySequence_SetItem(o, i, v);
    }
#endif
    return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
}

/* SwapException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = *type;
    exc_info->exc_value = *value;
    exc_info->exc_traceback = *tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = *type;
    tstate->exc_value = *value;
    tstate->exc_traceback = *tb;
    #endif
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
    PyErr_SetExcInfo(*type, *value, *tb);
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#endif

/* UnpackUnboundCMethod */
static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
    PyObject *method;
    method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
    if (unlikely(!method))
        return -1;
    target->method = method;
#if CYTHON_COMPILING_IN_CPYTHON
    #if PY_MAJOR_VERSION >= 3
    if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
    #endif
    {
        PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
        target->func = descr->d_method->ml_meth;
        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS);
    }
#endif
    return 0;
}

/* CallUnboundCMethod2 */
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) {
    if (likely(cfunc->func)) {
        PyObject *args[2] = {arg1, arg2};
        if (cfunc->flag == METH_FASTCALL) {
            #if PY_VERSION_HEX >= 0x030700A0
            return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, args, 2);
            #else
            return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL);
            #endif
        }
        #if PY_VERSION_HEX >= 0x030700A0
        if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
            return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL);
        #endif
    }
    return __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2);
}
#endif
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){
    PyObject *args, *result = NULL;
    if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_COMPILING_IN_CPYTHON
    if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
        args = PyTuple_New(2);
        if (unlikely(!args)) goto bad;
        Py_INCREF(arg1);
        PyTuple_SET_ITEM(args, 0, arg1);
        Py_INCREF(arg2);
        PyTuple_SET_ITEM(args, 1, arg2);
        if (cfunc->flag & METH_KEYWORDS)
            result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL);
        else
            result = (*cfunc->func)(self, args);
    } else {
        args = PyTuple_New(3);
        if (unlikely(!args)) goto bad;
        Py_INCREF(self);
        PyTuple_SET_ITEM(args, 0, self);
        Py_INCREF(arg1);
        PyTuple_SET_ITEM(args, 1, arg1);
        Py_INCREF(arg2);
        PyTuple_SET_ITEM(args, 2, arg2);
        result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
    }
#else
    args = PyTuple_Pack(3, self, arg1, arg2);
    if (unlikely(!args)) goto bad;
    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
#endif
bad:
    Py_XDECREF(args);
    return result;
}

/* ArgTypeTest */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    else if (exact) {
        #if PY_MAJOR_VERSION == 2
        if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
        #endif
    }
    else {
        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
    }
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
        name, type->tp_name, Py_TYPE(obj)->tp_name);
    return 0;
}

/* CallUnboundCMethod1 */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) {
    if (likely(cfunc->func)) {
        int flag = cfunc->flag;
        if (flag == METH_O) {
            return (*(cfunc->func))(self, arg);
        } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
            if (PY_VERSION_HEX >= 0x030700A0) {
                return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
            } else {
                return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
            }
        } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
            return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
        }
    }
    return __Pyx__CallUnboundCMethod1(cfunc, self, arg);
}
#endif
static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){
    PyObject *args, *result = NULL;
    if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_COMPILING_IN_CPYTHON
    if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
        args = PyTuple_New(1);
        if (unlikely(!args)) goto bad;
        Py_INCREF(arg);
        PyTuple_SET_ITEM(args, 0, arg);
        if (cfunc->flag & METH_KEYWORDS)
            result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL);
        else
            result = (*cfunc->func)(self, args);
    } else {
        args = PyTuple_New(2);
        if (unlikely(!args)) goto bad;
        Py_INCREF(self);
        PyTuple_SET_ITEM(args, 0, self);
        Py_INCREF(arg);
        PyTuple_SET_ITEM(args, 1, arg);
        result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
    }
#else
    args = PyTuple_Pack(2, self, arg);
    if (unlikely(!args)) goto bad;
    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
#endif
bad:
    Py_XDECREF(args);
    return result;
}

/* dict_getitem_default */
static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
    PyObject* value;
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (unlikely(PyErr_Occurred()))
            return NULL;
        value = default_value;
    }
    Py_INCREF(value);
    if ((1));
#else
    if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) {
        value = PyDict_GetItem(d, key);
        if (unlikely(!value)) {
            value = default_value;
        }
        Py_INCREF(value);
    }
#endif
    else {
        if (default_value == Py_None)
            value = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_get, d, key);
        else
            value = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyDict_Type_get, d, key, default_value);
    }
    return value;
}

/* PyObjectGetMethod */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
    PyObject *attr;
#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
    PyTypeObject *tp = Py_TYPE(obj);
    PyObject *descr;
    descrgetfunc f = NULL;
    PyObject **dictptr, *dict;
    int meth_found = 0;
    assert (*method == NULL);
    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
        attr = __Pyx_PyObject_GetAttrStr(obj, name);
        goto try_unpack;
    }
    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
        return 0;
    }
    descr = _PyType_Lookup(tp, name);
    if (likely(descr != NULL)) {
        Py_INCREF(descr);
#if PY_MAJOR_VERSION >= 3
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type)))
        #endif
#else
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr)))
        #endif
#endif
        {
            meth_found = 1;
        } else {
            f = Py_TYPE(descr)->tp_descr_get;
            if (f != NULL && PyDescr_IsData(descr)) {
                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
                Py_DECREF(descr);
                goto try_unpack;
            }
        }
    }
    dictptr = _PyObject_GetDictPtr(obj);
    if (dictptr != NULL && (dict = *dictptr) != NULL) {
        Py_INCREF(dict);
        attr = __Pyx_PyDict_GetItemStr(dict, name);
        if (attr != NULL) {
            Py_INCREF(attr);
            Py_DECREF(dict);
            Py_XDECREF(descr);
            goto try_unpack;
        }
        Py_DECREF(dict);
    }
    if (meth_found) {
        *method = descr;
        return 1;
    }
    if (f != NULL) {
        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
        Py_DECREF(descr);
        goto try_unpack;
    }
    if (descr != NULL) {
        *method = descr;
        return 0;
    }
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(name));
#endif
    return 0;
#else
    attr = __Pyx_PyObject_GetAttrStr(obj, name);
    goto try_unpack;
#endif
try_unpack:
#if CYTHON_UNPACK_METHODS
    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
        PyObject *function = PyMethod_GET_FUNCTION(attr);
        Py_INCREF(function);
        Py_DECREF(attr);
        *method = function;
        return 1;
    }
#endif
    *method = attr;
    return 0;
}

/* PyObjectCallMethod1 */
static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
    PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
    Py_DECREF(method);
    return result;
}
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
    PyObject *method = NULL, *result;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_Call2Args(method, obj, arg);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) return NULL;
    return __Pyx__PyObject_CallMethod1(method, arg);
}

/* pop_index */
static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) {
    PyObject *r;
    if (unlikely(!py_ix)) return NULL;
    r = __Pyx__PyObject_PopIndex(L, py_ix);
    Py_DECREF(py_ix);
    return r;
}
static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix) {
    return __Pyx_PyObject_CallMethod1(L, __pyx_n_s_pop, py_ix);
}
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix) {
    Py_ssize_t size = PyList_GET_SIZE(L);
    if (likely(size > (((PyListObject*)L)->allocated >> 1))) {
        Py_ssize_t cix = ix;
        if (cix < 0) {
            cix += size;
        }
        if (likely(__Pyx_is_valid_index(cix, size))) {
            PyObject* v = PyList_GET_ITEM(L, cix);
            Py_SIZE(L) -= 1;
            size -= 1;
            memmove(&PyList_GET_ITEM(L, cix), &PyList_GET_ITEM(L, cix+1), (size_t)(size-cix)*sizeof(PyObject*));
            return v;
        }
    }
    if (py_ix == Py_None) {
        return __Pyx__PyObject_PopNewIndex(L, PyInt_FromSsize_t(ix));
    } else {
        return __Pyx__PyObject_PopIndex(L, py_ix);
    }
}
#endif

/* PyObjectSetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_setattro))
        return tp->tp_setattro(obj, attr_name, value);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_setattr))
        return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
#endif
    return PyObject_SetAttr(obj, attr_name, value);
}
#endif

/* GetAttr */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
#if CYTHON_USE_TYPE_SLOTS
#if PY_MAJOR_VERSION >= 3
    if (likely(PyUnicode_Check(n)))
#else
    if (likely(PyString_Check(n)))
#endif
        return __Pyx_PyObject_GetAttrStr(o, n);
#endif
    return PyObject_GetAttr(o, n);
}

/* HasAttr */
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
    PyObject *r;
    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
        PyErr_SetString(PyExc_TypeError,
                        "hasattr(): attribute name must be string");
        return -1;
    }
    r = __Pyx_GetAttr(o, n);
    if (unlikely(!r)) {
        PyErr_Clear();
        return 0;
    } else {
        Py_DECREF(r);
        return 1;
    }
}

/* ObjectGetItem */
#if CYTHON_USE_TYPE_SLOTS
static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
    PyObject *runerr;
    Py_ssize_t key_value;
    PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
    if (unlikely(!(m && m->sq_item))) {
        PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name);
        return NULL;
    }
    key_value = __Pyx_PyIndex_AsSsize_t(index);
    if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
        return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1);
    }
    if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
        PyErr_Clear();
        PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name);
    }
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) {
    PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping;
    if (likely(m && m->mp_subscript)) {
        return m->mp_subscript(obj, key);
    }
    return __Pyx_PyObject_GetIndex(obj, key);
}
#endif

/* CallUnboundCMethod0 */
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    PyObject *args, *result = NULL;
    if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_ASSUME_SAFE_MACROS
    args = PyTuple_New(1);
    if (unlikely(!args)) goto bad;
    Py_INCREF(self);
    PyTuple_SET_ITEM(args, 0, self);
#else
    args = PyTuple_Pack(1, self);
    if (unlikely(!args)) goto bad;
#endif
    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
    Py_DECREF(args);
bad:
    return result;
}

/* py_dict_items */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
    if (PY_MAJOR_VERSION >= 3)
        return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_items, d);
    else
        return PyDict_Items(d);
}

/* PyDictVersioning */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
    PyObject **dictptr = NULL;
    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
    if (offset) {
#if CYTHON_COMPILING_IN_CPYTHON
        dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
#else
        dictptr = _PyObject_GetDictPtr(obj);
#endif
    }
    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
}
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
        return 0;
    return obj_dict_version == __Pyx_get_object_dict_version(obj);
}
#endif

/* GetModuleGlobalName */
#if CYTHON_USE_DICT_VERSIONS
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
#else
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
#endif
{
    PyObject *result;
#if !CYTHON_AVOID_BORROWED_REFS
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
    result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    } else if (unlikely(PyErr_Occurred())) {
        return NULL;
    }
#else
    result = PyDict_GetItem(__pyx_d, name);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
#endif
#else
    result = PyObject_GetItem(__pyx_d, name);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
    PyErr_Clear();
#endif
    return __Pyx_GetBuiltinName(name);
}

/* SliceObject */
static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value,
        Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
#if CYTHON_USE_TYPE_SLOTS
    PyMappingMethods* mp;
#if PY_MAJOR_VERSION < 3
    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
    if (likely(ms && ms->sq_ass_slice)) {
        if (!has_cstart) {
            if (_py_start && (*_py_start != Py_None)) {
                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstart = 0;
        }
        if (!has_cstop) {
            if (_py_stop && (*_py_stop != Py_None)) {
                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstop = PY_SSIZE_T_MAX;
        }
        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
            Py_ssize_t l = ms->sq_length(obj);
            if (likely(l >= 0)) {
                if (cstop < 0) {
                    cstop += l;
                    if (cstop < 0) cstop = 0;
                }
                if (cstart < 0) {
                    cstart += l;
                    if (cstart < 0) cstart = 0;
                }
            } else {
                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                    goto bad;
                PyErr_Clear();
            }
        }
        return ms->sq_ass_slice(obj, cstart, cstop, value);
    }
#endif
    mp = Py_TYPE(obj)->tp_as_mapping;
    if (likely(mp && mp->mp_ass_subscript))
#endif
    {
        int result;
        PyObject *py_slice, *py_start, *py_stop;
        if (_py_slice) {
            py_slice = *_py_slice;
        } else {
            PyObject* owned_start = NULL;
            PyObject* owned_stop = NULL;
            if (_py_start) {
                py_start = *_py_start;
            } else {
                if (has_cstart) {
                    owned_start = py_start = PyInt_FromSsize_t(cstart);
                    if (unlikely(!py_start)) goto bad;
                } else
                    py_start = Py_None;
            }
            if (_py_stop) {
                py_stop = *_py_stop;
            } else {
                if (has_cstop) {
                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
                    if (unlikely(!py_stop)) {
                        Py_XDECREF(owned_start);
                        goto bad;
                    }
                } else
                    py_stop = Py_None;
            }
            py_slice = PySlice_New(py_start, py_stop, Py_None);
            Py_XDECREF(owned_start);
            Py_XDECREF(owned_stop);
            if (unlikely(!py_slice)) goto bad;
        }
#if CYTHON_USE_TYPE_SLOTS
        result = mp->mp_ass_subscript(obj, py_slice, value);
#else
        result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
#endif
        if (!_py_slice) {
            Py_DECREF(py_slice);
        }
        return result;
    }
    PyErr_Format(PyExc_TypeError,
        "'%.200s' object does not support slice %.10s",
        Py_TYPE(obj)->tp_name, value ? "assignment" : "deletion");
bad:
    return -1;
}

/* SliceObject */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
        Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
        int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) {
#if CYTHON_USE_TYPE_SLOTS
    PyMappingMethods* mp;
#if PY_MAJOR_VERSION < 3
    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
    if (likely(ms && ms->sq_slice)) {
        if (!has_cstart) {
            if (_py_start && (*_py_start != Py_None)) {
                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstart = 0;
        }
        if (!has_cstop) {
            if (_py_stop && (*_py_stop != Py_None)) {
                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstop = PY_SSIZE_T_MAX;
        }
        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
            Py_ssize_t l = ms->sq_length(obj);
            if (likely(l >= 0)) {
                if (cstop < 0) {
                    cstop += l;
                    if (cstop < 0) cstop = 0;
                }
                if (cstart < 0) {
                    cstart += l;
                    if (cstart < 0) cstart = 0;
                }
            } else {
                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                    goto bad;
                PyErr_Clear();
            }
        }
        return ms->sq_slice(obj, cstart, cstop);
    }
#endif
    mp = Py_TYPE(obj)->tp_as_mapping;
    if (likely(mp && mp->mp_subscript))
#endif
    {
        PyObject* result;
        PyObject *py_slice, *py_start, *py_stop;
        if (_py_slice) {
            py_slice = *_py_slice;
        } else {
            PyObject* owned_start = NULL;
            PyObject* owned_stop = NULL;
            if (_py_start) {
                py_start = *_py_start;
            } else {
                if (has_cstart) {
                    owned_start = py_start = PyInt_FromSsize_t(cstart);
                    if (unlikely(!py_start)) goto bad;
                } else
                    py_start = Py_None;
            }
            if (_py_stop) {
                py_stop = *_py_stop;
            } else {
                if (has_cstop) {
                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
                    if (unlikely(!py_stop)) {
                        Py_XDECREF(owned_start);
                        goto bad;
                    }
                } else
                    py_stop = Py_None;
            }
            py_slice = PySlice_New(py_start, py_stop, Py_None);
            Py_XDECREF(owned_start);
            Py_XDECREF(owned_stop);
            if (unlikely(!py_slice)) goto bad;
        }
#if CYTHON_USE_TYPE_SLOTS
        result = mp->mp_subscript(obj, py_slice);
#else
        result = PyObject_GetItem(obj, py_slice);
#endif
        if (!_py_slice) {
            Py_DECREF(py_slice);
        }
        return result;
    }
    PyErr_Format(PyExc_TypeError,
        "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name);
bad:
    return NULL;
}

/* append */
static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
    if (likely(PyList_CheckExact(L))) {
        if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1;
    } else {
        PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x);
        if (unlikely(!retval))
            return -1;
        Py_DECREF(retval);
    }
    return 0;
}

/* PyObject_GenericGetAttrNoDict */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, attr_name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(attr_name));
#endif
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) {
    PyObject *descr;
    PyTypeObject *tp = Py_TYPE(obj);
    if (unlikely(!PyString_Check(attr_name))) {
        return PyObject_GenericGetAttr(obj, attr_name);
    }
    assert(!tp->tp_dictoffset);
    descr = _PyType_Lookup(tp, attr_name);
    if (unlikely(!descr)) {
        return __Pyx_RaiseGenericGetAttributeError(tp, attr_name);
    }
    Py_INCREF(descr);
    #if PY_MAJOR_VERSION < 3
    if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)))
    #endif
    {
        descrgetfunc f = Py_TYPE(descr)->tp_descr_get;
        if (unlikely(f)) {
            PyObject *res = f(descr, obj, (PyObject *)tp);
            Py_DECREF(descr);
            return res;
        }
    }
    return descr;
}
#endif

/* PyObject_GenericGetAttr */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
    if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
        return PyObject_GenericGetAttr(obj, attr_name);
    }
    return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name);
}
#endif

/* SetVTable */
static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* GetNameInClass */
static PyObject *__Pyx_GetGlobalNameAfterAttributeLookup(PyObject *name) {
    PyObject *result;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    __Pyx_GetModuleGlobalNameUncached(result, name);
    return result;
}
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name) {
    PyObject *result;
    result = __Pyx_PyObject_GetAttrStr(nmspace, name);
    if (!result) {
        result = __Pyx_GetGlobalNameAfterAttributeLookup(name);
    }
    return result;
}

/* CalculateMetaclass */
static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
    for (i=0; i < nbases; i++) {
        PyTypeObject *tmptype;
        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
        tmptype = Py_TYPE(tmp);
#if PY_MAJOR_VERSION < 3
        if (tmptype == &PyClass_Type)
            continue;
#endif
        if (!metaclass) {
            metaclass = tmptype;
            continue;
        }
        if (PyType_IsSubtype(metaclass, tmptype))
            continue;
        if (PyType_IsSubtype(tmptype, metaclass)) {
            metaclass = tmptype;
            continue;
        }
        PyErr_SetString(PyExc_TypeError,
                        "metaclass conflict: "
                        "the metaclass of a derived class "
                        "must be a (non-strict) subclass "
                        "of the metaclasses of all its bases");
        return NULL;
    }
    if (!metaclass) {
#if PY_MAJOR_VERSION < 3
        metaclass = &PyClass_Type;
#else
        metaclass = &PyType_Type;
#endif
    }
    Py_INCREF((PyObject*) metaclass);
    return (PyObject*) metaclass;
}

/* FetchCommonType */
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
    PyObject* fake_module;
    PyTypeObject* cached_type = NULL;
    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
    if (!fake_module) return NULL;
    Py_INCREF(fake_module);
    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
    if (cached_type) {
        if (!PyType_Check((PyObject*)cached_type)) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s is not a type object",
                type->tp_name);
            goto bad;
        }
        if (cached_type->tp_basicsize != type->tp_basicsize) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s has the wrong size, try recompiling",
                type->tp_name);
            goto bad;
        }
    } else {
        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
        PyErr_Clear();
        if (PyType_Ready(type) < 0) goto bad;
        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
            goto bad;
        Py_INCREF(type);
        cached_type = type;
    }
done:
    Py_DECREF(fake_module);
    return cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}

/* CythonFunction */
#include <structmember.h>
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
{
    if (unlikely(op->func_doc == NULL)) {
        if (op->func.m_ml->ml_doc) {
#if PY_MAJOR_VERSION >= 3
            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
#else
            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
#endif
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp = op->func_doc;
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    op->func_doc = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    if (unlikely(op->func_name == NULL)) {
#if PY_MAJOR_VERSION >= 3
        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
#else
        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    tmp = op->func_name;
    Py_INCREF(value);
    op->func_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(op->func_qualname);
    return op->func_qualname;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    tmp = op->func_qualname;
    Py_INCREF(value);
    op->func_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
{
    PyObject *self;
    self = m->func_closure;
    if (self == NULL)
        self = Py_None;
    Py_INCREF(self);
    return self;
}
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
static int
__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
    if (unlikely(value == NULL)) {
        PyErr_SetString(PyExc_TypeError,
               "function's dictionary may not be deleted");
        return -1;
    }
    if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
               "setting function's dictionary to a non-dict");
        return -1;
    }
    tmp = op->func_dict;
    Py_INCREF(value);
    op->func_dict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    int result = 0;
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    #else
    op->defaults_tuple = PySequence_ITEM(res, 0);
    if (unlikely(!op->defaults_tuple)) result = -1;
    else {
        op->defaults_kwdict = PySequence_ITEM(res, 1);
        if (unlikely(!op->defaults_kwdict)) result = -1;
    }
    #endif
    Py_DECREF(res);
    return result;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyTuple_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_tuple;
    op->defaults_tuple = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->defaults_tuple;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_kwdict;
    op->defaults_kwdict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->defaults_kwdict;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value || value == Py_None) {
        value = NULL;
    } else if (!PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    tmp = op->func_annotations;
    op->func_annotations = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->func_annotations;
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
    {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0},
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromString(m->func.m_ml->ml_name);
#else
    return PyString_FromString(m->func.m_ml->ml_name);
#endif
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
#if PY_VERSION_HEX < 0x030500A0
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
#else
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
    if (op == NULL)
        return NULL;
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
    op->func.m_ml = ml;
    op->func.m_self = (PyObject *) op;
    Py_XINCREF(closure);
    op->func_closure = closure;
    Py_XINCREF(module);
    op->func.m_module = module;
    op->func_dict = NULL;
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
    op->func_classobj = NULL;
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults_pyobjects = 0;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    PyObject_GC_Track(op);
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
    Py_CLEAR(m->func.m_module);
    Py_CLEAR(m->func_dict);
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_globals);
    Py_CLEAR(m->func_code);
    Py_CLEAR(m->func_classobj);
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_XDECREF(pydefaults[i]);
        PyObject_Free(m->defaults);
        m->defaults = NULL;
    }
    return 0;
}
static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    if (__Pyx_CyFunction_weakreflist(m) != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    PyObject_GC_Del(m);
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    __Pyx__CyFunction_dealloc(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    Py_VISIT(m->func_closure);
    Py_VISIT(m->func.m_module);
    Py_VISIT(m->func_dict);
    Py_VISIT(m->func_name);
    Py_VISIT(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_globals);
    Py_VISIT(m->func_code);
    Py_VISIT(m->func_classobj);
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_VISIT(pydefaults[i]);
    }
    return 0;
}
static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
{
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
        Py_INCREF(func);
        return func;
    }
    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
        if (type == NULL)
            type = (PyObject *)(Py_TYPE(obj));
        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
    }
    if (obj == Py_None)
        obj = NULL;
    return __Pyx_PyMethod_New(func, obj, type);
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
#else
    return PyString_FromFormat("<cyfunction %s at %p>",
                               PyString_AsString(op->func_qualname), (void *)op);
#endif
}
static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = f->m_ml->ml_meth;
    Py_ssize_t size;
    switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
    case METH_VARARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0))
            return (*meth)(self, arg);
        break;
    case METH_VARARGS | METH_KEYWORDS:
        return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
            size = PyTuple_GET_SIZE(arg);
            if (likely(size == 0))
                return (*meth)(self, NULL);
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
            size = PyTuple_GET_SIZE(arg);
            if (likely(size == 1)) {
                PyObject *result, *arg0;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                arg0 = PyTuple_GET_ITEM(arg, 0);
                #else
                arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
                #endif
                result = (*meth)(self, arg0);
                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
                Py_DECREF(arg0);
                #endif
                return result;
            }
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
                        "longer supported!");
        return NULL;
    }
    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
                 f->m_ml->ml_name);
    return NULL;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw);
}
static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
    PyObject *result;
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        Py_ssize_t argc;
        PyObject *new_args;
        PyObject *self;
        argc = PyTuple_GET_SIZE(args);
        new_args = PyTuple_GetSlice(args, 1, argc);
        if (unlikely(!new_args))
            return NULL;
        self = PyTuple_GetItem(args, 0);
        if (unlikely(!self)) {
            Py_DECREF(new_args);
            return NULL;
        }
        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
        Py_DECREF(new_args);
    } else {
        result = __Pyx_CyFunction_Call(func, args, kw);
    }
    return result;
}
static PyTypeObject __pyx_CyFunctionType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
    (destructor) __Pyx_CyFunction_dealloc,
    0,
    0,
    0,
#if PY_MAJOR_VERSION < 3
    0,
#else
    0,
#endif
    (reprfunc) __Pyx_CyFunction_repr,
    0,
    0,
    0,
    0,
    __Pyx_CyFunction_CallAsMethod,
    0,
    0,
    0,
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
    0,
    (traverseproc) __Pyx_CyFunction_traverse,
    (inquiry) __Pyx_CyFunction_clear,
    0,
#if PY_VERSION_HEX < 0x030500A0
    offsetof(__pyx_CyFunctionObject, func_weakreflist),
#else
    offsetof(PyCFunctionObject, m_weakreflist),
#endif
    0,
    0,
    __pyx_CyFunction_methods,
    __pyx_CyFunction_members,
    __pyx_CyFunction_getsets,
    0,
    0,
    __Pyx_CyFunction_descr_get,
    0,
    offsetof(__pyx_CyFunctionObject, func_dict),
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if PY_VERSION_HEX >= 0x030400a1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
};
static int __pyx_CyFunction_init(void) {
    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
    if (unlikely(__pyx_CyFunctionType == NULL)) {
        return -1;
    }
    return 0;
}
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyObject_Malloc(size);
    if (unlikely(!m->defaults))
        return PyErr_NoMemory();
    memset(m->defaults, 0, size);
    m->defaults_pyobjects = pyobjects;
    return m->defaults;
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_tuple = tuple;
    Py_INCREF(tuple);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_kwdict = dict;
    Py_INCREF(dict);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->func_annotations = dict;
    Py_INCREF(dict);
}

/* Py3ClassCreate */
static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
    PyObject *ns;
    if (metaclass) {
        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
        if (prep) {
            PyObject *pargs = PyTuple_Pack(2, name, bases);
            if (unlikely(!pargs)) {
                Py_DECREF(prep);
                return NULL;
            }
            ns = PyObject_Call(prep, pargs, mkw);
            Py_DECREF(prep);
            Py_DECREF(pargs);
        } else {
            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
                return NULL;
            PyErr_Clear();
            ns = PyDict_New();
        }
    } else {
        ns = PyDict_New();
    }
    if (unlikely(!ns))
        return NULL;
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
    return ns;
bad:
    Py_DECREF(ns);
    return NULL;
}
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
                                      PyObject *dict, PyObject *mkw,
                                      int calculate_metaclass, int allow_py2_metaclass) {
    PyObject *result, *margs;
    PyObject *owned_metaclass = NULL;
    if (allow_py2_metaclass) {
        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
        if (owned_metaclass) {
            metaclass = owned_metaclass;
        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
            PyErr_Clear();
        } else {
            return NULL;
        }
    }
    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
        Py_XDECREF(owned_metaclass);
        if (unlikely(!metaclass))
            return NULL;
        owned_metaclass = metaclass;
    }
    margs = PyTuple_Pack(3, name, bases, dict);
    if (unlikely(!margs)) {
        result = NULL;
    } else {
        result = PyObject_Call(metaclass, margs, mkw);
        Py_DECREF(margs);
    }
    Py_XDECREF(owned_metaclass);
    return result;
}

/* ClassMethod */
static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
#if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM <= 0x05080000
    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
        return PyClassMethod_New(method);
    }
#else
#if CYTHON_COMPILING_IN_PYSTON || CYTHON_COMPILING_IN_PYPY
    if (PyMethodDescr_Check(method))
#else
    static PyTypeObject *methoddescr_type = NULL;
    if (methoddescr_type == NULL) {
       PyObject *meth = PyObject_GetAttrString((PyObject*)&PyList_Type, "append");
       if (!meth) return NULL;
       methoddescr_type = Py_TYPE(meth);
       Py_DECREF(meth);
    }
    if (__Pyx_TypeCheck(method, methoddescr_type))
#endif
    {
        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
        #if PY_VERSION_HEX < 0x03020000
        PyTypeObject *d_type = descr->d_type;
        #else
        PyTypeObject *d_type = descr->d_common.d_type;
        #endif
        return PyDescr_NewClassMethod(d_type, descr->d_method);
    }
#endif
    else if (PyMethod_Check(method)) {
        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
    }
    else if (PyCFunction_Check(method)) {
        return PyClassMethod_New(method);
    }
#ifdef __Pyx_CyFunction_USED
    else if (__Pyx_CyFunction_Check(method)) {
        return PyClassMethod_New(method);
    }
#endif
    PyErr_SetString(PyExc_TypeError,
                   "Class-level classmethod() can only be called on "
                   "a method_descriptor or instance method.");
    return NULL;
}

/* RegisterModuleCleanup */
#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
static PyObject* __pyx_module_cleanup_atexit(PyObject *module, CYTHON_UNUSED PyObject *unused) {
    __pyx_module_cleanup(module);
    Py_INCREF(Py_None); return Py_None;
}
static int __Pyx_RegisterCleanup(void) {
    static PyMethodDef cleanup_def = {
        "__cleanup", (PyCFunction)__pyx_module_cleanup_atexit, METH_NOARGS, 0};
    PyObject *cleanup_func = 0;
    PyObject *atexit = 0;
    PyObject *reg = 0;
    PyObject *args = 0;
    PyObject *res = 0;
    int ret = -1;
    cleanup_func = PyCFunction_New(&cleanup_def, 0);
    if (!cleanup_func)
        goto bad;
    atexit = PyImport_ImportModule("atexit");
    if (!atexit)
        goto bad;
    reg = PyObject_GetAttrString(atexit, "_exithandlers");
    if (reg && PyList_Check(reg)) {
        PyObject *a, *kw;
        a = PyTuple_New(0);
        kw = PyDict_New();
        if (!a || !kw) {
            Py_XDECREF(a);
            Py_XDECREF(kw);
            goto bad;
        }
        args = PyTuple_Pack(3, cleanup_func, a, kw);
        Py_DECREF(a);
        Py_DECREF(kw);
        if (!args)
            goto bad;
        ret = PyList_Insert(reg, 0, args);
    } else {
        if (!reg)
            PyErr_Clear();
        Py_XDECREF(reg);
        reg = PyObject_GetAttrString(atexit, "register");
        if (!reg)
            goto bad;
        args = PyTuple_Pack(1, cleanup_func);
        if (!args)
            goto bad;
        res = PyObject_CallObject(reg, args);
        if (!res)
            goto bad;
        ret = 0;
    }
bad:
    Py_XDECREF(cleanup_func);
    Py_XDECREF(atexit);
    Py_XDECREF(reg);
    Py_XDECREF(args);
    Py_XDECREF(res);
    return ret;
}
#endif

/* CLineInTraceback */
#ifndef CYTHON_CLINE_IN_TRACEBACK
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
    PyObject *use_cline;
    PyObject *ptype, *pvalue, *ptraceback;
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject **cython_runtime_dict;
#endif
    if (unlikely(!__pyx_cython_runtime)) {
        return c_line;
    }
    __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
#if CYTHON_COMPILING_IN_CPYTHON
    cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
    if (likely(cython_runtime_dict)) {
        __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
            use_cline, *cython_runtime_dict,
            __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback))
    } else
#endif
    {
      PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
      if (use_cline_obj) {
        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
        Py_DECREF(use_cline_obj);
      } else {
        PyErr_Clear();
        use_cline = NULL;
      }
    }
    if (!use_cline) {
        c_line = 0;
        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
    }
    else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
        c_line = 0;
    }
    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
    return c_line;
}
#endif

/* CodeObjectCache */
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
    int start = 0, mid = 0, end = count - 1;
    if (end >= 0 && code_line > entries[end].code_line) {
        return count;
    }
    while (start < end) {
        mid = start + (end - start) / 2;
        if (code_line < entries[mid].code_line) {
            end = mid;
        } else if (code_line > entries[mid].code_line) {
             start = mid + 1;
        } else {
            return mid;
        }
    }
    if (code_line <= entries[mid].code_line) {
        return mid;
    } else {
        return mid + 1;
    }
}
static PyCodeObject *__pyx_find_code_object(int code_line) {
    PyCodeObject* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = __pyx_code_cache.entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            __pyx_code_cache.entries = entries;
            __pyx_code_cache.max_count = 64;
            __pyx_code_cache.count = 1;
            entries[0].code_line = code_line;
            entries[0].code_object = code_object;
            Py_INCREF(code_object);
        }
        return;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
        PyCodeObject* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_DECREF(tmp);
        return;
    }
    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
        int new_max = __pyx_code_cache.max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        __pyx_code_cache.entries = entries;
        __pyx_code_cache.max_count = new_max;
    }
    for (i=__pyx_code_cache.count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    __pyx_code_cache.count++;
    Py_INCREF(code_object);
}

/* AddTraceback */
#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(filename);
    #else
    py_srcfile = PyUnicode_FromString(filename);
    #endif
    if (!py_srcfile) goto bad;
    if (c_line) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_code = __Pyx_PyCode_New(
        0,
        0,
        0,
        0,
        0,
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple, /*PyObject *consts,*/
        __pyx_empty_tuple, /*PyObject *names,*/
        __pyx_empty_tuple, /*PyObject *varnames,*/
        __pyx_empty_tuple, /*PyObject *freevars,*/
        __pyx_empty_tuple, /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        py_line,
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    Py_DECREF(py_srcfile);
    Py_DECREF(py_funcname);
    return py_code;
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(tstate, c_line);
    }
    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!py_code) {
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) goto bad;
        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
    }
    py_frame = PyFrame_New(
        tstate,            /*PyThreadState *tstate,*/
        py_code,           /*PyCodeObject *code,*/
        __pyx_d,    /*PyObject *globals,*/
        0                  /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

/* CIntFromPyVerify */
#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Aint(MPI_Aint value) {
    const MPI_Aint neg_one = (MPI_Aint) ((MPI_Aint) 0 - (MPI_Aint) 1), const_zero = (MPI_Aint) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(MPI_Aint) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(MPI_Aint) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Aint) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(MPI_Aint) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Aint) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(MPI_Aint),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(int),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(long) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(long) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Offset(MPI_Offset value) {
    const MPI_Offset neg_one = (MPI_Offset) ((MPI_Offset) 0 - (MPI_Offset) 1), const_zero = (MPI_Offset) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(MPI_Offset) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(MPI_Offset) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Offset) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(MPI_Offset) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Offset) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(MPI_Offset),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value) {
    const MPI_Fint neg_one = (MPI_Fint) ((MPI_Fint) 0 - (MPI_Fint) 1), const_zero = (MPI_Fint) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(MPI_Fint) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Fint) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(MPI_Fint) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Fint) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(MPI_Fint),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Count(MPI_Count value) {
    const MPI_Count neg_one = (MPI_Count) ((MPI_Count) 0 - (MPI_Count) 1), const_zero = (MPI_Count) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(MPI_Count) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(MPI_Count) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Count) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(MPI_Count) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(MPI_Count) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(MPI_Count),
                                     little, !is_unsigned);
    }
}

/* CIntFromPy */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(int) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (int) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (int) 0;
                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
                case 2:
                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (int) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(int) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (int) 0;
                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(int) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            int val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (int) -1;
        }
    } else {
        int val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (int) -1;
        val = __Pyx_PyInt_As_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to int");
    return (int) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to int");
    return (int) -1;
}

/* CIntFromPy */
static CYTHON_INLINE MPI_Aint __Pyx_PyInt_As_MPI_Aint(PyObject *x) {
    const MPI_Aint neg_one = (MPI_Aint) ((MPI_Aint) 0 - (MPI_Aint) 1), const_zero = (MPI_Aint) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(MPI_Aint) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(MPI_Aint, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (MPI_Aint) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Aint) 0;
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Aint, digit, digits[0])
                case 2:
                    if (8 * sizeof(MPI_Aint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) >= 2 * PyLong_SHIFT) {
                            return (MPI_Aint) (((((MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Aint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) >= 3 * PyLong_SHIFT) {
                            return (MPI_Aint) (((((((MPI_Aint)digits[2]) << PyLong_SHIFT) | (MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Aint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) >= 4 * PyLong_SHIFT) {
                            return (MPI_Aint) (((((((((MPI_Aint)digits[3]) << PyLong_SHIFT) | (MPI_Aint)digits[2]) << PyLong_SHIFT) | (MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (MPI_Aint) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(MPI_Aint) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Aint, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Aint) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Aint, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Aint) 0;
                case -1: __PYX_VERIFY_RETURN_INT(MPI_Aint, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Aint,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(MPI_Aint) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Aint) (((MPI_Aint)-1)*(((((MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(MPI_Aint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Aint) ((((((MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(MPI_Aint) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Aint) (((MPI_Aint)-1)*(((((((MPI_Aint)digits[2]) << PyLong_SHIFT) | (MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Aint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Aint) ((((((((MPI_Aint)digits[2]) << PyLong_SHIFT) | (MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(MPI_Aint) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Aint) (((MPI_Aint)-1)*(((((((((MPI_Aint)digits[3]) << PyLong_SHIFT) | (MPI_Aint)digits[2]) << PyLong_SHIFT) | (MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Aint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Aint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Aint) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Aint) ((((((((((MPI_Aint)digits[3]) << PyLong_SHIFT) | (MPI_Aint)digits[2]) << PyLong_SHIFT) | (MPI_Aint)digits[1]) << PyLong_SHIFT) | (MPI_Aint)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(MPI_Aint) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Aint, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Aint) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Aint, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            MPI_Aint val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (MPI_Aint) -1;
        }
    } else {
        MPI_Aint val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (MPI_Aint) -1;
        val = __Pyx_PyInt_As_MPI_Aint(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to MPI_Aint");
    return (MPI_Aint) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to MPI_Aint");
    return (MPI_Aint) -1;
}

/* CIntFromPy */
static CYTHON_INLINE MPI_Count __Pyx_PyInt_As_MPI_Count(PyObject *x) {
    const MPI_Count neg_one = (MPI_Count) ((MPI_Count) 0 - (MPI_Count) 1), const_zero = (MPI_Count) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(MPI_Count) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(MPI_Count, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (MPI_Count) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Count) 0;
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Count, digit, digits[0])
                case 2:
                    if (8 * sizeof(MPI_Count) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) >= 2 * PyLong_SHIFT) {
                            return (MPI_Count) (((((MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Count) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) >= 3 * PyLong_SHIFT) {
                            return (MPI_Count) (((((((MPI_Count)digits[2]) << PyLong_SHIFT) | (MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Count) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) >= 4 * PyLong_SHIFT) {
                            return (MPI_Count) (((((((((MPI_Count)digits[3]) << PyLong_SHIFT) | (MPI_Count)digits[2]) << PyLong_SHIFT) | (MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (MPI_Count) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(MPI_Count) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Count, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Count) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Count, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Count) 0;
                case -1: __PYX_VERIFY_RETURN_INT(MPI_Count, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Count,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(MPI_Count) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Count) (((MPI_Count)-1)*(((((MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(MPI_Count) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Count) ((((((MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(MPI_Count) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Count) (((MPI_Count)-1)*(((((((MPI_Count)digits[2]) << PyLong_SHIFT) | (MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Count) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Count) ((((((((MPI_Count)digits[2]) << PyLong_SHIFT) | (MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(MPI_Count) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Count) (((MPI_Count)-1)*(((((((((MPI_Count)digits[3]) << PyLong_SHIFT) | (MPI_Count)digits[2]) << PyLong_SHIFT) | (MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Count) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Count, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Count) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Count) ((((((((((MPI_Count)digits[3]) << PyLong_SHIFT) | (MPI_Count)digits[2]) << PyLong_SHIFT) | (MPI_Count)digits[1]) << PyLong_SHIFT) | (MPI_Count)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(MPI_Count) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Count, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Count) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Count, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            MPI_Count val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (MPI_Count) -1;
        }
    } else {
        MPI_Count val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (MPI_Count) -1;
        val = __Pyx_PyInt_As_MPI_Count(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to MPI_Count");
    return (MPI_Count) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to MPI_Count");
    return (MPI_Count) -1;
}

/* CIntFromPy */
static CYTHON_INLINE MPI_Offset __Pyx_PyInt_As_MPI_Offset(PyObject *x) {
    const MPI_Offset neg_one = (MPI_Offset) ((MPI_Offset) 0 - (MPI_Offset) 1), const_zero = (MPI_Offset) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(MPI_Offset) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(MPI_Offset, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (MPI_Offset) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Offset) 0;
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Offset, digit, digits[0])
                case 2:
                    if (8 * sizeof(MPI_Offset) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) >= 2 * PyLong_SHIFT) {
                            return (MPI_Offset) (((((MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Offset) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) >= 3 * PyLong_SHIFT) {
                            return (MPI_Offset) (((((((MPI_Offset)digits[2]) << PyLong_SHIFT) | (MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Offset) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) >= 4 * PyLong_SHIFT) {
                            return (MPI_Offset) (((((((((MPI_Offset)digits[3]) << PyLong_SHIFT) | (MPI_Offset)digits[2]) << PyLong_SHIFT) | (MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (MPI_Offset) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(MPI_Offset) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Offset, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Offset) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Offset, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Offset) 0;
                case -1: __PYX_VERIFY_RETURN_INT(MPI_Offset, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Offset,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(MPI_Offset) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Offset) (((MPI_Offset)-1)*(((((MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(MPI_Offset) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Offset) ((((((MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(MPI_Offset) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Offset) (((MPI_Offset)-1)*(((((((MPI_Offset)digits[2]) << PyLong_SHIFT) | (MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Offset) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Offset) ((((((((MPI_Offset)digits[2]) << PyLong_SHIFT) | (MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(MPI_Offset) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Offset) (((MPI_Offset)-1)*(((((((((MPI_Offset)digits[3]) << PyLong_SHIFT) | (MPI_Offset)digits[2]) << PyLong_SHIFT) | (MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Offset) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Offset, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Offset) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Offset) ((((((((((MPI_Offset)digits[3]) << PyLong_SHIFT) | (MPI_Offset)digits[2]) << PyLong_SHIFT) | (MPI_Offset)digits[1]) << PyLong_SHIFT) | (MPI_Offset)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(MPI_Offset) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Offset, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Offset) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Offset, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            MPI_Offset val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (MPI_Offset) -1;
        }
    } else {
        MPI_Offset val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (MPI_Offset) -1;
        val = __Pyx_PyInt_As_MPI_Offset(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to MPI_Offset");
    return (MPI_Offset) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to MPI_Offset");
    return (MPI_Offset) -1;
}

/* CIntFromPy */
static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) {
    const unsigned char neg_one = (unsigned char) ((unsigned char) 0 - (unsigned char) 1), const_zero = (unsigned char) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(unsigned char) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(unsigned char, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (unsigned char) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (unsigned char) 0;
                case  1: __PYX_VERIFY_RETURN_INT(unsigned char, digit, digits[0])
                case 2:
                    if (8 * sizeof(unsigned char) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) >= 2 * PyLong_SHIFT) {
                            return (unsigned char) (((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(unsigned char) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) >= 3 * PyLong_SHIFT) {
                            return (unsigned char) (((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(unsigned char) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) >= 4 * PyLong_SHIFT) {
                            return (unsigned char) (((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (unsigned char) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(unsigned char) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (unsigned char) 0;
                case -1: __PYX_VERIFY_RETURN_INT(unsigned char, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(unsigned char,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(unsigned char) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT) {
                            return (unsigned char) (((unsigned char)-1)*(((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(unsigned char) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT) {
                            return (unsigned char) ((((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT) {
                            return (unsigned char) (((unsigned char)-1)*(((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(unsigned char) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT) {
                            return (unsigned char) ((((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 4 * PyLong_SHIFT) {
                            return (unsigned char) (((unsigned char)-1)*(((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(unsigned char) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(unsigned char) - 1 > 4 * PyLong_SHIFT) {
                            return (unsigned char) ((((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(unsigned char) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(unsigned char) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned char, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            unsigned char val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (unsigned char) -1;
        }
    } else {
        unsigned char val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (unsigned char) -1;
        val = __Pyx_PyInt_As_unsigned_char(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to unsigned char");
    return (unsigned char) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to unsigned char");
    return (unsigned char) -1;
}

/* CIntFromPy */
static CYTHON_INLINE MPI_Fint __Pyx_PyInt_As_MPI_Fint(PyObject *x) {
    const MPI_Fint neg_one = (MPI_Fint) ((MPI_Fint) 0 - (MPI_Fint) 1), const_zero = (MPI_Fint) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(MPI_Fint) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(MPI_Fint, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (MPI_Fint) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Fint) 0;
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Fint, digit, digits[0])
                case 2:
                    if (8 * sizeof(MPI_Fint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) >= 2 * PyLong_SHIFT) {
                            return (MPI_Fint) (((((MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Fint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) >= 3 * PyLong_SHIFT) {
                            return (MPI_Fint) (((((((MPI_Fint)digits[2]) << PyLong_SHIFT) | (MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Fint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) >= 4 * PyLong_SHIFT) {
                            return (MPI_Fint) (((((((((MPI_Fint)digits[3]) << PyLong_SHIFT) | (MPI_Fint)digits[2]) << PyLong_SHIFT) | (MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (MPI_Fint) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Fint, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Fint) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Fint, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (MPI_Fint) 0;
                case -1: __PYX_VERIFY_RETURN_INT(MPI_Fint, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(MPI_Fint,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(MPI_Fint) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Fint) (((MPI_Fint)-1)*(((((MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(MPI_Fint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) - 1 > 2 * PyLong_SHIFT) {
                            return (MPI_Fint) ((((((MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(MPI_Fint) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Fint) (((MPI_Fint)-1)*(((((((MPI_Fint)digits[2]) << PyLong_SHIFT) | (MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(MPI_Fint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) - 1 > 3 * PyLong_SHIFT) {
                            return (MPI_Fint) ((((((((MPI_Fint)digits[2]) << PyLong_SHIFT) | (MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(MPI_Fint) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Fint) (((MPI_Fint)-1)*(((((((((MPI_Fint)digits[3]) << PyLong_SHIFT) | (MPI_Fint)digits[2]) << PyLong_SHIFT) | (MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(MPI_Fint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(MPI_Fint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(MPI_Fint) - 1 > 4 * PyLong_SHIFT) {
                            return (MPI_Fint) ((((((((((MPI_Fint)digits[3]) << PyLong_SHIFT) | (MPI_Fint)digits[2]) << PyLong_SHIFT) | (MPI_Fint)digits[1]) << PyLong_SHIFT) | (MPI_Fint)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(MPI_Fint) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Fint, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(MPI_Fint) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(MPI_Fint, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            MPI_Fint val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (MPI_Fint) -1;
        }
    } else {
        MPI_Fint val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (MPI_Fint) -1;
        val = __Pyx_PyInt_As_MPI_Fint(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to MPI_Fint");
    return (MPI_Fint) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to MPI_Fint");
    return (MPI_Fint) -1;
}

/* CIntFromPy */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(long) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (long) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (long) 0;
                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
                case 2:
                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (long) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(long) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (long) 0;
                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(long) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            long val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (long) -1;
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (long) -1;
        val = __Pyx_PyInt_As_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to long");
    return (long) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to long");
    return (long) -1;
}

/* FastTypeChecks */
#if CYTHON_COMPILING_IN_CPYTHON
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
    while (a) {
        a = a->tp_base;
        if (a == b)
            return 1;
    }
    return b == &PyBaseObject_Type;
}
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (a == b) return 1;
    mro = a->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(a, b);
}
#if PY_MAJOR_VERSION == 2
static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
    PyObject *exception, *value, *tb;
    int res;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&exception, &value, &tb);
    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
    if (unlikely(res == -1)) {
        PyErr_WriteUnraisable(err);
        res = 0;
    }
    if (!res) {
        res = PyObject_IsSubclass(err, exc_type2);
        if (unlikely(res == -1)) {
            PyErr_WriteUnraisable(err);
            res = 0;
        }
    }
    __Pyx_ErrRestore(exception, value, tb);
    return res;
}
#else
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
    if (!res) {
        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
    }
    return res;
}
#endif
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    assert(PyExceptionClass_Check(exc_type));
    n = PyTuple_GET_SIZE(tuple);
#if PY_MAJOR_VERSION >= 3
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
#endif
    for (i=0; i<n; i++) {
        PyObject *t = PyTuple_GET_ITEM(tuple, i);
        #if PY_MAJOR_VERSION < 3
        if (likely(exc_type == t)) return 1;
        #endif
        if (likely(PyExceptionClass_Check(t))) {
            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
        } else {
        }
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
    if (likely(err == exc_type)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        if (likely(PyExceptionClass_Check(exc_type))) {
            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
        } else if (likely(PyTuple_Check(exc_type))) {
            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
        } else {
        }
    }
    return PyErr_GivenExceptionMatches(err, exc_type);
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
    assert(PyExceptionClass_Check(exc_type1));
    assert(PyExceptionClass_Check(exc_type2));
    if (likely(err == exc_type1 || err == exc_type2)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
    }
    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
}
#endif

/* CheckBinaryVersion */
static int __Pyx_check_binary_version(void) {
    char ctversion[4], rtversion[4];
    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compiletime version %s of module '%.100s' "
                      "does not match runtime version %s",
                      ctversion, __Pyx_MODULE_NAME, rtversion);
        return PyErr_WarnEx(NULL, message, 1);
    }
    return 0;
}

/* FunctionExport */
static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    d = PyObject_GetAttrString(__pyx_m, (char *)"__pyx_capi__");
    if (!d) {
        PyErr_Clear();
        d = PyDict_New();
        if (!d)
            goto bad;
        Py_INCREF(d);
        if (PyModule_AddObject(__pyx_m, (char *)"__pyx_capi__", d) < 0)
            goto bad;
    }
    tmp.fp = f;
#if PY_VERSION_HEX >= 0x02070000
    cobj = PyCapsule_New(tmp.p, sig, 0);
#else
    cobj = PyCObject_FromVoidPtrAndDesc(tmp.p, (void *)sig, 0);
#endif
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(d, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(cobj);
    Py_XDECREF(d);
    return -1;
}

/* InitStrings */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        if (PyObject_Hash(*t->p) == -1)
            return -1;
        ++t;
    }
    return 0;
}

static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
}
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
#if !CYTHON_PEP393_ENABLED
static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    char* defenc_c;
    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
    if (!defenc) return NULL;
    defenc_c = PyBytes_AS_STRING(defenc);
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    {
        char* end = defenc_c + PyBytes_GET_SIZE(defenc);
        char* c;
        for (c = defenc_c; c < end; c++) {
            if ((unsigned char) (*c) >= 128) {
                PyUnicode_AsASCIIString(o);
                return NULL;
            }
        }
    }
#endif
    *length = PyBytes_GET_SIZE(defenc);
    return defenc_c;
}
#else
static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    if (likely(PyUnicode_IS_ASCII(o))) {
        *length = PyUnicode_GET_LENGTH(o);
        return PyUnicode_AsUTF8(o);
    } else {
        PyUnicode_AsASCIIString(o);
        return NULL;
    }
#else
    return PyUnicode_AsUTF8AndSize(o, length);
#endif
}
#endif
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
    if (
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
            __Pyx_sys_getdefaultencoding_not_ascii &&
#endif
            PyUnicode_Check(o)) {
        return __Pyx_PyUnicode_AsStringAndSize(o, length);
    } else
#endif
#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
    if (PyByteArray_Check(o)) {
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
    } else
#endif
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (unlikely(r < 0)) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
    int retval;
    if (unlikely(!x)) return -1;
    retval = __Pyx_PyObject_IsTrue(x);
    Py_DECREF(x);
    return retval;
}
static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
#if PY_MAJOR_VERSION >= 3
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type %.200s).  "
                "The ability to return an instance of a strict subclass of int "
                "is deprecated, and may be removed in a future version of Python.",
                Py_TYPE(result)->tp_name)) {
            Py_DECREF(result);
            return NULL;
        }
        return result;
    }
#endif
    PyErr_Format(PyExc_TypeError,
                 "__%.4s__ returned non-%.4s (type %.200s)",
                 type_name, type_name, Py_TYPE(result)->tp_name);
    Py_DECREF(result);
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
#if CYTHON_USE_TYPE_SLOTS
  PyNumberMethods *m;
#endif
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_Check(x) || PyLong_Check(x)))
#else
  if (likely(PyLong_Check(x)))
#endif
    return __Pyx_NewRef(x);
#if CYTHON_USE_TYPE_SLOTS
  m = Py_TYPE(x)->tp_as_number;
  #if PY_MAJOR_VERSION < 3
  if (m && m->nb_int) {
    name = "int";
    res = m->nb_int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = m->nb_long(x);
  }
  #else
  if (likely(m && m->nb_int)) {
    name = "int";
    res = m->nb_int(x);
  }
  #endif
#else
  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
    res = PyNumber_Int(x);
  }
#endif
  if (likely(res)) {
#if PY_MAJOR_VERSION < 3
    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
#else
    if (unlikely(!PyLong_CheckExact(res))) {
#endif
        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject *x;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_CheckExact(b))) {
    if (sizeof(Py_ssize_t) >= sizeof(long))
        return PyInt_AS_LONG(b);
    else
        return PyInt_AsSsize_t(b);
  }
#endif
  if (likely(PyLong_CheckExact(b))) {
    #if CYTHON_USE_PYLONG_INTERNALS
    const digit* digits = ((PyLongObject*)b)->ob_digit;
    const Py_ssize_t size = Py_SIZE(b);
    if (likely(__Pyx_sst_abs(size) <= 1)) {
        ival = likely(size) ? digits[0] : 0;
        if (size == -1) ival = -ival;
        return ival;
    } else {
      switch (size) {
         case 2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
      }
    }
    #endif
    return PyLong_AsSsize_t(b);
  }
  x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
    return PyInt_FromSize_t(ival);
}


#endif /* Py_PYTHON_H */
